从 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 分钟的验收,直观看到口径的重要性:
- 选择一个日内策略(例如均线或 Bollinger)
- 取同一只标的、同一时间窗
- 对比两种计算方式:
- A:不做交易时段过滤直接计算
- B:按交易时段过滤后再计算
你会看到:
- 指标曲线形态不同
- 信号触发点不同
- 回测成交分布不同
这不是“策略不稳定”,而是“输入口径不一致”。
六、排障:为什么策略突然“没有 bars”?
当系统提示 NO_BARS,常见原因有三类:
- 入库缺失:区间内确实没数据
- 会话过滤:非交易时段被过滤后为空
- 周期聚合:聚合周期过大 + 窗口太短,导致有效 bar 数不足
排障建议顺序:
- 先确认 1m bars 是否存在
- 再确认交易时段过滤后的 bars 是否仍存在
- 最后看聚合周期是否合理(窗口是否足够长)
结语:把口径做成平台能力,才能谈交付
策略交付的第一步不是“写更多指标”,而是“保证输入口径一致”。
周期聚合与交易时段过滤看似工程细节,却决定了策略是否可解释、可复现、可协作。
下一篇(07)我们进入策略计算层:DSL 规则树如何编译成Rule,以及如何做可扩展与安全边界。