港股通标的数据管道实战从gphk列表到港股行情的落地细节 IG50免费开源股票数据API接口

港股通标的数据管道实战从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

gitee开源地址

github开源地址

相关推荐
长弓三石2 小时前
给企业级智能体装上「安全阀」:开源Harness平台BizBuddy 的内容安全与合规落地
安全·开源
python与大数据分析2 小时前
CNN+Transformer+Mamba 16 模型全景对比|DeepGlobe 遥感土地覆盖分割最全开源工程
cnn·开源·transformer
万物智能信息科技2 小时前
人体感应芯片PIR模块驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·嵌入式硬件·华为·开源·harmonyos
死磕音视频2 小时前
自己搭一个“私人版 ChatGPT“:Open WebUI 一条命令部署 + 接入本地/云端模型保姆级教程
docker·开源·open webui·大模型部署
miofly3 小时前
Codex CLI 0.157.0 自动启动守护进程引发用户争议
开源·github
miofly3 小时前
Cursor 用 S3 上的 WAL 替代副本协调,Push 吞吐量超过每秒 300 次
开源·github
寻林写彡3 小时前
从技术报告到面试入口:安全岗位简历如何用问题、关键技术与量化结果重写项目经历
面试·开源
鶴哥只手遮天3 小时前
Octop 源码深潜-第 00 篇:导读与全景地图
人工智能·开源