我接触港股api有一段时间了,最开始只是想简单地获取一些实时行情,后来慢慢延伸到历史数据分析,才发现这一块其实有不少细节要注意。对开发者来说,关键是怎么把数据拿到手,而且还要尽量稳定、快速。
接口类型选择
接入港股api,通常分成两类:实时行情接口和历史数据接口。实时行情接口偏向 WebSocket 或者长连接,数据更新快,适合行情监控或者数据展示;历史数据接口大多是 REST API,获取过去K线、分笔信息或者财务数据,适合做数据统计和分析。
我平时用实时行情做信息推送,每当价格波动明显就触发提醒;历史数据则用来画图表或者做分析。两者配合,能让数据处理更加完整。
实时行情获取
实时行情最直接的方式是 WebSocket。对港股来说,tick数据尤其关键,因为港股市场变化快,分笔信息对分析非常有用。以 AllTick API 为例,它的 WebSocket 接口可以订阅股票的实时行情。Python 里可以这样写:
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
print(data) # 打印实时tick信息
def on_open(ws):
subscribe_msg = {
"type": "subscribe",
"symbols": ["00700", "09988"],
"fields": ["last_price", "volume", "time"]
}
ws.send(json.dumps(subscribe_msg))
ws = websocket.WebSocketApp(
"wss://api.alltick.co/stock-websocket",
on_open=on_open,
on_message=on_message
)
ws.run_forever()
这样就可以持续获取股票的分笔成交和实时价格。WebSocket的优势是数据实时性高,而且开一个连接就能同时订阅多个股票,比频繁调用 REST 接口省事多了。
接入时需要注意几个点:订阅的股票列表不要一次拉太多,容易被接口限流;有些api提供增量更新和全量快照,最好先拉取快照,再处理增量数据,保证行情不丢。
历史数据获取
历史数据接口通常是 REST 风格,支持按日、周、月或者按分钟获取 K 线数据。调用方式和一般 API 差不多,关键在于理解字段,比如价格字段、成交量、开收盘时间戳等。
获取日K线数据可以用 Python 这样写:
import requests
url = "https://api.alltick.co/rest/stock/kline"
params = {
"symbol": "00700",
"start_date": "2025-01-01",
"end_date": "2025-04-01",
"interval": "1d"
}
headers = {
"Authorization": "Bearer YOUR_API_KEY"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
for kline in data[:5]:
print(kline)
我一般会把获取到的数据先存到数据库或本地文件,然后用 pandas 做处理,画图或者分析。这样就不必每次都请求接口,也方便跨时间段处理数据。
接入中的注意点
在实际使用港股api时,我注意了几个问题:
-
频率控制:接口有调用限制,不要每秒钟刷太多请求。
-
数据完整性:实时行情最好有快照和增量结合,防止丢数据。
-
异常处理:网络断开或返回异常数据是常态,需要做好重连和容错。
-
时间对齐:港股交易有早盘、午盘,历史数据的时间戳需要和交易时段匹配。
我自己在处理历史数据的时候,就遇到过午盘休市导致时间对齐不一致的情况。后续统一了交易时段,问题就解决了。
我平时把接口调用、数据存储和分析流程都搭建成一个小型管道,这样无论是实时监控还是历史分析,都能高效运转。港股市场信息量大,但工具和接口成熟,熟练掌握后,开发起来就顺畅很多。
