在金融业务开发中,"实时性"是一个绕不开的话题。最近在做一个港股行情的监控看板,踩了不少坑,也总结了一些最佳实践。今天直接上干货,教你如何用 Python 搞定港股实时数据流。
场景描述 需求很简单:实时获取恒生指数和热门个股的最新成交价。 传统做法:前端写个 setInterval 每秒调一次后端接口。 后果:服务器压力大,数据延迟高,用户体验极差。 解决方案:WebSocket 长连接。
代码实现 不管是自建行情中心,还是对接第三方(如 AllTick API 等成熟方案),客户端的逻辑其实大同小异。
关键点在于:
- 心跳保活:防止连接意外断开。
- 断线重连:网络波动时的自动恢复(虽然本demo未展示,但生产环境必备)。
- 数据订阅:按需索取,节省带宽。
**pip install websocket-client**
核心代码 Demo 这段代码可以直接 Copy 运行。它展示了如何建立连接并订阅 00700.HK。
**import websocket
import json
url = "wss://api.alltick.co/realtime/hk"
def on_message(ws, message):
data = json.loads(message)
# 打印最新成交价和涨跌情况
print(f"{data['symbol']} 最新价格: {data['last_price']} 涨跌: {data['change']}")
def on_open(ws):
# 订阅恒生指数及指定股票行情
ws.send(json.dumps({
"action": "subscribe",
"symbols": ["HSI", "00700.HK"]
}))
ws = websocket.WebSocketApp(url, on_message=on_message, on_open=on_open)
ws.run_forever()**
数据结构解析 收到的 JSON 数据通常包含 last_price(最新价)、volume(成交量)等核心字段。利用 Pandas 可以快速将其转换为 DataFrame 进行切片分析。
import pandas as pd
# 假设我们有一个行情列表
ticks = [
{"time": "09:30:01", "price": 500, "volume": 100},
{"time": "09:30:02", "price": 502, "volume": 50},
{"time": "09:30:03", "price": 501, "volume": 80},
]
df = pd.DataFrame(ticks)
df['time'] = pd.to_datetime(df['time'])
print(df)
总结 对于实时性要求高的应用,WebSocket 是不二之选。掌握了这个技能点,你在开发类似的实时监控、即时通讯应用时都能游刃有余。