API 返回成功,不代表你的 A 股、美股、港股数据就齐了

用户头像Jacktick
2026-06-13 发布

摘要:量化开发者通过一个实时行情 API 接入 A 股、美股、港股等多类资产时,MCP 工具调用的成功状态(code=0)不等于横截面数据完整。一次静默的资产缺失,就可能歪曲你的统计口径、权重分配和监控覆盖。本文基于 TickDB 的跨市场调用实测,给出一套“完整/降级/关闭”验收标准,将数据完整性判断独立于任务执行状态之外。


跨市场策略的研究者都有过类似经历:一个同时覆盖 A 股、港股、美股和数字货币的监控任务,跑了几天之后才发现某个品种根本没返回数据。检查日志,每次调用都显示成功——code=0,任务状态正常。

问题不在调用是否成功,而在于:批次成功是任务状态,横截面完整是数据状态。两者必须分别判断。 你把请求发出去,接口返回了,code=0 告诉你工具调用结束。但它不能替你回答:请求的 symbol 全部回来了吗?有没有意外缺失?回来的品种资产类型对吗?有没有你没请求的 symbol 混了进来?

本文不讨论策略怎么写,也不讨论哪个市场值得关注。本文只做一件事:给你一张跨市场数据完整性验收卡,让你在任务上线前,先把“数据到底全不全”这件事独立地管起来。


资产缺失会怎样静默污染下游

假设一个定时任务每天拉取五类资产快照,用于跨市场比价或监控面板。某次请求中,数字货币品种没有返回,但任务仍标记为成功。以下三类问题会安静地发生:

比率计算失真。 计算依赖 A 股和数字货币的价格比,数字货币缺失后,比率要么无法计算,要么被填入上一期缓存值。前者中断任务,后者制造一条看起来正常、实际已经失真的结果。

权重被动偏移。 面板按资产类别分配权重,少了一类资产后,其余类别相对权重提高。波动率、风险暴露的统计口径已经改变,系统不会报错,你也不会立刻察觉。

监控盲区出现。 告警规则是“任意资产波动超过阈值”,缺失的品种不会触发告警。不是市场没波动,是波动没进入系统。

这三类问题的共同特点:静默。 程序没崩溃,任务没报错,结果表正常生成,但计算输入已经不完整。


实测:code=0 对应三种不同的数据状态

以下测试于 2026 年 6 月 13 日通过 TickDB MCP get_ticker 完成。测试只核对返回状态 code、请求 symbol、返回 symbol 和返回资产类型 type。价格和成交量属于动态行情,不作为本文结论依据。

测试一:不传 type,请求五个代表品种。 五个品种(A 股、港股、美股、数字货币、外汇)全部返回,返回的资产类型与实际一致。

测试二:传入 type=stock,请求相同五个品种。 三个股票返回,数字货币和外汇没有返回。code=0 仍然为成功状态。如果程序事先不知道这两个品种会被排除,只看到 code=0 就继续运行——这批数据就是横截面不完整的。

测试三:请求包含一个无效代码。 返回结果中只有有效品种,无效代码静默消失,code=0 仍然为成功状态。如果它不是事先声明的预期排除项,这就是一次意外缺失。

三组结果可以归纳为一张判断表:

本轮调用状态 返回集合状态 数据判断
code=0 请求 symbol 全部返回 完整
code=0 与已验证的预期排除一致 降级
code=0 无效或异常 symbol 静默缺失 不完整

所以,code=0 之后仍然需要一次独立的数据完整性判断。


什么时候放行、什么时候降级、什么时候关闭

在 MCP 调用与下游计算之间,可以增加一道完整性闸门:

任务状态 数据状态 是否放行 处理动作
成功 返回集合完整,无重复,类型一致 放行 正常进入下游
成功 仅缺少已验证的预期排除项 降级放行 记录排除条件和缺失项
成功 存在意外缺失、新增、重复或类型错误 关闭 关闭批次并告警
失败 未获得有效结果 关闭 按错误状态处理

完整批次的标准是:返回集合 = 请求集合 - 预期排除集合,并且没有意外缺失、没有意外新增、请求和返回中没有重复 symbol、返回的资产类型与预期一致、预期排除项没有意外出现在返回中。


跨市场数据完整性验收卡

以下检查清单,建议每次跨市场任务进入下游前逐项确认:

序号 检查项 说明
1 请求前定义预期 记录本次请求的 symbol 和对应资产类型
2 保存请求原始集合 不要依赖后续推断,先存下来
3 验证预期排除项 排除的 symbol 是否针对当前工具已验证
4 提取返回 symbol 和 type 不只看价格,不只看数组是否为空
5 检查请求重复 同一个 symbol 是否在请求中出现了多次
6 检查返回重复 同一个 symbol 是否在返回中出现了多次
7 检查意外缺失 没被排除的 symbol 是否有未返回的
8 检查意外新增 返回中是否出现了没请求过的 symbol
9 检查资产类型错配 返回的 type 是否与请求时声明的一致
10 检查排除项意外返回 已声明排除的品种是否又出现在了返回里
11 关闭批次规则 意外异常必须关闭,不能只打印警告
12 降级批次记录 降级继续时记录排除条件和缺失项
13 下游消费边界 下游只消费通过完整性检查的批次
14 新工具接入验证 新端点、新资产类别接入时重新验证实际行为

把完整性校验写进数据管道

校验可以分三步走。

第一步:请求前定义预期。 记录请求的 symbol 和对应资产类型。如果使用了 type 参数,还要记录哪些 symbol 预计不会返回、这种行为是否已针对当前工具验证、本批次是否允许降级继续。

第二步:返回后提取实际集合。 从返回记录中提取 (symbol, type),不要只提取价格,也不要只检查数组是否为空。

第三步:执行多维比对。 至少检查请求和返回中的重复 symbol、意外缺失、意外新增、资产类型错配,以及预期排除项是否意外返回。任一异常未被解释,都不应进入下游计算。

以 TickDB 这类统一行情 API 为例,同一个接口可以覆盖股票、数字货币、外汇等多类资产的快照查询,返回结构一致,type 字段直接标记资产类型。这让完整性校验可以在统一字段体系下完成——你不需要为每个市场单独写一个校验脚本,只需要维护一份“请求了什么、预期返回什么”的对照表,和实际返回集合做比较。

但必须明确:code=0 只表示工具调用成功,不能替你判断横截面是否完整。 这份判断,只能由你的程序对照请求集合、返回集合和预期排除集合来完成。任何接口都无法自动知道你本意要请求哪些品种、容忍哪些缺失——这是数据管道的工程责任,不是 API 能替你做的决策。


不能从本文推出什么

  • 三组测试结果仅来自 2026 年 6 月 13 日的 TickDB MCP get_ticker 调用,不代表其他工具具有相同行为。
  • MCP 实测不能直接证明 REST、WebSocket、K 线或逐笔接口的行为。
  • 五个代表品种成功返回,不表示所有品种在所有时间均可用。
  • 下游比率失真、权重偏移和监控盲区属于工程风险推演,不是 MCP 返回结论。
  • 本文不涉及策略收益、回测绩效或买卖决策。

可保存的验收卡速查版

  1. 请求 symbol 和预期资产类型已定义。
  2. 请求原始集合已保存。
  3. 预期排除项已验证。
  4. 返回 (symbol, type) 已提取。
  5. 请求重复已检查。
  6. 返回重复已检查。
  7. 意外缺失已检查。
  8. 意外新增已检查。
  9. 资产类型错配已检查。
  10. 排除项意外返回已检查。
  11. 意外异常会关闭批次。
  12. 降级批次已记录排除条件。
  13. 下游只消费通过检查的批次。
  14. 新工具接入时重新验证。

跨市场数据任务真正需要判断的,不只是“请求有没有成功”,而是:我要求的数据是否不多、不少、类型正确地回来了。 只看 code=0,你知道的是工具调用结束了。核对请求集合、返回集合和资产类型之后,你才知道这批数据是否可以进入下游。


免责声明:本文仅讨论跨市场量化任务中的数据完整性校验与工程治理方法,不构成任何投资建议。文中不包含对任何策略有效性的评价,不推荐任何具体证券或交易方向,不对未来收益做任何暗示。所有接口描述仅为说明数据校验的工程框架,不代表特定产品的功能承诺。


标签#跨市场策略 #行情数据完整性 #批次校验 #统一行情API #量化数据治理 #MCP #TickDB

评论