在量化交易、行情可视化开发中,分钟级 K 线是最基础也最核心的数据。很多同学在实战开发时,都会遇到接口延迟、频繁限流、数据丢失等问题。
这篇手记我会用通俗易懂的讲解 + 可直接运行的代码,带你从 0 到 1 掌握:用 WebSocket 接入 A 股实时 Tick 数据,本地聚合生成稳定、低延迟的分钟级行情。全程实战导向,适合编程学习者、量化爱好者直接跟着做。
一、先搞懂:我们要解决什么问题?
不管你是做看盘工具、量化策略、数据回测,都离不开稳定的 1 分钟 K 线。直接用 HTTP 轮询获取行情,普遍存在这些痛点:
延迟高,行情慢几秒
请求频繁容易被限流
高峰期数据丢包、不完整
第三方 K 线不够灵活,难以自定义指标
所以更优方案是:用 WebSocket 长连接拿实时 Tick → 本地计算分钟 K 线 → 存储使用。
二、两种行情获取方式,一对比就懂
| 方式 | 延迟 | 稳定性 | 资源占用 | 适合场景 |
|---|---|---|---|---|
| HTTP 轮询 | 秒级 | 一般,易限流 | 高 | 非实时、低频查询 |
| WebSocket | 毫秒级 | 高,长连接稳定 | 低 | 实时行情、策略开发 |
结论很明确:做实时行情,优先选 WebSocket。
三、核心原理:Tick 怎么合成分钟 K 线
Tick 是交易所推送的逐笔成交数据,包含价格、成交量、时间戳。我们只需要按1 分钟时间窗聚合,就能得到标准 K 线:
开盘价:当前分钟第一笔价格
收盘价:当前分钟最后一笔价格
最高价:分钟内价格最大值
最低价:分钟内价格最小值
成交量:分钟内总成交量
代码实现:Tick 聚合分钟 K 线
from datetime import datetime
# 用于缓存当前分钟行情
minute_data = {}
def update_tick(tick):
# 按“年-月-日 时:分”分组
minute_str = datetime.fromtimestamp(tick['time']).strftime('%Y-%m-%d %H:%M')
if minute_str not in minute_data:
# 新分钟:初始化数据
minute_data[minute_str] = {
'open': tick['price'],
'high': tick['price'],
'low': tick['price'],
'close': tick['price'],
'volume': tick['volume']
}
else:
# 更新收盘价、高低价、累计成交量
minute_data[minute_str]['close'] = tick['price']
minute_data[minute_str]['high'] = max(minute_data[minute_str]['high'], tick['price'])
minute_data[minute_str]['low'] = min(minute_data[minute_str]['low'], tick['price'])
minute_data[minute_str]['volume'] += tick['volume']四、实战接入:WebSocket 连接 A 股实时行情
以 AllTick API 为例,直接建立长连接,订阅 A 股 Tick 数据。我把重连、错误处理、心跳都补上,更适合课程实战。
import websocket
import json
def on_message(ws, message):
# 收到数据立刻解析并聚合
tick = json.loads(message)
update_tick(tick)
def on_error(ws, error):
print("连接异常:", error)
def on_close(ws, code, msg):
print("连接关闭,自动重连中...")
ws.run_forever()
def on_open(ws):
# 订阅股票(可批量订阅)
ws.send(json.dumps({"sub": "000001.SZ"}))
print("订阅成功,开始接收行情")
if __name__ == "__main__":
ws = websocket.WebSocketApp(
"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)五、数据存哪里?学习阶段这样选最省心
生成好分钟行情后,根据学习 / 项目阶段选择存储:
CSV/Parquet:最简单,调试首选
SQLite:单文件,支持 SQL 查询
Redis:速度快,适合实时展示
云数据库:正式上线、高并发使用
学习阶段先用CSV/Parquet跑通流程,上线再切换数据库即可。
六、学习进阶:这些技巧让项目更专业
自动计算均价、振幅、涨跌幅等指标
支持多只股票同时订阅,批量处理
加入断线重连、心跳保活,提升稳定性
用历史 Tick 复盘,保证回测数据准确
对接前端图表库,直接做出行情展示页面
手记总结
这套方案是量化开发、行情工具的经典实战案例:WebSocket 长连接 → Tick 数据接收 → 分钟 K 线聚合 → 存储落地。代码轻量、易理解、可直接运行,非常适合编程学习者练手。
相比直接调用第三方接口,自己聚合的行情延迟更低、更可控、更容易扩展,是慕课学习中非常有价值的实战项目。