每个准则在奖励什么
- 净利润奖励规模和暴露:交易最多或者持仓最大的那个组合通常胜出,连带它的回撤一起。
- 盈亏比奖励挑剔:一个交易极少、而且一笔都没亏的组合,得分是无穷大。
- 每笔期望值奖励平均单笔很大,不管总共有多少笔。
- 每笔夏普或索提诺奖励单笔结果的一致性。
- SQN 把每笔夏普乘上交易笔数的平方根,所以它同时奖励一致性和样本量。
- 自定义比率,比如收益除以回撤,奖励的是某个具体账户规则真正在意的东西。
同一个网格,两个胜出者
组合 A 做了 12 笔交易,盈亏比 4.0,净结果 +1,800。组合 B 做了 140 笔交易,盈亏比 1.4,净结果 +5,600。最大化盈亏比会选中 A;最大化净利润或者 SQN 很可能选中 B。而如果给每个组合都加上「至少 30 笔交易」的约束,A 在排序之前就被排除了。
约束和准则一样重要:没有它,选择会一路漂向那些样本极小、比率因为偶然而极端的组合。更隐蔽的问题是:在看到每个准则各自会选中哪个组合之后再去改准则,这本身就是一种数据窥探。准则属于那份写下来的假设,而不是属于看完结果之后的调整。
在 Senzoukria 里
自动回测的参数扫描和前推分析提供四个选择准则:SQN(默认,标注为把交易笔数考虑在内)、盈亏比、每笔期望值和每笔夏普。交易笔数少于 10 的组合会被赋予负无穷的分数,所以它永远不会被选中;而一个没有亏损交易、盈亏比为无穷大的组合,会被映射到一个很大的有限分数,这样排序仍然是确定的。
前推分析随后在每一个训练窗口内应用所选的准则,并在紧随其后的测试窗口上评估胜出者;而 Gauntlet 用一些不依赖这个准则的统计量来审判被选中的那条路径,比如置换检验的 p 值和去膨胀夏普。
常见错误
- 优化净利润,然后对胜出者的回撤感到意外。
- 在没有最少交易笔数约束的情况下优化盈亏比。
- 挑一个能让自己偏爱的那个组合胜出的准则。
- 把优化出来的那个数值读成对未来表现的估计;它是许多个数值里的最大值,天然偏高。
相关内容
同一栏目
其他语言版本
常见问题
- 优化交易策略最好的目标函数是哪个?
- 不存在普适的最好。一个把平均结果、离散度和交易笔数结合起来的准则,比如 SQN,比盈亏比或者净利润更不容易挑中极小的样本。无论选哪个,它都应该反映这个账户真正在意的约束,并且应该在运行之前就定下来。
- 桌面端为什么拒绝交易笔数少于 10 的组合?
- 因为在寥寥几笔交易上算出来的比率会因为偶然而极端。三笔盈利交易就给出无穷大的盈亏比,而没有这道下限,这样的组合在几乎每一次扫描里都会被选中。