滚动前高/前低突破回测很好看,直到你发现当前K线被算进了它自己的关口。shift(1) 这个细节区分了真信号和自欺。
突破规则在价格上穿过去 N 根K线的最高点时做多(下穿最低点做空)。这是最古老的趋势跟随入场,它对自己的前提也很诚实:入场之后必须真的有趋势。
关口 = 过去 N 根的滚动最高价,必须排除当前K线——pandas 写法 high.rolling(N).max().shift(1)。上穿条件 = 上一根收盘在关口下、这一根收盘在关口上。
.shift(1),当前K线自己的最高价就在关口里——『上穿20根前高』几乎永远触发不了,因为关口跟着要突破它的价格一起抬。回测悄悄变成『这条规则从不交易』,看着像纪律,其实是 bug。我们自己犯过,并把它写成了博客。我们的规则引擎(以及开源的 rulelint)算前高/前低永远排除当前K线;试炼场会把 1000 根真实K线上从不触发的条件标红,而不是称赞它『有耐心』。
打开规则试炼场,用这个指标搭一个条件,放到 1000 根真实K线上跑——逐条件触发次数,全在你的浏览器里算。也可以用 Python 的 rulelint(MIT)来 lint。
完整故事:那条永远无法触发的突破规则。
研究与教育内容,不构成投资建议。没有任何指标本身能赚钱——我们自己蛊的诚实战绩(含亏损)都在记分牌上。