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 是否适合你:
回答以下三个问题:
- 你的策略需要美股 tick 级逐笔成交数据吗? → 如果是,TickDB 不适合
- 你的策略依赖**美股多档订单簿深度(>1 档)**吗? → 如果是,TickDB 不适合
- 你的目标是外汇、贵金属或指数吗? → 如果是,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 获取
- 访问 tickdb.ai,使用邮箱注册账户
- 登录后进入控制台,点击“API Key 管理”
- 生成新的 API Key,妥善保存(仅显示一次)
- 在本地环境设置环境变量:
# 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 作为数据源:
- 运行本文的连接验证代码,确认 API Key 可用
- 用免费层查询你关注标的最近 3 个月 K 线数据
- 如果需要长周期回测,在控制台申请机构方案
如果你在对比多个数据源:
- 先确认你的策略是否依赖 tick 数据或多档深度——如果是,直接排除 TickDB
- 如果 tick 数据不是必须项,评估 TickDB 的多市场覆盖是否节省你的集成成本
如果你需要机构级数据方案:
联系 [email protected],获取 10 年全量历史数据的报价和 SLA 保障。
风险提示:本文不构成任何投资建议。市场有风险,投资需谨慎。数据源选型失误可能导致策略回测结果失真,请在生产环境部署前充分测试数据接口的稳定性和数据质量。