实时行情数据是量化交易策略、看板系统和交易决策系统的重要输入。本文将以 Infoway API
提供的 WebSocket API 为例,教你如何使用 Python 快速接入并获取 A 股的实时 K线数据 和 盘口数据。
一、准备工作
安装 WebSocket 库:
pip install websockets
二、查询 1 分钟 K 线数据
以下是订阅 A 股平安银行1 分钟 K 线的完整代码:
import asyncio
import json
import websockets
WS_URL = "wss://data.infoway.io/ws?business=stock&apikey=yourApiKey"
# API KEY申请: www.infoway.io
async def connect_and_receive():
async with websockets.connect(WS_URL) as websocket:
init_message = {
"code": 10004, # K线订阅请求号
"trace": "trace-id-001", # 自定义追踪ID
"data": {
"arr": [
{
"type": 1, # 1 表示 1 分钟K线
"codes": "000001.SZ" # A股代码
}
]
}
}
await websocket.send(json.dumps(init_message))
async def send_ping():
while True:
await asyncio.sleep(30)
ping = {"code": 10010, "trace": "trace-id-001"}
await websocket.send(json.dumps(ping))
ping_task = asyncio.create_task(send_ping())
try:
while True:
message = await websocket.recv()
print("K线数据:", message)
finally:
ping_task.cancel()
asyncio.run(connect_and_receive())
返回数据说明:
{
"c": "11.25", // 收盘价
"h": "11.28", // 最高价
"l": "11.22", // 最低价
"o": "11.23", // 开盘价
"v": "258400", // 成交量(单位:股)
"vw": "11.2458", // 加权平均价
"pca": "0.02", // 价格变化
"pfr": "0.18%", // 涨跌幅
"t": 1747550648097, // 时间戳
"s": "000001.SZ", // 股票代码
"ty": 1 // K线类型(1分钟)
}
三、查询盘口数据(Level 2)
以下是订阅平安银行盘口数据的完整代码:
import asyncio
import json
import websockets
WS_URL = "wss://data.infoway.io/ws?business=stock&apikey=yourApiKey"
# 申请API KEY: www.infoway.io
async def connect_and_receive():
async with websockets.connect(WS_URL) as websocket:
init_message = {
"code": 10002, # 盘口订阅请求号
"trace": "trace-id-002",
"data": {
"codes": "000001.SZ"
}
}
await websocket.send(json.dumps(init_message))
async def send_ping():
while True:
await asyncio.sleep(30)
ping = {"code": 10010, "trace": "trace-id-002"}
await websocket.send(json.dumps(ping))
ping_task = asyncio.create_task(send_ping())
try:
while True:
message = await websocket.recv()
print("盘口数据:", message)
finally:
ping_task.cancel()
asyncio.run(connect_and_receive())
返回数据说明:
{
"a": [ // 卖盘数据
["11.25", "11.26", "11.27", "11.28", "11.29"], // 卖五档价格
["23000", "18000", "9500", "6000", "7200"] // 对应数量
],
"b": [ // 买盘数据
["11.24", "11.23", "11.22", "11.21", "11.20"], // 买五档价格
["26000", "20000", "10000", "7500", "8500"] // 对应数量
],
"s": "000001.SZ", // 股票代码
"t": 1747553102161 // 时间戳
}
四、注意事项
-
Ping 心跳机制:WebSocket 连接必须维持心跳,否则服务端会自动断开连接。每隔 30 秒发送一次
code=10010
的心跳消息。 -
股票代码格式:A 股股票代码格式为
000001.SZ
或600000.SH
,需要带交易所后缀。 -
数据使用限制:免费账号有速率限制或订阅数量限制
五、扩展应用建议
-
看板系统:将返回的实时 K 线和盘口数据接入到图表看板中(如 Grafana + WebSocket)。
-
自动交易系统:用盘口数据驱动微观结构策略(如买卖盘力量对比)。
-
AI 策略研究:K 线与盘口联合建模,用于训练 LSTM 或 Transformer 型模型。