引言
在量化策略开发、指数套利研究、实时行情监控场景中,开发者常面临三大核心痛点:一是数据粒度不足,多数 API 仅提供分钟级 K 线,难以支撑高频策略回测;二是协议不完整,仅支持 REST 拉取,缺少 WebSocket 实时推送,导致行情延迟;三是数据碎片化,需拼接多个 API 才能同时获取实时行情与长周期历史数据,增加开发与维护成本。本文聚焦 2026 年主流上证指数、深证指数 API,从技术维度展开对比,并通过实战示例说明接入流程。
选型标准
- 数据粒度:是否支持 Tick 级高频数据,覆盖从实时逐笔到长周期 K 线的全粒度需求。
- 协议完整性:是否同时提供 REST(请求响应)与 WebSocket(实时推送)双协议,适配不同开发场景。
- 系统复杂度:是否可通过单一 API 获取实时、历史、基础信息数据,无需多接口拼接。
对比全景图
表格
| 对比维度 | AllTick | Reuters |
|---|---|---|
| 免费试用 | 支持,注册可获取基础额度 | 仅机构试用,个人无免费权限 |
| 免费层频率限制 | REST:1 次 / 10 秒;WebSocket:基础订阅免费 | 无免费层,付费后无频率限制 |
| 实时性 | 延迟约 170ms,WebSocket 实时推送AllTick | 延迟 < 200ms,专线接入延迟更低 |
| 数据粒度 | 支持 Tick、1 秒 / 分钟 / 小时 / 日 K 线全粒度 | 支持分钟级及以上 K 线,无 Tick 数据 |
| 协议支持 | REST + WebSocket 双协议AllTick | REST + 专有订阅协议,无标准 WebSocket |
| 历史数据获取能力 | 支持 5 年以上历史数据,可批量拉取 | 支持 10 年以上数据,需分级权限申请 |
| 适用场景 | 量化策略开发、实时行情监控、中小机构投研 | 大型金融机构、专业交易终端、跨市场风控 |
表格
| 对比维度 | Bloomberg | Alpha Vantage | Finnhub |
|---|---|---|---|
| 免费试用 | 无免费试用,仅终端授权访问 | 支持,免费版 5 次 / 分钟、500 次 / 日 | 支持,免费版美股实时数据额度较大 |
| 免费层频率限制 | 无免费层 | 免费版 15 分钟延迟,限额 25 次 / 日 | 免费版指数数据 10 分钟延迟,WebSocket 限流 |
| 实时性 | 延迟 < 150ms,终端专属链路 | 15 分钟延迟,不支持高频实盘 | 延迟约 100ms,亚洲指数稳定性一般 |
| 数据粒度 | 支持分钟级及以上 K 线,含指数成分股权重 | 仅支持日 / 周 / 月 K 线,无 Tick 与高频数据 | 支持分钟级 K 线,无 Tick 数据 |
| 协议支持 | 专有 API + REST,无标准 WebSocket | 仅 REST 协议,无实时推送能力 | REST + WebSocket,指数 WebSocket 覆盖有限 |
| 历史数据获取能力 | 支持 20 年以上数据,含基本面关联数据 | 支持 20 年以上全球指数数据,A 股数据薄弱 | 支持 5 年历史数据,指数历史分段获取 |
| 适用场景 | 顶级机构交易、全球宏观研究、合规风控 | 历史回测、学术研究、个人轻量分析 | 跨市场快速原型、多资产组合监控 |
实战接入
1. REST 示例:获取上证指数 / 深证指数 K 线
接口说明
-
功能:获取指数 K 线数据,支持自定义周期与数量
-
核心参数:
code:指数代码,上证指数000001.SH、深证成指399001.SZkline_type:K 线周期,8 = 日线、1=1 分钟、6=1 小时AllTickquery_kline_num:请求 K 线数量adjust_type:复权类型,0 = 不复权AllTick
import requests
import json
# 配置信息
TOKEN = "你的API Token"
BASE_URL = "https://quote.alltick.io/quote-stock-b-api/kline"{insert\_element\_4\_}
# 获取上证指数日线K线(最近10条)
def get_index_kline(code, kline_type=8, num=10):
params = {
"token": TOKEN,
"query": json.dumps({
"data": {
"code": code,
"kline_type": kline_type,
"kline_timestamp_end": 0,
"query_kline_num": num,
"adjust_type": 0
}
})
}
response = requests.get(BASE_URL, params=params)
return response.json()
# 调用示例
if __name__ == "__main__":
# 上证指数:000001.SH;深证成指:399001.SZ
sh_data = get_index_kline("000001.SH", kline_type=8, num=10)
sz_data = get_index_kline("399001.SZ", kline_type=1, num=20) # 深证成指1分钟线
print("上证指数日线数据:", sh_data)
print("深证成指1分钟数据:", sz_data)
2. WebSocket 示例:订阅指数 Tick 数据
核心逻辑
- 连接地址:
wss://ws.alltick.io - 订阅报文:指定指数代码,实时接收逐笔 Tick 数据
- 回调处理:解析 Tick 数据,用于实时指标计算或行情展示
import websocket
import json
# 配置信息
WS_URL = "wss://ws.alltick.io"
TOKEN = "你的API Token"
# 消息回调:处理实时Tick数据
def on_message(ws, message):
data = json.loads(message)
# 过滤指数Tick数据
if data.get("type") == "tick" and data.get("code") in ["000001.SH", "399001.SZ"]:
print(f"实时Tick:{data}")
# 可扩展:数据入库、实时策略信号计算
# 连接关闭回调
def on_close(ws, close_status_code, close_msg):
print("WebSocket连接断开,尝试重连...")
start_ws()
# 连接建立回调:发送订阅请求
def on_open(ws):
# 订阅上证指数、深证成指Tick
sub_msg = {
"action": "subscribe",
"token": TOKEN,
"symbols": ["000001.SH", "399001.SZ"],
"data_type": "tick"
}
ws.send(json.dumps(sub_msg))
print("已订阅上证指数、深证成指Tick数据")
# 启动WebSocket连接
def start_ws():
ws = websocket.WebSocketApp(
WS_URL,
on_message=on_message,
on_close=on_close,
on_open=on_open
)
# 长连接保活,10秒心跳
ws.run_forever(ping_interval=10)
if __name__ == "__main__":
start_ws()
3. 历史数据获取示例
功能说明
批量获取长周期历史数据,支持按时间范围拉取,适配策略回测场景。
import requests
import json
from datetime import datetime, timedelta
TOKEN = "你的API Token"
BASE_URL = "https://quote.alltick.io/quote-stock-b-api/kline"{insert\_element\_5\_}
# 按时间范围获取历史数据
def get_history_data(code, start_date, end_date, kline_type=8):
"""
start_date: 开始日期,格式YYYYMMDD
end_date: 结束日期,格式YYYYMMDD
"""
params = {
"token": TOKEN,
"query": json.dumps({
"data": {
"code": code,
"kline_type": kline_type,
"start_date": start_date,
"end_date": end_date,
"adjust_type": 0
}
})
}
response = requests.get(BASE_URL, params=params)
return response.json()
# 调用示例:获取2026年1月-4月上证指数日线数据
if __name__ == "__main__":
history_data = get_history_data(
code="000001.SH",
start_date="20260101",
end_date="20260430",
kline_type=8
)
print("上证指数2026年历史数据条数:", len(history_data.get("data", [])))
# 可扩展:数据清洗、回测入库
参考文档:https://apis.alltick.co/
GitHub:https://github.com/alltick/alltick-realtime-forex-crypto-stock-tick-finance-websocket-api
