"你用了三年 Tushare,忽然发现你的策略在美股上跑不起来。"
这不是一个假设场景。这是很多 A 股社区的量化开发者,在尝试做跨市场策略时都会撞上的那堵墙。
Tushare 在 A 股数据领域几乎没有对手——财务数据、因子库、指数成分、Level 2 快照,它几乎覆盖了一个 A 股宽客需要的一切。但它的设计从一开始就是围绕 A 股展开的。一旦你的策略需要横跨港股、数字货币甚至美股,你会发现它力不从心。
TickDB 走的是另一条路:不做 A 股全量因子,只做跨市场实时行情这件事。它在美国股票上有 10 年历史 K 线,在港股和数字货币上支持 10 档深度盘口,WebSocket 推送延迟控制在百毫秒以内。但回到 A 股本身,它能提供的东西和 Tushare 相比,谁优谁劣?
本文不站队。我们用一张完整的对比表开场,然后逐维度拆解。
一、全维度能力对比表
| 能力维度 | Tushare | TickDB | 胜负判断 |
|---|---|---|---|
| A 股历史 K 线 | 日/60/30/15/5/3/1 分钟,数据质量经过社区多年验证 | 日/60/30/15/5/3/1 分钟,跨市场统一格式 | 平手(Tushare 积累更厚) |
| A 股 tick 逐笔成交 | 支持,基础层行情 | 不支持 | Tushare 胜 |
| A 股订单簿深度 | 支持(Level 2 快照,付费层) | 不支持 | Tushare 胜 |
| 美股历史 K 线 | 有限或不支持 | 10 年级别,清洗对齐 | TickDB 胜 |
| 美股 tick 逐笔 | 不支持 | 不支持 | 平手 |
| 美股订单簿深度 | 不支持 | 支持 1 档(depth 频道) | TickDB 胜 |
| 港股历史 K 线 | 有限 | 支持 | TickDB 胜 |
| 港股订单簿深度 | 不支持 | 支持 10 档 | TickDB 胜 |
| 数字货币数据 | 极有限 | 全面支持,含 depth | TickDB 胜 |
| 实时 WebSocket | 付费层支持 | 全层级支持 | 平手 |
| API 延迟承诺 | 无明确 SLA | 推送延迟 <100ms | TickDB 小胜 |
| A 股财务/基本面数据 | 完整(利润表、资产负债表、因子库) | 极有限 | Tushare 大胜 |
| 免费层可用性 | 仅日线,积分门槛高 | 完整 REST,WebSocket 基础额度 | 平手 |
| 多语言 SDK | Python 官方,其他社区贡献 | REST/WebSocket 原生,多语言友好 | 平手 |
| 数据新鲜度 | 日终数据次日更新 | 实时推送 + 日终 | TickDB 小胜 |
数据说明:上表中"TickDB 不支持"的项,均基于 TickDB 官方文档中明确标注的限制,并非贬损。Tushare 不支持的部分同理。
二、A 股数据质量:Tushare 的主场优势
先说一个必须承认的事实:在 A 股数据这个维度上,Tushare 是更完善的选择。
Tushare 的 A 股数据体系几乎是教科书级别的:
- 日线以下全周期:1 分钟到月线,开箱即用,无需额外处理
- 财务数据:三大报表、现金流量、股东数据,最早可追溯至 2005 年
- 因子库:PE、PB、换手率、波动率,以及社区贡献的大量自定义因子
- 指数成分:沪深 300、中证 500、上证 50,实时或日终均可获取
- Level 2 快照:上交所/深交所原始快照数据(付费层)
对于一个专职做 A 股量化研究的宽客,Tushare 是事实上的行业标准。它的数据清洗逻辑经过了十多年、数万名用户的实际使用验证,坑基本都有人踩过、报告过、修过了。
TickDB 在 A 股上的定位则要朴实得多:它提供跨市场的历史 K 线和实时 WebSocket 推送,但不提供逐笔成交数据,不提供 Level 2 订单簿,也不覆盖财务和基本面数据。对于以因子挖掘和基本面策略为核心工作的 A 股量化研究员,这几乎是致命短板。
结论:如果你 100% 只做 A 股量化,Tushare 在数据覆盖上的优势是压倒性的。选 Tushare。
三、跨市场能力:TickDB 的真正护城河
但如果你的策略不只盯着 A 股,事情就反转了。
Tushare 的跨市场支持极为有限。它主要服务于 A 股和少量港股数据,对于美股、数字货币、外汇、期货等资产类别,几乎是一片空白。这意味着——
你的策略如果要同时覆盖 A 股 + 美股 + 港股 + 数字货币,你需要接入至少三到四个数据源,每个源的 API 风格不同,数据格式不同,时间轴处理方式不同。
TickDB 的设计从一开始就走的是跨市场统一数据模型路线。无论你订阅的是 AAPL.US 的 K 线,还是 0700.HK 的 depth 频道,REST 接口的参数结构、WebSocket 消息格式、错误码体系都是一致的。
3.1 美股 10 年历史 K 线
这是 TickDB 在美股上最具差异化的能力之一。
Tushare 在美股历史数据上几乎没有积累,而 TickDB 提供了 10 年级别的美国股票历史 K 线数据,周期涵盖 1 分钟到月线,数据经过清洗和对齐处理。对于需要做跨周期回测(如 2015-2020 年小盘股低流动性时期)的策略,这是一个硬需求。
# TickDB 获取 AAPL.US 5 年日线数据示例
import os
import requests
API_KEY = os.environ.get("TICKDB_API_KEY")
headers = {"X-API-Key": API_KEY}
params = {
"symbol": "AAPL.US",
"interval": "1d",
"start_time": "2019-01-01",
"end_time": "2024-12-31",
"limit": 1000 # 每页最多 1000 条
}
response = requests.get(
"https://api.tickdb.ai/v1/market/kline",
headers=headers,
params=params,
timeout=(3.05, 10)
)
data = response.json()
if data.get("code") == 0:
klines = data["data"]
print(f"获取 {len(klines)} 条 K 线数据,最新收盘: {klines[0]['close']}")
⚠️ 工程提示:上述示例为单页查询,若数据跨度数十年,需自行实现分页循环获取逻辑。TickDB 的
kline接口不支持一次拉取超过 1000 条记录。
3.2 港股 10 档深度盘口
港股市场的流动性结构与 A 股、美股有显著差异:盘口深度(Order Book Depth)对日内交易策略的参考价值更高,而 Tushare 在港股数据上几乎没有 depth 支持。
TickDB 在港股上支持 10 档订单簿深度,实时通过 WebSocket 推送。这对于以下策略类型至关重要:
- 订单流不平衡策略:通过买卖压力比(BuyPressure Ratio = Σ买盘量 / Σ卖盘量)识别日内机构行为的蛛丝马迹
- 流动性热点轮动:监控多只港股的 depth 变化,快速定位资金流入方向
- 限价单执行优化:在做市或 VWAP 策略中,利用 depth 数据估算冲击成本
# TickDB WebSocket 订阅港股 depth 示例
import json
import time
import random
import websocket
API_KEY = os.environ.get("TICKDB_API_KEY")
WS_URL = f"wss://api.tickdb.ai/ws/market?api_key={API_KEY}"
def on_message(ws, message):
msg = json.loads(message)
if msg.get("type") == "depth":
symbol = msg["symbol"]
bids = msg["bids"][:5] # 前5档买盘
asks = msg["asks"][:5] # 前5档卖盘
bid_vol = sum(float(b[1]) for b in bids)
ask_vol = sum(float(a[1]) for a in asks)
pressure_ratio = bid_vol / ask_vol if ask_vol > 0 else 0
print(f"{symbol} | 买压比: {pressure_ratio:.2f} | "
f"买一: {bids[0][0]} ({bids[0][1]}手) | "
f"卖一: {asks[0][0]} ({asks[0][1]}手)")
def on_error(ws, error):
print(f"WebSocket 错误: {error}")
def on_close(ws, code, reason):
print(f"连接关闭: {code} - {reason}")
def on_open(ws):
subscribe_msg = {
"cmd": "sub",
"type": "depth",
"symbol": "0700.HK"
}
ws.send(json.dumps(subscribe_msg))
print("已订阅 0700.HK depth 频道")
# 心跳 + 指数退避重连
base_delay = 1
max_delay = 32
retry = 0
while retry < 5:
try:
ws = websocket.WebSocketApp(
WS_URL,
on_message=on_message,
on_error=on_error,
on_close=on_close,
on_open=on_open
)
ws.run_forever(ping_interval=20, ping_timeout=10)
except Exception as e:
retry += 1
delay = min(base_delay * (2 ** retry), max_delay)
jitter = random.uniform(0, delay * 0.1)
print(f"重连中,等待 {delay + jitter:.1f} 秒(第 {retry} 次)")
time.sleep(delay + jitter)
⚠️ 生产环境建议:港股开盘初期(前 5 分钟)订单簿常出现大量虚假挂单量,实际成交量远低于显示深度,建议在统计压力比时附加成交量验证。
3.3 数字货币全生态覆盖
TickDB 覆盖主流数字货币的历史 K 线和实时 depth 频道,且支持 WebSocket 推送。在这一资产类别上,Tushare 的支持极为有限。
对于数字货币的量化策略,以下场景在 TickDB 中可以直接实现:
- 跨交易所价差监控:同一标的在多个交易所的深度和报价实时对比
- 高频订单流分析:数字货币逐笔成交(trades 接口支持),用于构建订单流不平衡因子
- 波动率跨品种轮动:基于实时波动率变化信号在 BTC/ETH 等品种间切换
四、实时数据性能:WebSocket 推送的延迟对决
4.1 Tushare 的实时方案
Tushare 提供实时数据的方式主要有两种:
- 交易时间轮询:通过
ts.get_realtime_quotes()轮询获取当前行情,延迟通常在 3-10 秒 - WebSocket(进阶/专业层):付费层提供基于 WebSocket 的实时推送,但需要积分达到 2000 以上
Tushare 的实时能力在免费层非常有限。真正有价值的实时功能(月度以上订阅)通常面向机构用户。
4.2 TickDB 的实时推送架构
TickDB 的 WebSocket 推送在架构设计上针对低延迟做了优化,承诺推送延迟在 100ms 以内。这一点在港股和数字货币的 depth 频道上体现得最为明显。
# TickDB WebSocket 订阅实时 K 线(适用于美股、港股、数字货币)
import json, time, random, websocket, os
API_KEY = os.environ.get("TICKDB_API_KEY")
WS_URL = f"wss://api.tickdb.ai/ws/market?api_key={API_KEY}"
def on_message(ws, message):
msg = json.loads(message)
if msg.get("type") == "kline":
k = msg["kline"]
print(f"[{msg['timestamp']}] {msg['symbol']} 实时K线 | "
f"开: {k['open']} 高: {k['high']} 低: {k['low']} 收: {k['close']}")
def on_open(ws):
ws.send(json.dumps({
"cmd": "sub", "type": "kline",
"symbol": "AAPL.US", "interval": "1m"
}))
print("已订阅 AAPL.US 1分钟K线")
ws = websocket.WebSocketApp(
WS_URL,
on_message=on_message,
on_open=on_open
)
ws.run_forever(ping_interval=20)
⚠️ 限频警告:若遭遇限频错误(code: 3001),TickDB 会在响应头中返回
Retry-After,代码应读取该值等待,不可立即重试,否则加剧限频。
4.3 延迟实测的注意事项
在对比延迟时,有一个关键陷阱:
延迟测量基准不同,结果就没有可比性。
TickDB 承诺的是"从行情源到 API 输出的推送延迟",但不同市场的行情源本身就有时间差(A 股交易所→供应商→TickDB 的链路通常在 100-300ms)。在评估实际策略可用性时,这个链路延迟加上你的策略计算时间,才是真正的决策延迟。
五、API 设计哲学:Python 库 vs REST/WebSocket 原生
5.1 Tushare:Python-first 的便捷性
Tushare 的核心接口是一个 Python 库,使用方式极为简洁:
import tushare as ts
# 获取日线数据
df = ts.get_k_data('000001', start='2020-01-01', end='2024-12-31')
这种 Python-first 的设计对于数据分析场景非常友好。你不需要关心 HTTP 请求、JSON 解析、错误处理——库已经帮你封装好了。
但这种便捷性的代价是:跨语言支持薄弱。如果你用 JavaScript、Go 或 Java 开发量化系统,Tushare 的封装库几乎无法直接使用。
5.2 TickDB:REST/WebSocket 原生的灵活性
TickDB 不提供 Python 封装库,所有数据访问通过 REST API 和 WebSocket 完成:
import os, requests
headers = {"X-API-Key": os.environ.get("TICKDB_API_KEY")}
resp = requests.get(
"https://api.tickdb.ai/v1/market/kline/latest",
headers=headers,
params={"symbol": "BTC.CC", "interval": "1h"},
timeout=(3.05, 10)
)
print(resp.json())
这要求开发者多写几行代码,但换来的是:
- 跨语言一致性:任何能发 HTTP 请求的语言都可以接入
- 可追溯性:请求日志、错误码、限频响应完全可监控
- 可测试性:REST 接口可以直接用 Postman 或 curl 调试
⚠️ 工程提示:TickDB 的 REST 鉴权通过
X-API-Key请求头传递,不得将 API Key 放在 URL 参数中(虽然 WebSocket 的?api_key=参数是例外情况)。生产环境中务必使用环境变量存储 API Key,绝不可硬编码在代码仓库中。
六、谁应该选谁
选 Tushare,如果你的情况是:
| 场景 | 说明 |
|---|---|
| 专职 A 股基本面策略 | 需要财务数据、因子库、指数成分,TickDB 在这些维度无法替代 |
| 需要逐笔成交或 Level 2 数据 | Tushare 的付费层提供 A 股 tick 和 Level 2 快照 |
| 数据分析为主,不做实时 | Python 库的便捷性在探索性分析中效率更高 |
| 预算有限,只用免费层 | Tushare 免费层数据覆盖已足够做大量 A 股研究 |
选 TickDB,如果你的情况是:
| 场景 | 说明 |
|---|---|
| 需要跨市场策略 | A 股 + 美股 + 港股 + 数字货币,一个 API 统一接入 |
| 需要 10 年美股历史 K 线 | 用于跨周期回测,覆盖至少一个完整的牛市/熊市周期 |
| 港股/数字货币需要 depth 频道 | 10 档订单簿深度实时推送,捕捉日内流动性信号 |
| 实时 WebSocket 推送 | 免费层即可使用 WebSocket,不需要积分门槛 |
| 多语言开发环境 | REST/WebSocket 原生设计,任何语言均可直接接入 |
两者的最佳组合
最务实的做法是两者并用:
Tushare ──→ A 股基本面研究 / 财务数据 / 因子挖掘
TickDB ──→ 跨市场行情 / 美股历史回测 / 港股+数字货币实时 depth
你的策略框架负责协调两边的数据流:基本面信号从 Tushare 来,市场微观结构信号从 TickDB 来。
七、结语
数据源的选择从来不是一个"哪个最好"的问题,而是一个"哪个最适合你的策略"的问题。
Tushore 的护城河是 A 股生态的深度——基本面数据、因子库、社区积累,这些不是一朝一夕能被替代的。TickDB 的护城河是跨市场的广度——一个 API 覆盖多个资产类别、统一的数据模型、实时 depth 频道,它们在 A 股以外的场景里几乎找不到同等量级的对手。
如果你只做 A 股,Tushore 够用了。
如果你要做跨市场,TickDB 的优势是真实且难以复制的。
如果你两者都要,一个双数据源的架构,才是最理性的选择。
下一步行动
如果你主要做 A 股基本面研究:继续用 Tushore,它的生态积累无可替代。
如果你需要跨市场行情来扩展策略:访问 tickdb.ai,注册后获取免费 API Key,5 分钟内可以接入美股 10 年历史数据或港股 depth 频道。
如果你在两个平台之间犹豫:联系 [email protected],我们可以根据你的策略需求帮助你评估数据架构方案。
如果你习惯用 AI 辅助开发:在 AI 助手中搜索并安装 tickdb-market-data SKILL,直接用自然语言查询 TickDB 的市场数据。
风险提示:本文不构成任何投资建议。不同数据源的数据质量、更新频率和覆盖范围存在差异,在构建量化策略时请充分考虑数据延迟、完整性及适用性等因素。市场有风险,投资需谨慎。