实时行情这件事,说简单也简单,说麻烦也真麻烦。需求往往很直接:想拿到股票的最新价格、成交量、时间戳,然后交给策略、展示层或者下游系统。但真正动手的时候,很多人都会发现:HTTP 轮询不够实时,频率一高就容易出问题;而 WebSocket 又经常卡在接入、鉴权、订阅这些细节上。这里准备记录一下稳定获取股票实时行情的实现方式。
接入方式概览
整个流程可以拆成三步:
-
建立 WebSocket 连接
-
发送鉴权信息
-
订阅指定股票的实时行情
服务端会持续推送 tick 数据,客户端只需要保持连接并处理消息即可。
建立连接
以 Python 为例,使用标准的 websocket-client 库即可:
import websocket
import json
def on_open(ws):
print("connection opened")
def on_message(ws, message):
data = json.loads(message)
print(data)
def on_error(ws, error):
print(error)
def on_close(ws):
print("connection closed")
ws = websocket.WebSocketApp(
"wss://api.alltick.co/ws", # 替换为AllTick的WebSocket地址
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close
)
ws.run_forever()
连接建立后,不会立即收到行情数据,需要先完成鉴权和订阅。
鉴权
连接成功后,第一件事是发送鉴权消息。常见形式是一个 JSON:
def on_open(ws):
auth_msg = {
"cmd": "auth",
"token": "YOUR_API_TOKEN" # 替换为实际API Token
}
ws.send(json.dumps(auth_msg))
服务端返回鉴权成功的响应后,才能继续下一步。
订阅股票实时行情
订阅消息同样是 JSON,核心信息只有两点:市场 + 标的代码。
subscribe_msg = {
"cmd": "subscribe",
"args": [
{
"symbol": "AAPL", # 替换为实际的股票代码
"market": "US" # 替换为对应的市场
}
]
}
ws.send(json.dumps(subscribe_msg))
发送完成后,服务器会持续推送该股票的实时 tick 数据。
行情数据结构
实际收到的数据一般类似下面这样:
{
"symbol": "AAPL",
"price": 187.32,
"volume": 100,
"timestamp": 1700000000
}
字段并不复杂,处理起来也比较友好。无论是直接入库,还是转成内部统一结构,都很顺手。
使用时的一些细节
-
WebSocket 建议放在独立线程或协程中运行
-
断线重连要处理,尤其是长时间运行的服务
-
订阅数量不要无限叠加,按需控制
这些点不展开写,实际接入时基本都会遇到。
如果只是获取股票实时行情,其实并不需要复杂的方案。稳定的 WebSocket 推送 + 清晰的数据结构,已经能覆盖大多数使用场景。
像 AllTick 提供的股票实时API,就通过稳定的 WebSocket 接口,帮助你解决了这一难题,提供了一种简单而高效的方式,实时获取各类市场的股票数据。