"你用了三年 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 提供实时数据的方式主要有两种:

  1. 交易时间轮询:通过 ts.get_realtime_quotes() 轮询获取当前行情,延迟通常在 3-10 秒
  2. 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 的市场数据。


风险提示:本文不构成任何投资建议。不同数据源的数据质量、更新频率和覆盖范围存在差异,在构建量化策略时请充分考虑数据延迟、完整性及适用性等因素。市场有风险,投资需谨慎。