手记

开发者必学:从 0 搭建分钟行情服务

在量化交易、行情可视化开发中,分钟级 K 线是最基础也最核心的数据。很多同学在实战开发时,都会遇到接口延迟、频繁限流、数据丢失等问题。

这篇手记我会用通俗易懂的讲解 + 可直接运行的代码,带你从 0 到 1 掌握:用 WebSocket 接入 A 股实时 Tick 数据,本地聚合生成稳定、低延迟的分钟级行情。全程实战导向,适合编程学习者、量化爱好者直接跟着做。


一、先搞懂:我们要解决什么问题?

不管你是做看盘工具、量化策略、数据回测,都离不开稳定的 1 分钟 K 线。直接用 HTTP 轮询获取行情,普遍存在这些痛点:

  • 延迟高,行情慢几秒

  • 请求频繁容易被限流

  • 高峰期数据丢包、不完整

  • 第三方 K 线不够灵活,难以自定义指标

所以更优方案是:用 WebSocket 长连接拿实时 Tick → 本地计算分钟 K 线 → 存储使用


二、两种行情获取方式,一对比就懂


方式延迟稳定性资源占用适合场景
HTTP 轮询秒级一般,易限流非实时、低频查询
WebSocket毫秒级高,长连接稳定实时行情、策略开发

结论很明确:做实时行情,优先选 WebSocket


三、核心原理:Tick 怎么合成分钟 K 线

Tick 是交易所推送的逐笔成交数据,包含价格、成交量、时间戳。我们只需要按1 分钟时间窗聚合,就能得到标准 K 线:

  1. 开盘价:当前分钟第一笔价格

  2. 收盘价:当前分钟最后一笔价格

  3. 最高价:分钟内价格最大值

  4. 最低价:分钟内价格最小值

  5. 成交量:分钟内总成交量

代码实现: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跑通流程,上线再切换数据库即可。


六、学习进阶:这些技巧让项目更专业

  1. 自动计算均价、振幅、涨跌幅等指标

  2. 支持多只股票同时订阅,批量处理

  3. 加入断线重连、心跳保活,提升稳定性

  4. 用历史 Tick 复盘,保证回测数据准确

  5. 对接前端图表库,直接做出行情展示页面


手记总结

这套方案是量化开发、行情工具的经典实战案例:WebSocket 长连接 → Tick 数据接收 → 分钟 K 线聚合 → 存储落地。代码轻量、易理解、可直接运行,非常适合编程学习者练手。

相比直接调用第三方接口,自己聚合的行情延迟更低、更可控、更容易扩展,是慕课学习中非常有价值的实战项目。


0人推荐
随时随地看视频
慕课网APP