ae480cb3e7
Co-authored-by: Cursor <cursoragent@cursor.com>
96 lines
4.6 KiB
Python
96 lines
4.6 KiB
Python
# 国内期货品种映射:中文名 -> 新浪行情代码(0 表示主力连续)
|
|
SYMBOLS = [
|
|
{"name": "白银", "code": "nf_AG0", "exchange": "上期所"},
|
|
{"name": "黄金", "code": "nf_AU0", "exchange": "上期所"},
|
|
{"name": "铜", "code": "nf_CU0", "exchange": "上期所"},
|
|
{"name": "铝", "code": "nf_AL0", "exchange": "上期所"},
|
|
{"name": "锌", "code": "nf_ZN0", "exchange": "上期所"},
|
|
{"name": "铅", "code": "nf_PB0", "exchange": "上期所"},
|
|
{"name": "镍", "code": "nf_NI0", "exchange": "上期所"},
|
|
{"name": "锡", "code": "nf_SN0", "exchange": "上期所"},
|
|
{"name": "螺纹钢", "code": "nf_RB0", "exchange": "上期所"},
|
|
{"name": "热卷", "code": "nf_HC0", "exchange": "上期所"},
|
|
{"name": "不锈钢", "code": "nf_SS0", "exchange": "上期所"},
|
|
{"name": "原油", "code": "nf_SC0", "exchange": "上期所"},
|
|
{"name": "燃油", "code": "nf_FU0", "exchange": "上期所"},
|
|
{"name": "沥青", "code": "nf_BU0", "exchange": "上期所"},
|
|
{"name": "橡胶", "code": "nf_RU0", "exchange": "上期所"},
|
|
{"name": "纸浆", "code": "nf_SP0", "exchange": "上期所"},
|
|
{"name": "铁矿石", "code": "nf_I0", "exchange": "大商所"},
|
|
{"name": "焦炭", "code": "nf_J0", "exchange": "大商所"},
|
|
{"name": "焦煤", "code": "nf_JM0", "exchange": "大商所"},
|
|
{"name": "豆粕", "code": "nf_M0", "exchange": "大商所"},
|
|
{"name": "豆油", "code": "nf_Y0", "exchange": "大商所"},
|
|
{"name": "棕榈油", "code": "nf_P0", "exchange": "大商所"},
|
|
{"name": "玉米", "code": "nf_C0", "exchange": "大商所"},
|
|
{"name": "淀粉", "code": "nf_CS0", "exchange": "大商所"},
|
|
{"name": "鸡蛋", "code": "nf_JD0", "exchange": "大商所"},
|
|
{"name": "生猪", "code": "nf_LH0", "exchange": "大商所"},
|
|
{"name": "聚乙烯", "code": "nf_L0", "exchange": "大商所"},
|
|
{"name": "聚丙烯", "code": "nf_PP0", "exchange": "大商所"},
|
|
{"name": "PVC", "code": "nf_V0", "exchange": "大商所"},
|
|
{"name": "乙二醇", "code": "nf_EG0", "exchange": "大商所"},
|
|
{"name": "苯乙烯", "code": "nf_EB0", "exchange": "大商所"},
|
|
{"name": "液化气", "code": "nf_PG0", "exchange": "大商所"},
|
|
{"name": "菜粕", "code": "nf_RM0", "exchange": "郑商所"},
|
|
{"name": "菜油", "code": "nf_OI0", "exchange": "郑商所"},
|
|
{"name": "白糖", "code": "nf_SR0", "exchange": "郑商所"},
|
|
{"name": "棉花", "code": "nf_CF0", "exchange": "郑商所"},
|
|
{"name": "甲醇", "code": "nf_MA0", "exchange": "郑商所"},
|
|
{"name": "PTA", "code": "nf_TA0", "exchange": "郑商所"},
|
|
{"name": "玻璃", "code": "nf_FG0", "exchange": "郑商所"},
|
|
{"name": "纯碱", "code": "nf_SA0", "exchange": "郑商所"},
|
|
{"name": "尿素", "code": "nf_UR0", "exchange": "郑商所"},
|
|
{"name": "硅铁", "code": "nf_SF0", "exchange": "郑商所"},
|
|
{"name": "锰硅", "code": "nf_SM0", "exchange": "郑商所"},
|
|
{"name": "苹果", "code": "nf_AP0", "exchange": "郑商所"},
|
|
{"name": "红枣", "code": "nf_CJ0", "exchange": "郑商所"},
|
|
{"name": "花生", "code": "nf_PK0", "exchange": "郑商所"},
|
|
{"name": "沪深300", "code": "CFF_RE_IF0", "exchange": "中金所"},
|
|
{"name": "上证50", "code": "CFF_RE_IH0", "exchange": "中金所"},
|
|
{"name": "中证500", "code": "CFF_RE_IC0", "exchange": "中金所"},
|
|
{"name": "中证1000", "code": "CFF_RE_IM0", "exchange": "中金所"},
|
|
]
|
|
|
|
|
|
def _contract_label(code: str) -> str:
|
|
"""从新浪代码提取品种字母部分,用于展示主力合约标识。"""
|
|
raw = code.replace("nf_", "").replace("CFF_RE_", "")
|
|
letters = "".join(c for c in raw if c.isalpha())
|
|
return f"{letters}主力"
|
|
|
|
|
|
def search_symbols(query: str) -> list:
|
|
q = query.strip().lower()
|
|
if not q:
|
|
return []
|
|
results = []
|
|
for s in SYMBOLS:
|
|
name = s["name"]
|
|
code = s["code"]
|
|
contract = _contract_label(code)
|
|
if q in name.lower() or q in code.lower() or q in contract.lower():
|
|
results.append({
|
|
"name": name,
|
|
"code": code,
|
|
"exchange": s["exchange"],
|
|
"contract": contract,
|
|
"display": f"{name} ({contract})",
|
|
})
|
|
return results[:12]
|
|
|
|
|
|
from typing import Optional
|
|
|
|
|
|
def get_by_code(code: str) -> Optional[dict]:
|
|
for s in SYMBOLS:
|
|
if s["code"] == code:
|
|
return {
|
|
"name": s["name"],
|
|
"code": s["code"],
|
|
"exchange": s["exchange"],
|
|
"contract": _contract_label(s["code"]),
|
|
}
|
|
return None
|