前言
在港股量化开发、行情数据采集与历史回测项目中,港股通标的增减生效时间是极易被忽视的关键细节。此前我在项目开发时,直接将港股通标的清单硬编码配置,每逢交易所季度标的调整,就出现行情统计异常、回测结论失真等问题。结合长期接口对接落地经验,本文梳理标的调整规则、日期判定逻辑,同时附上可直接运行的 WebSocket 接入代码,助力开发者快速落地标准化数据方案。
一、港股通标的调整规则与生效时间规则
港股通标的调整由上交所、深交所联合港交所统一公告发布,分为季度定期调整和突发临时调整两种类型:
- 季度常规调整:按固定周期每季度一轮调整,公告发布后第二个交易日正式生效;
- 临时异动调整:受个股基本面、合规风险等触发临时增减,生效区间为公告后 1~3 个交易日。
生效日期不会和公告发布日期保持一致,交易所预留缓冲周期用于券商、结算系统完成参数变更,仅依托官网人工翻阅公告统计日期,效率低下且极易出现交易日换算失误,不适合自动化程序开发场景。
二、三种数据源方案优劣对比
针对生效日期获取需求,业内常用三种实现方式,结合开发成本、实时性对比:
- 人工爬取交易所公告:需要解析多平台公告文本、手动换算交易日,临时调整信息滞后严重,不适合自动化项目;
- 自建网页爬虫采集:受官网页面改版、接口加密影响,爬虫维护成本高,稳定性无法保障;
- 商用行情 API 对接:AllTick 等标准化行情接口已内置标的变更台账,自动预处理生效日期,定期、临时调整数据实时推送,是量化项目最优选型。
依托 API 可直接拉取标的当前准入状态、变更生效时间,从根源规避静态配置带来的数据 bug。
三、WebSocket 接口实操代码(可直接部署运行)
通过 WebSocket 订阅接口,实时接收标的 Tick 数据与港股通准入时效信息,示例 Python 代码:
import websocket
import json
ws_url = "wss://ws.alltick.co/stock"
def on_message(ws, message):
data = json.loads(message)
# data里包含港股通标的的tick信息和生效日期等
print("收到数据:", data)
def on_open(ws):
# 订阅港股通标的,例如00001.HK和00700.HK
subscribe_msg = {
"action": "subscribe",
"stocks": ["00001.HK", "00700.HK"]
}
ws.send(json.dumps(subscribe_msg))
def on_error(ws, error):
print("WebSocket错误:", error)
def on_close(ws):
print("WebSocket关闭")
ws = websocket.WebSocketApp(
ws_url,
on_message=on_message,
on_open=on_open,
on_error=on_error,
on_close=on_close
)
ws.run_forever()
四、工程落地优化要点
- 摒弃静态配置标的列表:禁止在代码内固化港股通清单,通过接口动态拉取最新标的库;
- 数据逻辑绑定生效日期:以标的生效日作为入池 / 剔除分界点,校准行情采集与回测时间线;
- 兼容临时调整场景:依靠 API 实时同步突发变更,规避非常规标的改动造成的数据异常。
五、总结
想要保证港股数据项目稳定性,既要吃透交易所标的调整的时间规则,又要借助成熟 API 实现数据自动化更新。将生效日期作为数据筛选的核心标尺,能大幅降低量化回测、行情抓取环节的数据差错,减少后期迭代维护成本。
参考文档:https://apis.alltick.co/
GitHub:https://github.com/alltick/alltick-realtime-forex-crypto-stock-tick-finance-websocket-api
