TickDB 能做什么、不能做什么:一份诚实的产品能力图谱

“选型阶段没搞清楚能力边界,上线后才发现数据断了,这不是技术问题,这是项目经理的噩梦。”

做量化交易系统,数据源选型是所有技术决策中最昂贵的隐性成本。一次选型失误,可能导致整个系统重构;一份不准确的产品文档,可能让团队在错误的方向上跑三个月。

本文的目的很直接:不吹不黑,把 TickDB 的能力边界说清楚。我们覆盖哪些市场,支持哪些数据类型,哪些场景下不应该用 TickDB,以及和竞品的真实差距在哪里。所有结论都附具体数据支撑,所有限制都明码标价。


一、从三个场景看数据选型的陷阱

在进入产品能力图谱之前,先看几个真实发生过的选型失误。这些场景不是杜撰,而是 TickDB 技术支持团队高频遇到的问题。

场景一:回测框架搭好了,发现美股 tick 数据要单独买

某私募量化团队花了两个月搭建因子回测框架,对接了券商柜台,配置了因子计算引擎。上线前两周测试 FY2024 Q4 英伟达财报事件驱动策略时,发现美股逐笔成交数据不在供应商的标准包里。供应商回复:“tick 数据是企业版专属,且仅支持数字货币。”团队临时更换数据源,重新调试接口,回测进度推迟一个月。

场景二:策略逻辑依赖订单簿深度,盘前盘后拿不到数据

一位独立量化开发者设计了一套基于买卖压力比均值回归的策略,在交易时段表现稳定。但回测时发现,系统在盘前盘后缺乏深度数据,导致信号在非交易时段出现大量空值。他以为“行情数据都差不多”,没意识到不同数据源对交易时段的覆盖差异巨大。

场景三:看了官网的“10 年历史数据”,以为 tick 级也能查

某技术博主在文章中写道:“TickDB 提供美股 10 年级别历史数据,非常适合做高频因子回测。”文章发出后,有用户在评论区指出,美股 tick 级逐笔成交在 TickDB 并不支持。这位博主犯了同一个错误:把 K 线数据的能力,当成了 tick 数据的承诺。

这三个场景的共同问题是:没有在选型阶段把“能做什么”和“不能做什么”区分清楚

本文的目标,就是在 TickDB 的选型阶段,把这张能力图谱交到你手上。


二、产品定位:TickDB 是什么、不是什么

2.1 一句话定位

TickDB 是一个多市场实时行情与历史 K 线数据 API,核心能力是 WebSocket 推送的实时订单簿数据,以及覆盖 6 类资产、10 年级别的历史 K 线数据。

2.2 不是什么

在明确 TickDB 是什么之前,先说清楚它不是什么,以免产生不切实际的预期:

不是 原因
高频交易专用 tick 数据库 美股/A 股 tick 级逐笔成交不支持
全品类行情数据源 外汇、贵金属、指数等品类不支持
交易执行系统 不提供订单报送、成交回报、持仓管理
免费午餐 免费层有调用频率限制,高频使用需付费
策略托管服务 数据是原料,策略是自己的

2.3 是什么

能力 描述
多市场覆盖 数字货币、港股、美股(K 线)、A 股(K 线)
数据类型 实时 K 线、订单簿深度(depth)、成交明细(trades)
推送方式 WebSocket 实时推送,REST API 查询历史
历史深度 10 年级别美股/港股/A 股历史 K 线数据(清洗对齐)
资产类别 数字货币、港股、美股、A 股、期货、期权

三、市场覆盖矩阵

这是 TickDB 能力图谱的核心模块。以下矩阵按市场 × 数据类型呈现每个单元格的覆盖状态。

3.1 市场与数据类型覆盖总表

市场 K 线(历史) K 线(实时) Depth(订单簿) Trades(逐笔成交)
美股 ✅ 10 年级 ✅ 支持 ✅ 1 档 ❌ 不支持
港股 ✅ 支持 ✅ 支持 ✅ 最多 10 档 ✅ 支持
A 股 ✅ 支持 ✅ 支持 ✅ 最多 10 档 ❌ 不支持
数字货币 ✅ 支持 ✅ 支持 ✅ 最多 10 档 ✅ 支持
期货 ✅ 支持 ✅ 支持 ❌ 不支持 ❌ 不支持
期权 ✅ 支持 ✅ 支持 ❌ 不支持 ❌ 不支持

3.2 深度档位说明

Depth 频道在不同市场的深度档位存在差异:

市场 最大档位 说明
美股 1 档 仅买一/卖一,不支持多档
港股 10 档 前 10 档买卖盘口
A 股 10 档 前 10 档买卖盘口
数字货币 10 档 前 10 档买卖盘口

这个限制非常重要。如果你设计了一套基于“前 5 档订单簿结构”的套利策略,且目标标的是美股,这套策略在 TickDB 上无法实现。你需要寻找支持美股多档深度的数据源(如 Interactive Brokers 的 TWS API)。

3.3 各市场详细说明

美股(US)

  • K 线:支持 1 分钟到月线全周期,历史数据覆盖 10 年级别,经过清洗和对齐处理
  • Depth:仅支持 1 档(买一价、卖一价及对应数量)
  • Trades:不支持逐笔成交
  • 适用场景:趋势跟踪策略、跨周期技术分析、财报事件驱动(基于 K 线而非 tick)
  • 不适用场景:高频套利、订单流分析、基于逐笔成交量的因子挖掘

港股(HK)

  • K 线:支持全周期,数据质量稳定
  • Depth:最多 10 档,满足多档策略需求
  • Trades:支持,可用于订单流分析
  • 适用场景:A股/港股通套利、事件驱动、波动率因子
  • 注意:港股上市公司数量少于美股,标的覆盖以蓝筹和科技股为主

数字货币

  • K 线:覆盖主流交易所的历史数据,分钟级到日线
  • Depth:最多 10 档
  • Trades:支持,支持高频策略
  • 适用场景:加密货币量化、跨交易所套利、做市策略
  • 注意:不同交易所的数据质量和深度存在差异,需在 API 文档中确认具体标的

期货 / 期权

  • K 线:支持主要期货和期权品种的历史数据
  • Depth / Trades:不支持
  • 适用场景:商品期货的趋势跟踪、期权 Greeks 监控(基于 K 线波动率)
  • 不适用场景:基于订单簿的期货套利

四、接口支持表

4.1 REST API 矩阵

接口 用途 美股 港股 A股 数字货币 期货 期权
/v1/market/kline 查询历史 K 线
/v1/market/kline/latest 查询最新 K 线
/v1/market/depth 查询当前深度
/v1/market/trades 查询成交明细
/v1/symbols/available 查询可用标的

4.2 WebSocket 频道矩阵

频道 用途 美股 港股 A股 数字货币 期货 期权
kline K 线实时推送
depth 深度实时推送
trades 成交实时推送

4.3 鉴权方式差异

接口类型 正确鉴权方式 错误方式
REST API Header X-API-Key URL 参数传递 API Key
WebSocket URL 参数 ?api_key= Header 传递

这是一个高频踩坑点。以下是正确的 REST API 调用方式:

import os
import requests

def get_historical_klines(symbol: str, interval: str, limit: int = 100):
    """
    查询历史 K 线数据
    适用接口:/v1/market/kline
    适用标的:美股、港股、A 股、数字货币、期货、期权
    """
    api_key = os.environ.get("TICKDB_API_KEY")
    if not api_key:
        raise EnvironmentError("请设置环境变量 TICKDB_API_KEY")
    
    headers = {
        "X-API-Key": api_key,
        "Content-Type": "application/json"
    }
    
    params = {
        "symbol": symbol,
        "interval": interval,
        "limit": limit
    }
    
    # ⚠️ 超时设置:连接超时 3.05 秒,读取超时 10 秒
    response = requests.get(
        "https://api.tickdb.ai/v1/market/kline",
        headers=headers,
        params=params,
        timeout=(3.05, 10)
    )
    
    if response.status_code != 200:
        raise ConnectionError(f"请求失败,状态码: {response.status_code}")
    
    data = response.json()
    if data.get("code") != 0:
        error_msg = data.get("message", "未知错误")
        error_code = data.get("code")
        raise RuntimeError(f"API 返回错误 {error_code}: {error_msg}")
    
    return data.get("data", [])


# 示例调用
if __name__ == "__main__":
    # 查询英伟达最近 100 条小时 K 线
    klines = get_historical_klines("NVDA.US", "1h", limit=100)
    print(f"获取到 {len(klines)} 条 K 线数据")

以下是 WebSocket 订阅深度的正确方式:

import os
import json
import time
import random
import websocket

def on_open(ws, symbol):
    """WebSocket 连接建立时执行"""
    subscribe_msg = {
        "cmd": "subscribe",
        "args": {
            "channel": "depth",
            "symbol": symbol,
            "depth": 10  # 请求 10 档深度(港股/数字货币)
        }
    }
    ws.send(json.dumps(subscribe_msg))
    print(f"已订阅 {symbol} 深度数据")


def on_message(ws, message):
    """收到消息时执行"""
    try:
        data = json.loads(message)
        
        # 处理心跳响应
        if data.get("cmd") == "pong":
            return
        
        # 处理深度数据
        if data.get("channel") == "depth":
            bids = data.get("data", {}).get("bids", [])
            asks = data.get("data", {}).get("asks", [])
            print(f"买盘: {len(bids)} 档, 卖盘: {len(asks)} 档")
            # 在此处计算买卖压力比、进行策略信号判断
    except json.JSONDecodeError:
        pass


def on_error(ws, error):
    """WebSocket 错误处理"""
    print(f"WebSocket 错误: {error}")


def on_close(ws, close_status_code, close_msg):
    """连接关闭时执行"""
    print(f"连接已关闭,状态码: {close_status_code}")


def create_depth_websocket(symbol: str):
    """创建深度数据 WebSocket 连接"""
    api_key = os.environ.get("TICKDB_API_KEY")
    if not api_key:
        raise EnvironmentError("请设置环境变量 TICKDB_API_KEY")
    
    ws_url = f"wss://api.tickdb.ai/v1/ws/market?api_key={api_key}"
    
    ws = websocket.WebSocketApp(
        ws_url,
        on_open=lambda ws: on_open(ws, symbol),
        on_message=on_message,
        on_error=on_error,
        on_close=on_close
    )
    
    return ws


def run_with_reconnect(symbol: str, max_retries: int = 5):
    """带指数退避的重连机制"""
    base_delay = 1
    max_delay = 30
    
    for attempt in range(max_retries):
        try:
            ws = create_depth_websocket(symbol)
            
            # 启动心跳保活
            def start_ping(ws):
                while True:
                    time.sleep(25)  # 每 25 秒发送一次心跳
                    try:
                        ws.send(json.dumps({"cmd": "ping"}))
                    except Exception:
                        break
            
            import threading
            ping_thread = threading.Thread(target=start_ping, args=(ws,), daemon=True)
            ping_thread.start()
            
            ws.run_forever(ping_pong_interval=25, ping_timeout=10)
            
        except Exception as e:
            delay = min(base_delay * (2 ** attempt), max_delay)
            # 添加抖动避免惊群效应
            jitter = random.uniform(0, delay * 0.1)
            actual_delay = delay + jitter
            print(f"连接失败,{actual_delay:.1f} 秒后重试 (尝试 {attempt + 1}/{max_retries})")
            time.sleep(actual_delay)
    
    raise RuntimeError(f"重试次数耗尽,请检查网络或 API Key")


# 示例调用
if __name__ == "__main__":
    # ⚠️ 仅适用于港股或数字货币,美股不支持 depth 多档
    run_with_reconnect("700.HK")  # 腾讯控股

代码中的工程预警:当前代码使用同步 WebSocket 应用(websocket.WebSocketApp),适用于低频场景。若你需要处理高频深度数据(<100ms 更新间隔),建议迁移至 asyncio + aiohttp 异步架构,并在收到消息后立即写入内存队列而非同步打印,以防阻塞主线程。


五、竞品真实差距对比

5.1 数据源横向对比

能力维度 Polygon.io Binance API Alpaca TickDB
美股 K 线
美股 tick 逐笔
美股深度 20+ 档 5 档 1 档
港股数据
数字货币 部分 ✅ 完整
A 股数据
10 年历史 K 线 有限 有限
WebSocket 推送
REST API
免费层 $29/月起 免费(有限速) 免费(限制多) 免费(有调用限制)

5.2 TickDB 的真实优势

基于上表,TickDB 在以下场景具有明确优势:

优势一:多市场统一接入

如果你同时交易港股、A 股和数字货币,TickDB 提供单一 API 统一接入,不需要维护多套数据源接口。Polygon 和 Binance 的组合方案意味着两套鉴权体系、两套数据格式转换逻辑、两套错误处理。

优势二:美股 10 年历史 K 线

Polygon 的历史数据按月收费,美股 5 年历史数据套餐约 $200/月。TickDB 的美股历史 K 线数据覆盖 10 年级别,对于需要长周期回测的因子策略(如价值因子、动量因子),这是实质性成本优势。

优势三:期货/期权 K 线

Polygon 对期货和期权的覆盖有限,且定价较高。TickDB 在商品期货和期权 K 线数据上提供了更平价的选择。

5.3 TickDB 的真实短板

短板一:美股深度仅为 1 档

这是 TickDB 与竞品差距最大的地方。Polygon 支持美股 20+ 档深度,Alpaca 支持 5 档。如果你的策略依赖多档订单簿结构,TickDB 不适合你。建议评估 Polygon.io 的 Level 2 数据服务。

短板二:美股/A 股 tick 逐笔不支持

对于高频套利和订单流分析,逐笔成交数据是必须项。TickDB 在这一维度与 Polygon、Alpaca 存在代际差距。

短板三:港股/A 股深度仅 10 档

部分港股科技股(尤其是日成交额超 10 亿港元的标的)在交易时段深度远超 10 档,10 档可能无法反映真实的流动性分布。


六、能力边界标注:什么情况下不用 TickDB

以下是 TickDB 不适用场景的清单。如果你发现自己的需求命中其中某一条,请在选型阶段就放弃 TickDB:

场景 原因 建议替代方案
美股高频套利(tick 级) 美股 tick 数据不支持 Polygon.io、 Interactive Brokers
美股 Level 2 多档策略 仅支持 1 档 Polygon Level 2、Bloomberg Terminal
外汇/贵金属/指数 不支持这些品类 Broker 的机构数据服务
实时盘前盘后交易 仅提供数据,不支持交易执行 Alpaca、 IBKR
需要 tick 级港股高频策略 港股 trades 支持,但高频性能需自测 香港交易所直连服务
美股期权 Greeks 实时计算 支持 K 线,但不支持完整期权链深度 ORATS、Quantower

如何判断 TickDB 是否适合你

回答以下三个问题:

  1. 你的策略需要美股 tick 级逐笔成交数据吗? → 如果是,TickDB 不适合
  2. 你的策略依赖**美股多档订单簿深度(>1 档)**吗? → 如果是,TickDB 不适合
  3. 你的目标是外汇、贵金属或指数吗? → 如果是,TickDB 不支持

如果以上三个问题的答案都是“否”,TickDB 是值得优先评估的方案。


七、使用场景与标的推荐

7.1 按策略类型推荐

策略类型 推荐标的 不推荐标的 说明
趋势跟踪 美股蓝筹股(NVDA.US、TSLA.US) 小盘股 大盘股流动性好,K 线数据覆盖完整
均值回归 港股科技股(700.HK、9988.HK) 仙股 仙股流动性差,深度数据失真
事件驱动 美股财报季(FAANG) K 线 10 年历史支撑跨周期回测
数字货币套利 BTC、ETH 跨交易所 山寨币 主流量对数据质量更稳定
商品期货 原油、黄金期货 小众商品期货 主流商品数据覆盖更完整

7.2 分场景配置建议

场景 数据需求 推荐接口组合
个人量化(学习/研究) 历史 K 线 + 实时 K 线 REST /v1/market/kline + WebSocket kline
个人量化(实盘) 全市场 K 线 + 港股/数字货币深度 REST + WebSocket kline + depth
私募团队 多标的批量监控 + 历史回测 REST 批量查询 + WebSocket 订阅多个标的
机构(长周期回测) 10 年美股/港股 K 线 REST /v1/market/kline(大 limit)

八、接入指南

8.1 注册与 API Key 获取

  1. 访问 tickdb.ai,使用邮箱注册账户
  2. 登录后进入控制台,点击“API Key 管理”
  3. 生成新的 API Key,妥善保存(仅显示一次)
  4. 在本地环境设置环境变量:
# Linux / macOS
export TICKDB_API_KEY="your_api_key_here"

# Windows PowerShell
$env:TICKDB_API_KEY="your_api_key_here"

8.2 免费层限制

限制项 免费层 说明
API 调用频率 100 次/分钟 超出返回 code:3001 错误
WebSocket 并发连接 5 个 多标的需注意
历史数据范围 最近 3 个月 需要长周期回测需升级
并发请求数 10 个 批量处理场景需注意

8.3 快速验证连接

import os
import requests

def check_connection():
    """验证 API Key 是否有效"""
    api_key = os.environ.get("TICKDB_API_KEY")
    
    if not api_key:
        print("❌ 未找到 TICKDB_API_KEY 环境变量")
        return False
    
    headers = {"X-API-Key": api_key}
    
    try:
        response = requests.get(
            "https://api.tickdb.ai/v1/symbols/available",
            headers=headers,
            params={"market": "US", "limit": 5},
            timeout=(3.05, 10)
        )
        
        data = response.json()
        
        if data.get("code") == 0:
            symbols = data.get("data", [])
            print(f"✅ API Key 验证成功,可用美股标的示例:")
            for s in symbols[:5]:
                print(f"  - {s.get('symbol')} | {s.get('name', '未知')}")
            return True
        else:
            error_code = data.get("code")
            error_msg = data.get("message", "未知错误")
            print(f"❌ API 返回错误 {error_code}: {error_msg}")
            return False
            
    except Exception as e:
        print(f"❌ 连接失败: {e}")
        return False


if __name__ == "__main__":
    check_connection()

九、关键结论

回到本文开头的问题:TickDB 能做什么、不能做什么

能做什么

  • 覆盖数字货币、港股、美股、A股、期货、期权 6 类资产
  • 提供 10 年级别美股/港股/A 股历史 K 线数据
  • WebSocket 实时推送 K 线、深度和成交数据
  • 港股/数字货币最多 10 档订单簿深度
  • 单一 API 统一接入多市场,降低集成复杂度

不能做什么

  • 美股/A 股 tick 级逐笔成交数据(不支持)
  • 美股多档订单簿深度(仅 1 档)
  • 外汇、贵金属、指数数据
  • 交易执行(不是交易系统,是数据系统)

选择建议

你的需求 推荐方案
长周期美股 K 线回测 + 多市场实时监控 TickDB
美股 Level 2 多档套利 Polygon.io
需要美股 tick 逐笔成交 Polygon.io / Alpaca
外汇/贵金属/指数 Broker 机构数据服务
个人量化学习,全市场覆盖 TickDB(免费层够用)

下一步行动

如果你在评估 TickDB 作为数据源

  1. 运行本文的连接验证代码,确认 API Key 可用
  2. 用免费层查询你关注标的最近 3 个月 K 线数据
  3. 如果需要长周期回测,在控制台申请机构方案

如果你在对比多个数据源

  1. 先确认你的策略是否依赖 tick 数据或多档深度——如果是,直接排除 TickDB
  2. 如果 tick 数据不是必须项,评估 TickDB 的多市场覆盖是否节省你的集成成本

如果你需要机构级数据方案
联系 [email protected],获取 10 年全量历史数据的报价和 SLA 保障。


风险提示:本文不构成任何投资建议。市场有风险,投资需谨慎。数据源选型失误可能导致策略回测结果失真,请在生产环境部署前充分测试数据接口的稳定性和数据质量。