先讲一个真实的场景。
他在输入框里删了三次。第一次写「跌破五日线卖」,第二次改成「跌破五日线且放量卖」,第三次又删掉「放量」两个字——因为他说不清「放量」到底是多少。
屏幕上的光标闪了十几秒,他最后打了一行: 从「跌破五日线卖」到这句话,中间那两次删除,才是回测真正有价值的部分。
为什么规则必须写成一句话
因为回测引擎不认「模糊」。
你说「买强势股」,引擎不知道强势是涨幅前 10% 还是前 20%,不知道按复权价还是不复权价,不知道是过去 20 天还是过去 60 天。你脑子里觉得清楚,是因为你默认了一堆参数——而那些默认参数,正是回测结果不可复现的根源。
我后来逼自己遵守一条:写不成一句话的规则,就说明它还没想清楚,先拆成两句,别硬凑。
一份能跑的规则至少要有六项:
选股:过去 20 个交易日涨幅排名前 10% 的 A 股
买入:次日开盘买入
卖出:收盘价低于 10 日均线,次日开盘卖出
止盈:无
止损:买入价下跌 8% 时卖出
仓位:每只股票投入总资金的 10%
注意这里面每一条都可执行、无歧义。没有「大概」「差不多」「放量明显」这类词。
三个我踩过的坑
坑一:把判断留给自己。
我最早写的规则里有「跌破均线且市场情绪差时卖出」。回测跑得很漂亮——因为「情绪差」是我事后看着 K 线判断的。这是典型的未来函数,回测结果毫无意义。
判断标准必须能在当时那一刻被计算出来,否则就删掉。
坑二:先选股票,再想规则。
顺序反了。先选股意味着你会不自觉地围绕那只股票调规则,最后得到的是「这只股的历史最优参数」,不是一套规则。正确顺序是:先写规则,再让规则去选股。
坑三:先看总收益。
这是最隐蔽的一个。总收益是一个数字,它会骗人——一个 40% 的收益可能来自一两次极端行情,剩下三百笔交易都在小亏。
我现在的顺序是:先看逐笔流水,再看收益、回撤、胜率和连亏。逐笔流水能告诉你这套规则在哪些日子里反复吃亏,那才是要改的地方。
一份可复用的检查清单
跑回测之前,对着过一遍:
- 每条规则都能写成一句无歧义的话
- 所有判断条件都能在当时那一刻被计算(无未来函数)
- 知道要测的是 A 股、港股还是美股(三者的交易限制、费用滑点都不一样)
- 系统复述你的规则时,你听完觉得「对,就是这个意思」——觉得「差不多吧」,就还不够
- 结果出来先看逐笔流水,再看汇总指标
- 结果不好时,先换区间、换市场再跑,比直接改规则更值得先做
最后一步容易被跳过:同一套规则放进每日模拟盘继续观察。回测通过只说明它在历史里成立,不说明它现在还成立。 写不出来,就先别跑数据。