在量化策略研发与实盘运行中,稳定、精准、可复现的分钟级行情是指标计算、信号生成与回测验证的核心基础。相较于直接使用第三方成品 K 线,通过逐笔 Tick 数据本地聚合分钟行情,在数据口径一致性、低延迟、自定义指标扩展等方面具备明显优势。
本文以实战可用的实现方式,说明如何通过 WebSocket 接入实时行情数据,完成 Tick 聚合、分钟 K 线生成、数据存储与策略层应用,为量化研究与实盘框架提供可复用的技术方案。
一、研究背景:常规数据方案的局限
在策略研发与实盘环境中,传统行情获取方式普遍存在以下约束:
- HTTP 轮询延迟较高,且高频请求易被限流,难以满足实盘低延迟要求。
- 外部 K 线数据计算规则不透明,回测与实盘易出现口径不一致。
- 高峰期易出现数据缺失,影响指标稳定性与策略信号可靠性。
- 自定义指标(如分时均价、量比、振幅等)扩展能力有限。
基于WebSocket 实时 Tick + 本地分钟聚合的实现路径,可系统性解决上述问题,同时保证回测与实盘数据同源、逻辑统一。
二、核心原理:Tick 到分钟 K 线的聚合规则
逐笔 Tick 包含成交时间、价格、成交量等原始信息,按固定时间窗口聚合即可生成标准 1 分钟 K 线,关键字段定义如下:
- 开盘价:当前分钟第一条 Tick 成交价
- 收盘价:当前分钟最后一条 Tick 成交价
- 最高价:当前分钟内成交价最大值
- 最低价:当前分钟内成交价最小值
- 成交量:当前分钟累计成交量
该逻辑可保证数据可复现、可复盘,适用于策略回测与实盘行情生成。
分钟 K 线聚合实现(Python)
from datetime import datetime
# 分钟级数据缓存容器
minute_cache = {}
def update_with_tick(tick):
"""
逐笔Tick更新分钟K线
:param tick: 包含time、price、volume的逐笔数据
"""
# 按分钟分组
current_min = datetime.fromtimestamp(tick['time']).strftime('%Y-%m-%d %H:%M')
if current_min not in minute_cache:
# 初始化当前分钟数据
minute_cache[current_min] = {
'open': tick['price'],
'high': tick['price'],
'low': tick['price'],
'close': tick['price'],
'volume': tick['volume']
}
else:
# 更新收盘价、极值与累计成交量
minute_cache[current_min]['close'] = tick['price']
minute_cache[current_min]['high'] = max(minute_cache[current_min]['high'], tick['price'])
minute_cache[current_min]['low'] = min(minute_cache[current_min]['low'], tick['price'])
minute_cache[current_min]['volume'] += tick['volume']
三、实时数据接入:WebSocket 订阅与处理
长连接 WebSocket 是实时行情接入的主流方案,具备低延迟、稳定推送、资源占用低的特点,适合量化策略实盘环境。以下为可直接部署的接入实现。
WebSocket 实时行情订阅(AllTick API)
import websocket
import json
def on_message(ws, message):
tick_data = json.loads(message)
update_with_tick(tick_data)
def on_error(ws, error):
print(f"连接异常: {error}")
def on_close(ws, close_code, msg):
print("连接关闭")
def on_open(ws):
# 订阅标的,支持批量订阅
ws.send(json.dumps({"sub": "000001.SZ"}))
if __name__ == "__main__":
ws = websocket.WebSocketApp(
url="wss://api.alltick.co/stock/ws",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close
)
# 启动长连接
ws.run_forever(ping_interval=30, ping_timeout=10)
四、数据存储与回测适配
分钟 K 线生成后需持久化存储,以支持策略回测、复盘验证与离线分析。常用存储方案对比:
| 存储格式 | 优势 | 适用场景 |
|---|---|---|
| CSV/Parquet | 结构简单、调试便捷、易迁移 | 研究验证、小样本回测 |
| SQLite | 单文件、支持 SQL 查询、轻量化 | 单机策略研究 |
| Redis | 内存读写快、支持实时查询 | 实盘行情服务、实时指标 |
| 时序数据库 | 高并发写入、高效时间片查询 | 生产级多标的策略框架 |
实战建议:研究阶段使用 Parquet 保证速度与体积;实盘环境采用 Redis + 时序库,兼顾实时性与持久化。
五、策略层应用与扩展方向
基于本地聚合的分钟 K 线,可直接支撑量化策略全流程应用:
- 构建统一数据口径,实现回测与实盘无差别对齐。
- 自定义扩展指标:分时均价、振幅、涨跌幅、资金流速等。
- 支持多标的并行处理,用于行业轮动、截面选股等策略。
- 利用历史 Tick 重算历史分钟线,提升回测可信度与稳健性。
- 对接策略框架,实现实时信号触发、仓位计算与风险控制。
六、总结
通过WebSocket 实时 Tick 订阅 + 本地分钟 K 线聚合,是量化研究与实盘运行中高效、可控、可复现的行情构建方案。该方案可显著降低数据延迟、统一回测与实盘口径、提升策略稳定性,并支持高度自定义的指标与模型扩展。
整体架构轻量、稳定、易集成,可作为量化策略框架的基础数据模块,适用于中频策略、高频监控、因子计算、回测平台等多种研究与生产场景。

