美股不是一个交易所,而是十几家灯池交易所加上大量场外执行场所组成的网络。同一只股票在同一秒可以在多个场所同时成交,价格与数量各不相同。因此「这只股票今天的成交量是多少」这个问题,取决于你问的是谁。
这不是一个学术细节。我们在接入行情数据源时做过逐日比对,结论足以改变回测的走向。
一、两种口径到底是什么
单交易所口径(single venue):某一家交易所自己的行情,只包含在这家交易所撮合成交的订单。它的成交量是这家场所的成交量,它的「收盘价」是这家场所在收盘时刻的最后一笔成交。
合并口径(consolidated):把所有报告到统一行情系统的成交汇总在一起,包括各家灯池交易所,也包括通过 TRF 上报的场外成交(暗池、批发做市商内化的订单流)。它的成交量是全市场成交量,它的收盘价来自主上市交易所的收盘集合竞价——那是官方收盘价,指数编制、ETF 净值、期权行权都用它。
零售订单的很大一部分并不在灯池交易所成交,而是被批发做市商内化后经 TRF 报告。因此任何单一交易所看到的都只是全市场的一个切片,而且这个切片的大小随各家场所的市场份额此消彼长。
二、我们实测到的数字
我们取同一批美股标的,把某家单交易所的日线与合并日线逐日对齐后统计:
| 比对项 | 实测结果 |
|---|---|
| 单场成交量 / 合并成交量 | 23% ~ 34% |
| 该比例的季度间稳定性 | 不稳定,随季度漂移 |
| 收盘价最大偏差 | 3.5% ~ 7.1% |
| 偏差的分布 | 多数交易日很小,个别交易日显著放大 |
两行结论各自都足够致命,但原因完全不同。
成交量的问题是「基数在变」。 如果单场成交量始终是合并量的 30%,那它只是一个缩放,对「今日成交量 / 20 日均量」这类比值型指标毫无影响。但实测比例在 23% 到 34% 之间随季度漂移,意味着分子与分母来自不同市场份额环境下的观测。你设置的「放量 1.5 倍」阈值,在 2024 年第三季度和 2025 年第一季度筛出的其实不是同一件事。这种漂移不会让回测报错,只会让成交量过滤器的含义随时间悄悄改变。
收盘价的问题是「个别日子差很多」。 大多数交易日两种口径的收盘价几乎一致,但当某只股票在某家场所当日流动性稀薄时,那家场所的最后一笔成交可能发生在收盘前很久,或者以一个明显偏离的价格成交。这时偏差就会跳到百分之几的量级。
三、7% 意味着什么
把这个数字放进策略里就能感觉到分量。
吊灯止损的默认跟踪止损是 3 倍 ATR。对一只年化波动率中等的美股,日 ATR 大约是价格的 1.5%~2.5%,因此 3 倍 ATR 的止损距离大约在 5%~7%。
也就是说,两种口径之间的收盘价偏差,在极端日可以整个覆盖掉一次止损的距离。 一次入场信号是否触发、一次止损是否被击穿,完全可能只取决于你取的是哪一家的收盘价。这不是精度问题,是结论问题。
同样受影响的还有:
- 突破判定:22 日最高价由一串收盘价 / 最高价决定,序列换一套,突破日就换一批;
- 均线过滤:100 日 SMA 对单点偏差不敏感,但对系统性偏差敏感;
- 回撤统计:最大回撤取的是极值,而极值恰恰最容易落在偏差最大的那几天。
四、最危险的做法是混用
比「用了单场口径」更糟的是「一半用单场、一半用合并」。这在实践中非常容易发生:价格从一个源取,成交量从另一个源取,因为后者更容易拿到;或者不同标的用了不同的数据源,而代码里没有任何地方记录这件事。
混用会制造出现实中不存在的信号:用合并成交量判断放量,用单场收盘价判断突破,两者描述的根本不是同一个市场状态。回测会照常运行、照常产出漂亮的曲线,而这条曲线对应的交易在真实市场里无法被执行。
我们在设计上的处理是把口径变成一个必须显式声明的字段而不是一个默认值:
{
"code": 0,
"message": "ok",
"data": {
"symbol": "QQQ.US",
"venue_mode": "consolidated",
"timeliness": "eod",
"as_of": "2026-09-03",
"bars": []
}
}
venue_mode 出现在每一次行情响应里,回测请求也要求显式指定;一次回测内不允许混用两种口径。界面上会为单交易所口径显示告警,说明它不适合用于价格类回测。
五、那到底该用哪一种
价格相关的一切用合并口径。 突破、均线、止损、收益率、回撤——凡是把价格当作「市场的价格」来用的地方,都应该用合并口径,因为官方收盘价本身就是合并口径的产物,指数与 ETF 也按它计算。
只有做微观结构研究时才用单交易所口径。 例如研究某家场所的订单簿深度、成交分布、报价行为。此时你关心的正是这家场所本身,合并口径反而是错的。
不要用单场数据反推全市场。 用「单场量 × 3」估算全市场量是一种常见的临时做法,实测显示这个倍数在 3 到 4.3 之间漂移,估出来的量误差可达 40%。
六、我们的数据边界,说在前面
诚实地讲清楚可用范围,比宣称覆盖更长的历史更有用:
- 我们采用的合并日线数据集自 2024-07-01 起可用,这是数据源侧的客观边界,不是产品选择;
- 因此任何在本平台上跑出来的回测,其结论的适用区间到此为止,把它称作「五年验证」是不成立的;
- 平台默认只对外提供 T+1 及更早的收盘数据,接口响应里会如实标注数据时效;
- 标的库包含已退市标的,回测不做幸存者过滤(原因见《回测的三个陷阱》)。
结论
数据口径不是一个可以留到最后再处理的细节,它决定了回测里的价格序列到底代表什么。选定一种口径、在整条链路上贯彻它、并在每一次数据交付时把它写清楚——这件事的收益不体现在任何指标上,但它是其余所有指标能够被信任的前提。
2026-09 更新:主场常规时段重建口径
本文写作时,平台只接受合并口径日线。2026 年 9 月我们验证了另一条路:主上市交易所 statistics 里的官方收盘价与合并收盘价在 547 个交易日上完全相等,只取常规时段(09:30–16:00 ET)的分钟线重建开高低后,开盘偏差均值约 0.002%、最高最低均值不到 0.01%。因此 2024-07 之前的美股历史现在以 venue_mode = primary_session 提供:价格可用于回测,成交量仍是单场口径。同一次回测若同时覆盖两段,响应会标注 mixed_session_source;开启成交量过滤时另有 volume_filter_on_primary_session 提示。单交易所全时段日线(single_venue)仍然拒绝用于回测,本文正文的结论不变。
本文仅用于量化技术研究与教育目的,不构成任何投资建议。历史回测结果不代表未来收益,交易风险由投资者自行承担。