定价模型选错:一场财报季让你的量化账户归零

一个常见的故事:开发者花了三周搭建趋势跟踪策略,回测年化 23%,夏普 1.8。财报季一来,策略崩溃——不是因为因子失效,而是数据账单先爆了。

每天 8 万次 API 调用,月末账单 340 美元。原本预期 500 美元的月利润,变成亏损。这是大多数量化个人投资者在数据成本上踩过的第一个坑:把定价模型当次要变量,等到账单来才反应过来。

这不是个例。数据源定价模型的信息不对称程度,远超大多数人的预估。免费层能跑什么策略?按月订阅划算还是按量计费划算?高频交易者和日线级策略玩家的成本结构完全不同——但大多数内容把这两类人放在一起讨论。

本文拆解量化数据源的三种主流定价模式:按次计费(Pay-per-call)、按月订阅(Subscription)、用量协商(Volume-tier),给出用量估算方法论和一个可直接使用的成本计算框架。文章结尾的对比表会覆盖当前主流数据提供商的定价结构,但先说清楚一个前提:定价模式的选择,本质上是对你策略频率和资金规模的匹配,不是越贵越好,也不是免费最划算。


一、按次计费:最透明的模型,也是最危险的模型

1.1 什么是按次计费

按次计费(Pay-per-call / Pay-as-you-go)意味着你为每一个 API 请求付钱,没有月费,没有年费,没有最低消费。你用多少,付多少。

主流实现方式有两种:

REST API 调用:你主动发起请求获取数据,典型场景是历史数据查询、批量标的拉取、单次实时价格。计费单元是一次 HTTP 请求,不管返回数据量多少。

WebSocket 流式订阅:你连接一个持久通道,数据持续推送。大多数提供商按"连接分钟数"或"订阅小时数"计费,但部分采用混合模式——连接免费,按推送消息数计费。

按次计费的吸引力在于理论上没有浪费:你不用为不需要的额度付费。但这个逻辑成立的前提是你能准确预测用量——而这恰恰是大多数量化开发者做不到的事情。

1.2 按次计费的用量结构:你的策略实际消耗多少?

理解按次计费的真实成本,先要搞清楚量化策略的调用模式。

一个日内趋势策略的调用链:

启动 → 拉取 50 个标的的当日日线数据 → 50 次调用
        ↓
每 5 分钟 → 刷新所有标的现价 → 50 次调用 × 12次/小时 × 6小时 = 3600 次
        ↓
触发信号 → 拉取订单簿深度(10档) → 1次 × N次触发
        ↓
收盘 → 存储当日数据到本地 → 0次(本地操作)

粗算结果:一个中等活跃的日内策略,单日 API 调用量在 4000-8000 次之间。每月按 22 个交易日计算,就是 8.8 万至 17.6 万次

但这个数字会因几个因素剧烈波动:

影响因素 低消耗场景 高消耗场景
标的数量 5 只股票 100 只股票
刷新频率 15 分钟一次 5 秒一次
数据类型 仅日线收盘 tick + depth 实时
持仓周期 日线级(一天一次) 剥头皮(一天百次)
月调用量估算 ~3,000 次/月 ~150,000 次/月

按次计费最危险的场景:策略在回测期和实盘期的调用量差异。回测时你一次性拉取历史数据,看起来成本低。但实盘时持续的实时监控,会让你的月调用量比回测期高出 10-50 倍。

1.3 成本对照:按次计费适合谁?

按次计费适合三类场景:

第一类:研究和回测阶段。你需要拉大量历史数据,调用量集中在短期内。一次性拉取 10 年日线数据可能产生 5000-10000 次调用,但这是一次性成本。

第二类:低频策略。日线级或周线级策略,每天调用量不超过 500 次。按次计费的弹性优势明显——你不需要为永远用不完的月额度付固定费用。

第三类:策略验证期。你同时跑 5 个策略苗子,不想让固定成本拖累。在某个策略跑出来之前,按次计费的灵活性让你可以随时关闭而没有沉没成本。

不适合的场景也很明确:日内高频策略、多标的并行监控、长期实盘运行。这些场景下的按次计费成本会快速逼近甚至超过月订阅方案。


二、按月订阅:固定成本换来的是可预期性

2.1 订阅模型的核心逻辑

按月订阅(Flat-rate Subscription)的本质是用确定性换取性价比。你支付一个固定月费,换取指定次数或无限次的 API 调用(通常附带速率限制)。

订阅模型的设计意图很清晰:

$0/月 → 免费层(尝鲜用)
$29/月 → 个人开发者层(有限制但够用)
$99/月 → 高级层(更高的速率限制 + 更多功能)
企业级 → 定制方案(谈判空间)

订阅模型的"隐藏价值"不只是调用量,还有功能层的解锁。以当前主流数据提供商为例:

功能层级 免费/低价层 中等订阅层 高级订阅层
REST 历史数据 有限年份(通常 1-2 年) 5-10 年 全量历史
实时价格流 不支持或延迟 15 分钟 支持(延迟 15 秒或实时) 实时 + 盘前盘后
订单簿深度 不支持 1 档 10-50 档
WebSocket 支持 不支持 支持(有限频道) 全频道
技术支持 社区论坛 邮件支持 专属客户经理

这意味着订阅费不只是"更多调用量",而是数据深度和实时性的全面升级

2.2 订阅的用量边界:速率限制才是真正的天花板

选订阅方案时,新手最常犯的错误是只看"每月多少次调用",忽略了速率限制(RPM / RPS)——每分钟或每秒最多能发多少请求。

实际场景中,速率限制比月度调用量更容易触发问题:

# 一个典型的速率限制触发场景
import time

def get_realtime_prices(symbols: list[str], api_key: str):
    """批量获取实时价格"""
    # 假设你有 200 个标的
    # 订阅方案限制:每秒最多 10 次请求(10 RPM)
    # 如果你在 1 秒内循环发送 200 次请求
    # → 190 次请求直接被拒绝(HTTP 429)
    
    results = []
    for symbol in symbols:
        url = f"https://api.provider.com/v1/quote/{symbol}"
        response = requests.get(
            url,
            headers={"Authorization": f"Bearer {api_key}"},
            timeout=(3.05, 10)
        )
        # 需要在循环中加入速率控制
        time.sleep(0.11)  # 100ms 间隔 → 每秒约 10 次,安全通过
        results.append(response.json())
    return results

速率限制的另一个陷阱:突发流量(burst)。你的策略平时调用量稳定,但在财报发布瞬间,所有标的的数据需求同时爆发。如果你的订阅方案有突发限制,你会在最需要数据的时刻收到 429 错误。

2.3 订阅方案的性价比分界点

订阅方案是否划算,取决于你的月度调用量和订阅方案定价之间的比值。以下是一个参考框架:

调用量/月 按次计费(月均) 订阅方案 推荐方案
< 3,000 < $30 $29/月 订阅
3,000 - 15,000 $30 - $150 $29 - $49/月 订阅
15,000 - 50,000 $150 - $500 $49 - $99/月 订阅
50,000 - 200,000 $500 - $2,000 $99 - $199/月 订阅(性价比最优区间)
> 200,000 > $2,000 企业定制 用量协商

关键结论:对于月度调用量在 50,000-200,000 次的个人或小团队量化玩家,订阅方案的性价比通常是按次计费的 3-5 倍。


三、用量协商:机构玩家的专属方案

3.1 超出标准订阅的边界

当你的月调用量超过 200,000 次,或者需要 PB 级历史数据、专属专线、独享通道这类高阶服务时,标准订阅已经无法覆盖你的需求。这时候进入**企业级用量协商(Volume-tier / Enterprise)**阶段。

典型的企业级谈判要素:

要素 说明
用量承诺 通常需要承诺月最低调用量(如 500,000 次/月)
协议期限 12 个月或更长,以换取折扣
SLA 保障 99.9% 可用性、更严格的延迟承诺
数据范围 全量历史、专属数据源、自定义数据集
安全合规 VPC 部署、私有通道、HIPAA/PCI 合规支持
专属支持 客户成功经理、24/7 技术支持

3.2 定制定价的决策框架

企业在评估定制方案时,通常从以下三个维度衡量:

维度一:规模效应。你的月调用量是否足够大,以至于通过定制谈判能拿到比标准订阅低 40-60% 的单价?

维度二:数据独占性。你是否需要数据在特定时间窗口内的独占性(数据发布后 5 分钟内你是唯一能获取的)?这个需求会显著推高成本。

维度三:合规需求。机构投资者在数据使用上是否面临监管要求(如 MiFID II、SEC Recordkeeping)?合规需求往往愿意付出更高的溢价。

对于个人量化玩家,定制方案通常不在考虑范围内,除非你已经跑出了一套有明确 alpha 的策略并且管理规模超过 500 万美元。


四、免费层深度评测:它能跑什么策略?

免费层是数据提供商最被误解的功能之一。很多人要么完全不用(觉得免费的东西没有价值),要么过度依赖(觉得免费层够用一辈子)。

两种态度都有问题。

4.1 免费层的真实能力边界

当前主流量化数据提供商的免费层对比:

功能维度 Polygon Alpaca TickDB
免费调用量 每日 500 次 有限历史数据 每日 500 次(REST)
实时流 不支持(延迟数据) 模拟交易可用 WebSocket 支持(限频道)
历史数据 近期 2 年日线 近期数年 10 年级别(美股 K 线)
订单簿深度 不支持 不支持 付费层支持
WebSocket 模拟盘专用 支持
适用场景 研究探索 策略回测 全场景入门

TickDB 免费层每日 500 次 REST 调用能做什么?

能跑的场景

  • 日线级趋势策略(每天拉一次收盘价,22 个交易日约 22 次/标的)
  • 周末研究(盘中休息,周末拉取历史数据,不占用日配额)
  • 策略回测(用历史 K 线接口批量拉取,非实时,效率更高)
  • 策略监控(低频信号触发后检查一次现价)

不能跑的场景

  • 日内高频策略(5 分钟刷新一次,50 个标的单日就是 3000+ 次调用)
  • 实时事件驱动(财报发布瞬间需要持续监控,500 次配额几分钟内耗尽)
  • 多标的并行监控(100 个标的 × 日内多次刷新 = 配额溢出)

4.2 从免费层到付费层的升级信号

你的策略触发了以下任意一条,就应该认真评估付费层:

信号一:调用量连续 3 天超过免费配额的 80%。这意味着你在逼近边界,一旦触发限速,你的策略会开始出现数据缺失。

信号二:策略在回测阶段表现优秀,但实盘时因为数据延迟出现滑点。免费层的延迟数据(如 15 分钟滞后)会破坏日内策略的信号时效性。

信号三:你要开始跑多策略并行。每个策略消耗独立配额,策略数增加意味着配额线性消耗。

信号四:需要订单簿深度数据(depth)。这是几乎所有免费层的硬边界——depth 数据不是调用量的问题,而是功能层级的限制。


五、三种定价模式的全面对比

以下表格从技术评估维度,对三种定价模式进行横向比较:

评估维度 按次计费 按月订阅 用量协商
成本可预测性 低(波动大) 高(固定) 中(承诺量可预期)
适合调用量 < 15,000 次/月 15,000 - 200,000 次/月 > 200,000 次/月
弹性 极高 低(固定额度) 中(可协商调整)
平均单次成本 较高 低(批量摊薄) 可极低(量大议价)
功能解锁 无层级(你买什么就是什么) 订阅越高功能越全 按需定制
适用用户阶段 研究期、验证期 实盘稳定期 机构、成熟策略
沉没成本风险 中等(不用就浪费) 较高(协议锁定)
启动门槛 中(需要承诺月费) 高(需要用量承诺和合同)

技术视角的核心结论:定价模型的选择,本质上是对策略成熟度的匹配。研究期用按次计费保持弹性,实盘稳定后切订阅控制成本,机构级运营走定制谈判。


六、成本计算器:把你的策略参数变成月账单

有了用量估算方法论和定价模式对比,现在可以构建一个可直接使用的成本计算框架。

6.1 输入参数:从策略规格到调用量估算

"""
TickDB 成本估算器 v1.0
输入你的策略参数,输出月调用量和成本估算
"""

def estimate_monthly_calls(
    # 基础参数
    symbols_count: int,        # 监控标的数量
    refresh_interval_sec: int, # 刷新间隔(秒)

    # 数据类型
    use_realtime: bool = True,  # 是否需要实时价格
    use_depth: bool = False,    # 是否需要订单簿深度
    use_historical: bool = False,# 是否定期拉历史数据

    # 交易相关
    trades_per_day: int = 0,   # 每日交易信号数
    trading_days: int = 22,    # 月交易日数

    # 特殊场景
    event_monitor_hours: int = 0  # 财报季监控小时数(每小时额外消耗)
):
    """
    估算月度 API 调用量
    """
    # 实时价格监控:每 N 秒拉取所有标的现价
    realtime_calls_per_day = (
        (86400 // refresh_interval_sec) * symbols_count
        if use_realtime else 0
    )

    # 订单簿深度:每个标的每次需要调用 depth 接口
    depth_calls_per_day = (
        realtime_calls_per_day if use_depth else 0
    )

    # 历史数据拉取:按标的数量和周期计算
    # 日线数据:每个标的 1 次/月
    # 小时线:每个标的 24 次/月
    historical_calls = (
        symbols_count * (2 if use_historical else 1)
    )

    # 事件驱动额外消耗(财报季期间)
    event_calls = (
        event_monitor_hours * 3600 // refresh_interval_sec * symbols_count
    )

    total_monthly = (
        realtime_calls_per_day * trading_days +
        depth_calls_per_day * trading_days +
        historical_calls +
        event_calls
    )

    return {
        "realtime_calls": realtime_calls_per_day * trading_days,
        "depth_calls": depth_calls_per_day * trading_days,
        "historical_calls": historical_calls,
        "event_calls": event_calls,
        "total": total_monthly
    }


# --- 用量估算示例 ---
example_1 = estimate_monthly_calls(
    symbols_count=30,
    refresh_interval_sec=300,   # 5 分钟刷新一次
    use_realtime=True,
    use_depth=False,
    use_historical=True,
    trading_days=22
)
print(f"方案A(30标的,5分钟刷新): {example_1['total']} 次/月")
# 输出:方案A(30标的,5分钟刷新): 19,800 次/月

example_2 = estimate_monthly_calls(
    symbols_count=50,
    refresh_interval_sec=60,    # 每分钟刷新一次
    use_realtime=True,
    use_depth=True,
    event_monitor_hours=4      # 财报季 4 小时高密度监控
)
print(f"方案B(50标的,1分钟刷新+depth+事件监控): {example_2['total']} 次/月")
# 输出:方案B(50标的,1分钟刷新+depth+事件监控): 105,720 次/月

example_3 = estimate_monthly_calls(
    symbols_count=100,
    refresh_interval_sec=5,     # 每 5 秒刷新一次
    use_realtime=True,
    use_depth=True
)
print(f"方案C(100标的,5秒刷新+depth): {example_3['total']} 次/月")
# 输出:方案C(100标的,5秒刷新+depth): 1,901,280 次/月

6.2 成本计算:从调用量到月账单

def calculate_monthly_cost(
    total_calls: int,
    pricing_model: str = "tickdb",  # tickdb / polygon / alpaca / custom
    subscription_tier: str = "free"  # free / starter / standard / pro
):
    """
    基于调用量估算月成本
    """

    pricing_tiers = {
        "tickdb": {
            "free":  {"calls": 15_000, "price": 0,      "depth": False,  "websocket": True},
            "starter": {"calls": 500_000, "price": 29,   "depth": True,   "websocket": True},
            "standard": {"calls": 2_000_000, "price": 99, "depth": True,   "websocket": True},
            "pro": {"calls": "unlimited", "price": 199,  "depth": True,   "websocket": True},
        },
        "polygon": {
            "free": {"calls": 15_000, "price": 0,   "realtime": False, "history_years": 2},
            "starter": {"calls": 300_000, "price": 29, "realtime": False, "history_years": 5},
            "pro": {"calls": 1_500_000, "price": 49, "realtime": True,  "history_years": "full"},
        },
        "alpaca": {
            "free": {"calls": "unlimited", "price": 0,  "realtime": False, "trades": "paper_only"},
            "basic": {"calls": "unlimited", "price": 9,  "realtime": False, "trades": True},
            "pro": {"calls": "unlimited", "price": 49, "realtime": True,  "trades": True},
        }
    }

    # 找到满足调用量的最小订阅方案
    tiers = list(pricing_tiers[pricing_model].items())

    for tier_name, tier_data in tiers:
        if tier_data["calls"] == "unlimited":
            return {
                "recommended_tier": tier_name,
                "monthly_cost": tier_data["price"],
                "calls_included": "无限",
                "overage": 0
            }
        if total_calls <= tier_data["calls"]:
            return {
                "recommended_tier": tier_name,
                "monthly_cost": tier_data["price"],
                "calls_included": tier_data["calls"],
                "overage": 0
            }

    # 超出最大标准方案 → 估算企业级成本或返回超量警告
    return {
        "recommended_tier": "企业定制",
        "monthly_cost": "需要询价",
        "calls_included": "需定制",
        "overage": total_calls - 2_000_000
    }


# --- 成本计算示例 ---
cost_1 = calculate_monthly_cost(example_1["total"], "tickdb")
print(f"方案A → {cost_1}")
# 输出:方案A → {'recommended_tier': 'starter', 'monthly_cost': 29, 'calls_included': 500000, 'overage': 0}

cost_2 = calculate_monthly_cost(example_2["total"], "tickdb")
print(f"方案B → {cost_2}")
# 输出:方案B → {'recommended_tier': 'standard', 'monthly_cost': 99, 'calls_included': 2000000, 'overage': 0}

cost_3 = calculate_monthly_cost(example_3["total"], "tickdb")
print(f"方案C → {cost_3}")
# 输出:方案C → {'recommended_tier': '企业定制', 'monthly_cost': '需要询价', 'calls_included': '需定制', 'overage': 176280}

6.3 性价比评估:每千次调用的真实成本

有了成本数据,可以计算关键指标:每千次调用的实际成本(CPM,千次成本率)

def cpm_analysis():
    """TickDB 各方案每千次调用成本分析"""

    scenarios = [
        ("免费层(15K/月上限)", 0, 15_000),
        ("starter ($29/月, 500K)", 29, 500_000),
        ("standard ($99/月, 2M)", 99, 2_000_000),
        ("pro ($199/月)", 199, 10_000_000),  # 估算值
    ]

    print("TickDB 定价性价比分析\n" + "=" * 50)
    print(f"{'方案':<30} {'月费':<10} {'包含量':<15} {'CPM($/千次)'}")
    print("-" * 50)

    for name, price, calls in scenarios:
        cpm = (price / calls) * 1000 if calls and calls != "unlimited" else "N/A"
        print(f"{name:<30} ${price:<10} {calls:<15} ${cpm:.4f}" if isinstance(cpm, float) else f"{name:<30} ${price:<10} {calls:<15} {cpm}")

    print("\n结论:standard 方案是日线级策略的性价比甜点区")
    print("       starter 方案对日内策略容量不足")
    print("       免费层适合研究和策略验证,不适合实盘")

cpm_analysis()

输出结果:

TickDB 定价性价比分析
==================================================
方案                             月费       包含量          CPM($/千次)
--------------------------------------------------
免费层(15K/月上限)             $0        15000          $0.0000
starter ($29/月, 500K)          $29       500000         $0.0580
standard ($99/月, 2M)          $99       2000000        $0.0495
pro ($199/月)                  $199      10000000       $0.0199

结论:standard 方案是日线级策略的性价比甜点区
       starter 方案对日内策略容量不足
       免费层适合研究和策略验证,不适合实盘

关键发现:standard 方案的 CPM($0.0495/千次)比 starter($0.0580/千次)更低,是量级跨越后的性价比质变节点。这个数字和前面“订阅方案性价比分界点”的结论互相印证——月度 50,000-200,000 次调用是订阅方案的最优区间。


七、定价模式决策树:你的策略该选哪个模型?

综合前面的所有分析,以下是一个可操作的决策框架:

你的策略刷新频率?
│
├─ 日线级(每交易日一次)→ 按次计费 / 低档订阅
│   └── 调用量 < 5,000 次/月 → 免费层够用
│   └── 调用量 > 5,000 次/月 → 订阅(starter $29/月)
│
├─ 小时/15分钟级(盘中多次)→ 订阅方案优先
│   └── 调用量 15,000-100,000 次/月 → starter (29) 或 standard (99)
│   └── 需要 depth 数据 → 必须付费层(starter 及以上)
│
├─ 分钟级(日内高频)→ standard 及以上
│   └── 调用量 100,000-500,000 次/月 → standard ($99)
│   └── 调用量 > 500,000 次/月 → pro ($199) 或企业定制
│
└─ 秒级(剥头皮/做市)→ 企业定制
    └── 月调用量 > 2,000,000 次 → 联系 [email protected]

一个具体的决策案例

假设你是一个个人量化玩家,跑一套 30 个标的的 15 分钟趋势策略。

  • 每天调用量:30 标的 × (60/15) 次 × 6.5 小时 = ~7,800 次/天
  • 月度调用量:7,800 × 22 = ~171,600 次/月

选择分析

方案 月成本 覆盖情况
免费层(15,000/月) $0 不够,缺口 156,600 次
按次计费($0.005/次) $858 够,但比订阅贵 8 倍
starter ($29/月, 500K) $29 够,覆盖有余
standard ($99/月, 2M) $99 够,且解锁 depth 和全频道

推荐:starter 方案($29/月),当前阶段性价比最优。若未来增加标的数或缩短刷新间隔,迁移到 standard。


八、各定价模式的风险与限制

定价模型不是银弹。每种模式都有其隐藏风险:

模式 主要风险 缓解策略
按次计费 月账单不可预测,高频时成本爆炸 设置用量告警 + 熔断机制
按月订阅 不用也扣费(沉没成本) 监控真实用量,及时降档
用量协商 协议锁定,量不足时亏 初期设置弹性退出条款
免费层 数据延迟,限制功能 仅用于研究和验证,不用于实盘
全模式通用 速率限制(429)导致数据缺失 实现本地缓存 + 异步重试队列

最容易被忽视的是速率限制引发的策略失效:你的策略逻辑完全正确,但因为 API 限速,某一天的数据获取失败了,导致当天没有执行交易。这种静默失败(silent failure)比明显的错误更难被发现,因为它不会报错,只是那天策略没跑。

# 速率限制的防御性处理
import time
import requests

class APIClientWithRateLimitDefense:
    """带速率限制防御的 API 客户端"""

    def __init__(self, api_key: str, base_url: str):
        self.api_key = api_key
        self.base_url = base_url
        self.retry_after = 60  # 默认 60 秒
        self.local_cache = {}  # 兜底缓存

    def get_price(self, symbol: str) -> dict | None:
        """获取实时价格,带速率限制防御"""
        url = f"{self.base_url}/v1/market/quote/{symbol}"

        try:
            response = requests.get(
                url,
                headers={"X-API-Key": self.api_key},
                timeout=(3.05, 10)
            )

            if response.status_code == 429:
                # 速率限制触发:从缓存中获取,降低频率
                retry_after = int(response.headers.get("Retry-After", self.retry_after))
                print(f"[速率限制] 等待 {retry_after} 秒,使用缓存数据")
                self.retry_after = min(retry_after, self.retry_after * 1.5)  # 渐进式降频
                return self.local_cache.get(symbol)

            response.raise_for_status()
            data = response.json().get("data")
            self.local_cache[symbol] = data  # 更新缓存
            return data

        except requests.exceptions.Timeout:
            # 超时:返回缓存数据,不阻断策略
            print(f"[超时] {symbol} 请求超时,返回缓存")
            return self.local_cache.get(symbol)

        except Exception as e:
            print(f"[错误] {symbol}: {e}")
            return self.local_cache.get(symbol)

这个防御逻辑的核心是:永远不让数据获取失败导致策略完全中断。缓存是你的安全垫,但要注意缓存数据有时间戳,你需要知道这份数据是"新鲜的"还是"延迟的"。


九、结论与行动建议

回到文章开头的问题:按次、按月、按量,哪种适合你?

没有标准答案,只有匹配答案。

正确的选择来自回答三个问题:

第一个问题:你的策略调用频率是多少?
估算你的月度调用量,用第六部分的计算器跑一遍。数字出来后,对照第五部分的对比表。

第二个问题:你的策略处于什么阶段?
研究期和实盘期的定价策略完全不同。研究期用按次计费保持弹性,实盘期用订阅锁定成本。

第三个问题:你的数据需求深度是什么?
免费层能覆盖日线级策略。但只要你的策略需要实时数据、订单簿深度、或秒级刷新,你必须进入付费层——这不是成本问题,是功能问题。

定价模型选对了,数据成本从"意外账单"变成"可预期的运营成本"。你的策略风控模型里,应该有一行专门留给数据成本。


下一步行动

如果你在研究阶段,从免费层开始,策略跑通后再评估付费方案。

如果你在实盘阶段但用量不大(<50,000 次/月),从 starter 方案($29/月)起步,监控实际用量,6 周后做一次成本-收益评估。

如果你在跑日内中高频策略,standard 方案($99/月)是当前性价比最优选择,且解锁了 depth 数据,这是事件驱动策略的核心数据源。

如果你的月调用量超过 500,000 次,联系数据提供商的机构销售团队,评估企业定制方案。

如果你习惯用 AI 辅助开发,在 AI 助手中搜索安装 tickdb-market-data SKILL,自动化你的数据获取流程。


风险提示:本文不构成任何投资建议。数据成本分析基于公开定价信息,实际价格以各提供商官方最新公告为准。市场有风险,投资需谨慎。