概述
在量化策略研发、盘中实时因子抓取、多品种行情回溯工作中,同步跟踪个股与场内 ETF 是常规研究场景:个股用于捕捉标的独立资金波动,ETF 用于映射行业、宽基整体市场情绪,二者结合可完善强弱研判逻辑。多数研究者初期会自建两套独立数据流或采用轮询接口,长期运行后会出现资源损耗、时序失真、迭代维护成本高等问题。本文基于具备免费额度的行情接口,给出单链路统一订阅标准化方案,结合免费资源限制说明适配策略研究、小规模回测的落地边界,附带可复用 Python 代码。
本次使用的免费行情资源边界客观说明:单条 WebSocket 长连接通道、每分钟最多 10 次 HTTP 请求(约 6 秒单次调用),同时提供全年日线 K 线、实时现价、每日收盘数据,足够个人策略验证、小样本历史回测、盘中简易监控使用,高频多标的大规模批量回测场景则需评估额度约束。
一、双数据流 / 轮询方案对量化研究的负面影响
1. 拆分 WebSocket 链路抬高算力与带宽消耗
分别为个股、ETF 建立独立长连接,会翻倍占用服务器网络资源;断线重连、心跳保活、异常捕获逻辑需要重复编写。后续新增指数、可转债样本做对比回测时,代码冗余持续累积,批量历史行情采集效率下降。
2. HTTP 轮询造成 Tick 时序缺失,干扰回测结论
固定间隔请求无法捕捉盘中瞬时大单波动,缺失的 tick 样本会扭曲分时因子、日内动量指标计算结果,基于失真数据完成的回测不具备参考价值,仅适合低频日线级复盘,不满足实时监测需求。
3. 硬编码标的清单不利于策略迭代
将证券代码直接嵌入连接逻辑,每次调整回测标的池、监控清单都要修改底层通信代码,频繁改动易引入程序异常,不利于多版本策略对照实验。
二、单链路统一订阅适配免费额度的核心设计逻辑
个股与 ETF 行情返回字段高度重合,现价、成交量、时间戳、盘口等通用字段可共用解析逻辑,仅在业务层按标的代码区分统计口径,无需拆分数据流,更契合免费单 WebSocket 通道的资源约束:
- 统一标的配置池集中存放个股、ETF 代码,增减监控标的仅修改配置,底层连接逻辑无需改动;
- 仅启用一条 WebSocket 通道批量订阅全部标的,充分利用免费单通道权限,避免多通道占用额外资源;
- 行情统一接收后再分类处理,分时 K 线聚合、强弱打分、数据入库等运算后置;
- HTTP 请求严格控制调用频率,适配每分钟 10 次免费调用上限,避免超限断流影响回测连续性。
三、基础采集 Python 代码(单链路混合订阅)
import websocket
import json
# 个股+ETF统一监控标的清单
watch_symbol_list = ["600000", "510300"]
# 连接完成批量订阅,控制请求频次匹配免费额度限制
def on_open(ws):
sub_payload = {"cmd": "subscribe", "symbol_list": watch_symbol_list}
ws.send(json.dumps(sub_payload))
# 统一解析推送行情,后续可扩展分品种回测指标计算
def on_message(ws, raw_data):
tick = json.loads(raw_data)
tick_code = tick.get("symbol")
real_price = tick.get("price")
ts = tick.get("timestamp")
print(f"标的:{tick_code},现价:{real_price},时间戳:{ts}")
if __name__ == "__main__":
ws_addr = "wss://quote.alltick.co/quote-b-ws-api"
ws_client = websocket.WebSocketApp(ws_addr, on_open=on_open, on_message=on_message)
ws_client.run_forever()
代码仅维持一条长连接,贴合免费单 WebSocket 资源规则;新增赛道 ETF、宽基标的只需扩展列表,不会额外占用通道,适合个人持续监测与小规模回测样本采集。
四、贴合免费额度的工程稳定优化要点
依托免费资源做长期回测、7×24 小时监测,需配套约束逻辑规避超限、数据错乱:
- 标准化证券代码:统一清洗 SH/SZ 市场前缀,全年历史日线入库后便于跨品种对照回测;
- 全局统一北京时间戳:利用免费日线数据做时序对齐,消除分时 K 线、因子计算偏移;
- 节流控制 HTTP 请求:历史 K 线批量拉取时分批休眠,保证每分钟调用不超过 10 次,防止接口限流中断回测;
- 本地缓存订阅清单:网络波动重连后自动恢复批量订阅,减少重复发起订阅带来的额外请求消耗;
- 过期行情过滤:低流动性标的长期无更新则降低排序权重,避免无效样本干扰板块强弱回测打分。
五、分层工程结构(适配多组策略对照回测)
若同时运行多套因子回测、多标的监测任务,模块化拆分便于控制免费资源消耗,模块间低耦合:
- config.py:统一管理个股、ETF 回测标的池,快速切换不同实验样本;
- websocket_client.py:单通道行情订阅,内置请求节流逻辑适配免费调用上限;
- data_handler.py:行情解析、分品种指标计算、日线数据聚合;
- storage.py:存储免费接口提供的全年日线、每日收盘数据,用于离线回测;
- main.py:程序统一入口,统筹采集与回测调度。
分层架构便于隔离行情采集与回测运算逻辑,做多策略对比实验时,无需重复搭建采集链路,最大化利用免费数据额度。
六、量化研究落地总结
对于个人研究者、小规模策略验证场景,免费行情资源能够覆盖日线历史回测、盘中简易实时监测需求,核心约束集中在单 WebSocket 通道、每分钟 HTTP 调用上限,采用单链路统一订阅架构可充分释放免费数据价值。
个股与 ETF 同步采集无需拆分多条数据流,统一标的池 + 单通道订阅既能节约网络资源,又能适配免费额度限制。研发过程中重点做好请求节流、代码标准化、时序对齐三项基础处理,即可稳定输出可用于因子检验、强弱回测的标准化行情样本。若开展大规模全市场批量回测、高频 tick 实时策略,则需评估免费资源上限,补充商用数据渠道支撑算力与调用需求。

