""" All supported futures contracts — covers every symbol available via akshare (86 total). Organized by exchange and category. """ from dataclasses import dataclass @dataclass class ContractInfo: symbol: str # akshare query name exchange: str # exchange code category: str # category key name_cn: str # display name EXCHANGES = { "CFFEX": "中国金融期货交易所", "SHFE": "上海期货交易所", "INE": "上海国际能源交易中心", "DCE": "大连商品交易所", "CZCE": "郑州商品交易所", "GFEX": "广州期货交易所", } CATEGORIES = { "financial": "金融期货", "precious_metal": "贵金属", "base_metal": "有色金属", "ferrous": "黑色系", "energy": "能源化工", "agriculture": "农产品", "shipping": "航运指数", } CONTRACTS: list[ContractInfo] = [ # ── 金融期货 (CFFEX) ───────────────────────────────── ContractInfo("沪深300指数期货", "CFFEX", "financial", "沪深300"), ContractInfo("上证50指数期货", "CFFEX", "financial", "上证50"), ContractInfo("中证500指数期货", "CFFEX", "financial", "中证500"), ContractInfo("中证1000股指期货", "CFFEX", "financial", "中证1000"), ContractInfo("2年期国债期货", "CFFEX", "financial", "2年国债"), ContractInfo("5年期国债期货", "CFFEX", "financial", "5年国债"), ContractInfo("10年期国债期货", "CFFEX", "financial", "10年国债"), # ── 贵金属 (SHFE / GFEX) ──────────────────────────── ContractInfo("黄金", "SHFE", "precious_metal", "黄金"), ContractInfo("白银", "SHFE", "precious_metal", "白银"), ContractInfo("铂", "GFEX", "precious_metal", "铂"), ContractInfo("钯", "GFEX", "precious_metal", "钯"), # ── 有色金属 (SHFE) ────────────────────────────────── ContractInfo("沪铜", "SHFE", "base_metal", "沪铜"), ContractInfo("沪铝", "SHFE", "base_metal", "沪铝"), ContractInfo("沪锌", "SHFE", "base_metal", "沪锌"), ContractInfo("沪铅", "SHFE", "base_metal", "沪铅"), ContractInfo("沪镍", "SHFE", "base_metal", "沪镍"), ContractInfo("沪锡", "SHFE", "base_metal", "沪锡"), ContractInfo("不锈钢", "SHFE", "base_metal", "不锈钢"), ContractInfo("国际铜", "SHFE", "base_metal", "国际铜"), ContractInfo("氧化铝", "SHFE", "base_metal", "氧化铝"), ContractInfo("铸造铝合金期货", "SHFE", "base_metal", "铸造铝合金"), ContractInfo("工业硅", "GFEX", "base_metal", "工业硅"), ContractInfo("碳酸锂", "GFEX", "base_metal", "碳酸锂"), ContractInfo("多晶硅", "GFEX", "base_metal", "多晶硅"), # ── 黑色系 (SHFE / DCE / CZCE) ────────────────────── ContractInfo("螺纹钢", "SHFE", "ferrous", "螺纹钢"), ContractInfo("热轧卷板", "SHFE", "ferrous", "热卷"), ContractInfo("线材", "SHFE", "ferrous", "线材"), ContractInfo("铁矿石", "DCE", "ferrous", "铁矿石"), ContractInfo("焦煤", "DCE", "ferrous", "焦煤"), ContractInfo("焦炭", "DCE", "ferrous", "焦炭"), ContractInfo("锰硅", "CZCE", "ferrous", "锰硅"), ContractInfo("硅铁", "CZCE", "ferrous", "硅铁"), ContractInfo("动力煤", "CZCE", "ferrous", "动力煤"), # ── 能源化工 (SHFE / INE / DCE / CZCE) ────────────── ContractInfo("原油", "INE", "energy", "原油"), ContractInfo("燃油", "SHFE", "energy", "燃油"), ContractInfo("沥青", "SHFE", "energy", "沥青"), ContractInfo("橡胶", "SHFE", "energy", "橡胶"), ContractInfo("20号胶", "SHFE", "energy", "20号胶"), ContractInfo("丁二烯橡胶", "SHFE", "energy", "丁二烯橡胶"), ContractInfo("纸浆", "SHFE", "energy", "纸浆"), ContractInfo("胶版印刷纸期货", "SHFE", "energy", "胶版印刷纸"), ContractInfo("低硫燃料油", "SHFE", "energy", "低硫燃油"), ContractInfo("PTA", "CZCE", "energy", "PTA"), ContractInfo("郑醇", "CZCE", "energy", "甲醇"), ContractInfo("乙二醇", "DCE", "energy", "乙二醇"), ContractInfo("尿素", "CZCE", "energy", "尿素"), ContractInfo("纯碱", "CZCE", "energy", "纯碱"), ContractInfo("玻璃", "CZCE", "energy", "玻璃"), ContractInfo("塑料", "DCE", "energy", "塑料(LLDPE)"), ContractInfo("PP", "DCE", "energy", "聚丙烯(PP)"), ContractInfo("PVC", "DCE", "energy", "聚氯乙烯(PVC)"), ContractInfo("苯乙烯", "DCE", "energy", "苯乙烯"), ContractInfo("短纤", "CZCE", "energy", "短纤"), ContractInfo("液化石油气", "DCE", "energy", "液化气(LPG)"), ContractInfo("纯苯", "DCE", "energy", "纯苯"), ContractInfo("烧碱", "CZCE", "energy", "烧碱"), ContractInfo("二甲苯", "CZCE", "energy", "二甲苯(PX)"), ContractInfo("瓶级聚酯切片", "CZCE", "energy", "瓶片(PET)"), ContractInfo("丙烯", "CZCE", "energy", "丙烯"), # ── 农产品 (DCE / CZCE) ────────────────────────────── ContractInfo("豆一", "DCE", "agriculture", "豆一"), ContractInfo("豆二", "DCE", "agriculture", "豆二"), ContractInfo("豆粕", "DCE", "agriculture", "豆粕"), ContractInfo("豆油", "DCE", "agriculture", "豆油"), ContractInfo("棕榈", "DCE", "agriculture", "棕榈油"), ContractInfo("菜油", "CZCE", "agriculture", "菜籽油"), ContractInfo("菜籽", "CZCE", "agriculture", "菜籽"), ContractInfo("菜粕", "CZCE", "agriculture", "菜粕"), ContractInfo("花生", "CZCE", "agriculture", "花生"), ContractInfo("棉花", "CZCE", "agriculture", "棉花"), ContractInfo("棉纱", "CZCE", "agriculture", "棉纱"), ContractInfo("白糖", "CZCE", "agriculture", "白糖"), ContractInfo("鲜苹果", "CZCE", "agriculture", "苹果"), ContractInfo("红枣", "CZCE", "agriculture", "红枣"), ContractInfo("玉米", "DCE", "agriculture", "玉米"), ContractInfo("玉米淀粉", "DCE", "agriculture", "玉米淀粉"), ContractInfo("鸡蛋", "DCE", "agriculture", "鸡蛋"), ContractInfo("生猪", "DCE", "agriculture", "生猪"), ContractInfo("粳米", "DCE", "agriculture", "粳米"), ContractInfo("粳稻", "CZCE", "agriculture", "粳稻"), ContractInfo("强麦", "CZCE", "agriculture", "强麦"), ContractInfo("早籼稻", "CZCE", "agriculture", "早籼稻"), ContractInfo("晚籼稻", "CZCE", "agriculture", "晚籼稻"), ContractInfo("纤维板", "DCE", "agriculture", "纤维板"), ContractInfo("胶合板", "DCE", "agriculture", "胶合板"), ContractInfo("原木", "DCE", "agriculture", "原木"), # ── 航运指数 (SHFE) ───────────────────────────────── ContractInfo("集运指数(欧线)期货", "SHFE", "shipping", "集运指数(欧线)"), ] SYMBOL_LOOKUP: dict[str, ContractInfo] = {c.symbol: c for c in CONTRACTS} def get_contracts_by_category(category: str | None = None) -> list[ContractInfo]: if category is None: return CONTRACTS return [c for c in CONTRACTS if c.category == category] def get_contracts_by_exchange(exchange: str | None = None) -> list[ContractInfo]: if exchange is None: return CONTRACTS return [c for c in CONTRACTS if c.exchange == exchange]