港股通标的数据管道实战从gphk列表到港股行情的落地细节 IG50免费开源股票数据API接口
多市场研究的第一站通常是港股,而港股数据管道的第一课是"目录与A股不同":代码是五位数字、板块分主板创业板、还有一个A股没有的维度------是否属于港股通。这篇文章记录我把港股通标的从列表到行情的管道落地的完整细节:列表结构、通标的筛选、代码规范、行情接入与日历差异处理,把踩过的坑一次写全。
数据源起点是港股股票列表,本地接口 base/gphk,全市场一个文件,字段精炼但覆盖了分类所需的全部维度:dm 股票代码(五位,如00001)、mc 名称、isIndex 是否指数、isZb 是否主板、isCyb 是否创业板,以及多市场研究最关键的 isGgt 是否属于港股通。这一行 isGgt 标记,就是南向资金可交易名单的机器可读版本,省掉了自己维护名单表的全部维护成本。
第一步,列表加载与通标的筛选。列表加载后按 isIndex 等于零剔除指数,再按 isGgt 等于一筛出港股通标的。两个工程细节:其一,港股通名单是动态调整的(定期纳入调出),管道必须每次全量重读列表而不是缓存旧名单,否则会出现"标的已调出、管道还在跟踪"的幽灵标的;其二,主板与创业板分层保留,创业板港股的流动性与主板差一个量级,统计口径要分开。
python
import json
def load_ggt_universe(data_root: str) -> dict:
"""加载港股列表并筛出港股通标的(分层保留)"""
rows = json.loads(open(f'{data_root}/base/gphk',
encoding='utf-8').read())
# 字段: dm 代码(5位) mc 名称 isIndex isZb 主板 isCyb 创业板 isGgt 港股通
stocks = [r for r in rows if r.get('isIndex') == 0]
ggt = [r for r in stocks if r.get('isGgt') == 1]
return {
'all_stocks': stocks,
'ggt': ggt,
'ggt_main': [r for r in ggt if r.get('isZb') == 1],
'ggt_cyb': [r for r in ggt if r.get('isCyb') == 1],
}
第二步,代码规范与路径映射。港股代码的五位补零是管道的第一个体力坑:日常语境的"700"在数据体系里是"00700",列表加载后统一做 zfill(5) 规范化,所有下游路径拼接复用同一格式。行情数据的路径组织与A股同构------历史K线沿用 time/history/trade/加代码/加分时级别 的结构,代码换成五位港股格式即可,这让A股管线的读取函数几乎零改动复用,是多市场数据体系最大的工程红利。
python
def norm_hk_code(raw: str) -> str:
"""港股代码规范化:'700' -> '00700'"""
digits = ''.join(ch for ch in str(raw) if ch.isdigit())
return digits.zfill(5)
def kline_path(data_root: str, raw_code: str, level: str) -> str:
"""港股K线路径:与A股同构,代码走五位规范"""
return f'{data_root}/time/history/trade/{norm_hk_code(raw_code)}/{level}'
第三步,日历与时间差异处理。港A股两市日历不同步,这是港股管道最深的一个坑:节假日各自独立(A股的国庆假期港股正常交易,港股的复活节A股正常交易),交易日对齐必须以两地日历的交集为基准。管道的实现方式是从K线文件的日期键自动推断港股交易日历------每只活跃港股的日期序列并集就是市场日历,与A股日历(同样方法从A股K线推断)求交集,供跨市场研究使用。两地时区一致,这一层反而无需处理。
python
import pandas as pd
def trading_days_union(kline_dates: list) -> list:
"""从K线日期键推断交易日历"""
return sorted(set(pd.to_datetime(kline_dates).strftime('%Y-%m-%d')))
def aligned_calendar(hk_days: list, a_days: list) -> dict:
"""两地交易日对齐:交集做共同研究基准"""
hs, as_ = set(hk_days), set(a_days)
return {'both': sorted(hs & as_), # 两市同日开盘
'hk_only': sorted(hs - as_), # 港股独有交易日
'a_only': sorted(as_ - hs)}
第四步,管线组装与日常运营。落地后的管线四个日常动作:每日刷新港股列表核对通名单变更(新增与调出标的各生成一条事件记录)、通标的行情增量同步(沿A股同步框架复用)、两地日历对齐表每日更新(跨市场研究直接取 both 集合)、通标的池与自选池的交集监控。三个实测提醒:其一,创业板港股即使入选通标的,成交额中位数也只有主板同行的零头,任何截面统计都要按板分层;其二,通名单调整事件本身值得入库------调入港股通意味着南向资金可以买入,历史上调入事件后的成交活跃度抬升是可统计的现象;其三,五位代码规范要在管道入口一次做足,中途混入未补零的代码是最常见的路径拼接事故。
这套管道建成后的直接收益,是把"港股通标的研究"从手工维护名单加手动查行情的流水账,变成了一套与A股同构的自动化数据体系。多市场扩展的第二站往往就是它------架构同构、成本减半,这就是先把A股管道做规范的红利。
本文用到的数据接口:港股股票列表 base/gphk(字段 dm、mc、isIndex、isZb、isCyb、isGgt);港股历史K线 time/history/trade/加五位代码/加分时级别。数据底座为本地 ig50。
资料参考:ig50