Files
qihuo/symbols.py
T

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