从 1m 到策略周期:聚合与交易时段过滤

很多策略在研究阶段看起来“没问题”,一上平台就出现两种典型故障:

  • 指标抖动:信号频繁、噪声巨大
  • 指标失真:同样参数,在不同环境结果差异明显

结论先行:问题往往不在指标公式,而在数据口径——尤其是 周期聚合交易时段过滤
EasyQuant 把 1m bars 作为统一输入,再通过聚合与会话规则把口径固定下来,避免“非交易时段噪声”与“周期不一致”导致的策略漂移。


一、为什么用 1m 做基准输入?

在平台里,你需要一种“足够细、又可控”的通用输入:

  • 太细(tick):噪声大、计算成本高、回测输入复杂
  • 太粗(日线):无法覆盖多数日内策略与更灵活的周期需求

因此 1m 是一个典型的工程折中:

  • 足够支撑大多数常规指标计算
  • 便于回填与入库
  • 便于向上聚合成 5m/15m/30m/1h 等周期

关键点:聚合必须是平台能力,而不是每个策略各做一套。


二、周期聚合:不是简单拼 K 线

很多人以为 5m bar 就是把 1m bar “每 5 根合一根”。
但在真实市场里,聚合必须明确:

  • 对齐边界:5m 的窗口从什么时候开始切?是否以交易所时间为准?
  • 价格字段口径:open/close/high/low 的组合方式
  • 成交量/成交额的累加方式
  • 缺口处理:如果某分钟缺失,是跳过还是补齐?对指标影响巨大

如果这些口径不固定,策略“同参数不同结果”几乎不可避免(见 04 的 provenance)。


三、交易时段过滤:为什么它是“指标正确性”的一部分?

如果你把非交易时段 bars 也喂给指标,最常见后果是:

  • 均线被拉平:非交易时段价格不动或异常点导致均线失真
  • RSI/波动类指标异常:长时间不变价会让指标走向极端
  • 信号漂移:策略在非交易时段“虚假触发”或“被稀释”

因此平台必须知道“什么时候是交易时段”。
这不是 UI 体验问题,而是 策略计算口径 的一部分。


四、平台如何把口径固定下来?

在 EasyQuant 的推荐口径里:

  • 先把 1m bars 入库(作为事实基准)
  • 再按市场会话(Market Session)过滤到可交易区间
  • 在过滤后的序列上做周期聚合
  • 策略指标计算永远基于同一套口径(便于解释与复现)

这会带来一个非常现实的好处:
当你遇到“NO_BARS/数据不足/信号不触发”时,你可以明确判断到底是数据缺失,还是被交易时段过滤导致(见 03)。


五、一个快速验收:同一策略在两种口径下的差异

你可以做一个 10 分钟的验收,直观看到口径的重要性:

  1. 选择一个日内策略(例如均线或 Bollinger)
  2. 取同一只标的、同一时间窗
  3. 对比两种计算方式:
    • A:不做交易时段过滤直接计算
    • B:按交易时段过滤后再计算

你会看到:

  • 指标曲线形态不同
  • 信号触发点不同
  • 回测成交分布不同

这不是“策略不稳定”,而是“输入口径不一致”。


六、排障:为什么策略突然“没有 bars”?

当系统提示 NO_BARS,常见原因有三类:

  • 入库缺失:区间内确实没数据
  • 会话过滤:非交易时段被过滤后为空
  • 周期聚合:聚合周期过大 + 窗口太短,导致有效 bar 数不足

排障建议顺序:

  1. 先确认 1m bars 是否存在
  2. 再确认交易时段过滤后的 bars 是否仍存在
  3. 最后看聚合周期是否合理(窗口是否足够长)

结语:把口径做成平台能力,才能谈交付

策略交付的第一步不是“写更多指标”,而是“保证输入口径一致”。
周期聚合与交易时段过滤看似工程细节,却决定了策略是否可解释、可复现、可协作。

下一篇(07)我们进入策略计算层:DSL 规则树如何编译成Rule,以及如何做可扩展与安全边界。