47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
"""股票代码标准化工具。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from typing import Tuple
|
||
|
||
|
||
def normalize_symbol(symbol: str) -> str:
|
||
"""
|
||
功能说明:把股票代码统一为交易所前缀格式。
|
||
参数说明:symbol 为 600000、sh600000、SZ000001 等格式。
|
||
返回值说明:返回小写交易所前缀格式,例如 sh600000。
|
||
注意事项:仅覆盖 A 股常用沪深北代码规则。
|
||
"""
|
||
text = symbol.strip().lower().replace(".", "")
|
||
if text.startswith(("sh", "sz", "bj")) and len(text) == 8:
|
||
return text
|
||
code = text[-6:]
|
||
if code.startswith(("6", "5", "9")):
|
||
return "sh" + code
|
||
if code.startswith(("0", "1", "2", "3")):
|
||
return "sz" + code
|
||
if code.startswith(("4", "8")):
|
||
return "bj" + code
|
||
raise ValueError("无法识别股票代码: %s" % symbol)
|
||
|
||
|
||
def split_symbol(symbol: str) -> Tuple[str, str]:
|
||
"""
|
||
功能说明:拆分标准股票代码。
|
||
参数说明:symbol 为任意支持格式的股票代码。
|
||
返回值说明:返回二元组 (market, code),例如 (sh, 600000)。
|
||
注意事项:会先调用 normalize_symbol 做格式标准化。
|
||
"""
|
||
normalized = normalize_symbol(symbol)
|
||
return normalized[:2], normalized[2:]
|
||
|
||
|
||
def mootdx_market(symbol: str) -> int:
|
||
"""
|
||
功能说明:转换 mootdx 所需市场编号。
|
||
参数说明:symbol 为任意支持格式的股票代码。
|
||
返回值说明:沪市返回 1,深市和北交所返回 0。
|
||
注意事项:mootdx 对北交所支持随版本变化,这里按通达信常见约定归入 0。
|
||
"""
|
||
market, _ = split_symbol(symbol)
|
||
return 1 if market == "sh" else 0 |