要点
- 发生在
- K 线区间覆盖了两个离场价位时
- 更频繁于
- 止损与目标相对 K 线区间都很窄时
- 能被精确解决的
- 逐笔数据或一个细得多的周期
- Senzoukria 的约定
- 止损胜出(最不利的结果)
这个问题
一个多头头寸在 100 入场,止损在 98、目标在 104。下一根 K 线开在 101、上到 105、下到 97,收在 103。两个离场都被触及了,但单凭这根 K 线无法分辨价格是先到 105 再跌下来,还是先到 97 再涨上去。一种读法给出 +4,另一种给出 −2。如果三百笔交易里有三十笔落在这样的 K 线上,那么两种约定在同一份数据上就差 30 × 6 = 180 点。
随着两个离场相对这根 K 线典型区间越靠近,有歧义的 K 线出现得越频繁。一套在 15 分钟 K 线上测试的剥头皮规则,可以有很大一部分交易是由这个约定、而不是由市场来决定的。
在用的那些约定
| 约定 | 规则 | 效果 |
|---|---|---|
| 悲观 | 假设止损先被打到 | 当真实顺序有利时低估结果 |
| 乐观 | 假设目标先被打到 | 高估结果;在实盘里很少被复现 |
| 按离开盘价的距离 | 假设价格先去离开盘价更近的那个极值 | 平均而言合理,在个别 K 线上是错的 |
| 更细的数据 | 用逐笔或 1 分钟 K 线重放这根 K 线 | 在存在这类更细数据的地方解决顺序 |
在 Senzoukria 里
自动回测引擎把止损与目标对着每根 K 线的最高价和最低价检验,而当一根 K 线同时触及两者时,它按止损平掉这笔交易。这条规则写在引擎的源码和文档里:没有逐笔数据,顺序就是未知的,所以取对这笔交易最不利的那个结果。那根 K 线的偏移在离场被应用之前,会被记录到这笔交易的 MAE 和 MFE 里。图表上的多头与空头持仓工具应用同样的顺序,先检查止损。而自营规则引擎更进一步:当一条回撤规则的判定取决于那个未知的 K 线内顺序时,它把结果标为不确定,而不是去猜这个账户活下来了没有。
由于回测提供 1 分钟、5 分钟、15 分钟和 1 小时这几种粒度,所以一套策略对这个约定的敏感程度,可以通过把同一条规则跑在一个更细的粒度上、再比较结果来检查。
常见错误
- 用一个平台的默认设置,而不知道它施加的是哪一种约定。
- 在粗粒度的 K 线上收紧止损和目标,而那会让有歧义的交易成倍增加。
- 把那个悲观的结果当成一个有保证的下限:滑点和跳空仍然能让它更糟。
相关内容
同一栏目
其他语言版本
常见问题
- 为什么不干脆假设离开盘价更近的那个价位先被打到?
- 那是一个合理的平均猜测,但在任何一根具体的 K 线上它都可能是错的,而且如果这套策略的入场系统性地靠在区间的某一侧,那些误差并不会相互抵消。一个保守的约定,把误差留在那个不讨好结果的方向上。
- 我怎么知道我的回测依赖这个约定?
- 数一数那些在同时触及两个价位的 K 线上离场的交易,或者把同一条规则在一个更细的周期上重跑一遍。如果结果有实质性的变化,那么这套策略的优势至少有一部分是「有歧义的 K 线怎么被处理」所造成的人为产物。