lucky-loster's picture
Upload folder using huggingface_hub
590a501 verified
Raw
History Blame Contribute Delete
7.67 kB
"""
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]