# 国内期货品种映射:中文名 -> 新浪行情代码(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