我的模型学会了免费交易

我早期的一个模型找到了一些看起来稳定盈利、甚至盈利得有些乏味的交易——小额收益持续不断地滴入,那种一致性让你以为自己终于找到了真东西。

它确实找到了某种东西。它找到了一个交易免费的世界。在那个世界里,这个模型是真的优秀。问题在于,我,以及其他所有人,都必须在另一个世界里交易——而当我让交易付出它实际应有的代价时,那大部分可爱的利润就这么蒸发了。

那个活在没有成本的世界里的优势

这个策略的标志是大量小额、频繁的盈利。单独看,每一次捕获都微不足道;合在一起,它们累积成一条平滑而令人鼓舞的曲线。我记得自己曾为它暗自得意。它看起来不像是侥幸。它看起来像是一种纪律。

我没有考虑到的是,那些小额盈利中的每一笔,都是在一个交易毫无成本的环境里衡量出来的——在那里你可以随心所欲地进进出出,而永远不必为这份特权付费。

那个我从未察觉自己在做的假设

问题就藏在这里,悄无声息。当我生成模型用来学习的数据时,我把每一笔交易都当作是免费的。交易没有手续费。没有滑点——我想象中的价格和我实际能成交的价格之间没有任何差距。于是,一笔捕捉到了最微小有利波动的交易被记录为一次盈利,哪怕那次波动比在真实世界里完成这笔交易所需付出的代价还要小。

我并不是故意对模型撒谎。我只是把它对”一笔好交易”的全部理解,建立在了一个假设之上——交易是免费的——而在任何真金白银易手的地方,这个假设通常都是不现实的。

成本不会缩小回报;它会改变判决

人的直觉是把成本当作一种统一的税:先做完分析,然后在最后减去某个固定的过路费。正是这种直觉让这个错误如此容易犯下,而它在一个重要的方面是错的。

成本并不只是让一笔盈利的交易少赚一点。它能改变一笔交易究竟是不是盈利。一个在计入成本前盈利的走势,在计入成本后可能是亏损。而如果你的标签——你对哪些交易算好交易的定义本身——是当作成本不存在来计算的,那么你就不只是在夸大业绩了。你是在把一些亏损者错标为盈利者,然后教一个模型去寻找更多这样的交易。

为什么这比听上去更糟

残酷之处在于选择效应。无摩擦的测试会不成比例地偏爱高换手率的策略——那些不停交易、收割大量微小优势的策略。而这恰恰也正是真实世界的成本打击得最狠的那类策略,因为这许多笔交易中的每一笔都要缴纳过路费。

所以一个无成本的回测并不会平等地夸大所有策略。它往往最深地爱上恰恰是成本会最快伤害的那些策略。你去寻找一个优势,而你那过于慷慨的模拟却递给你一个对成本脆弱的东西,包裹在它所能生成的最诱人的曲线之中。

修复之道:把成本放进”好”的定义里

修复的办法是不再把成本当作事后才想到的东西,而是把它移进模型所训练的那个真相里。我把交易的往返成本——手续费,以及对滑点的一个估计,同时也清楚这仍然无法涵盖每一项真实世界的成本——折叠进了标签本身,于是一笔交易只有在付出存在的代价之后仍然盈利时,才算得上好交易。一个越不过那道门槛的走势,被标注成了它真正的样子:不值得做。

模型表面上的业绩下降了,有时下降得很急。那次下降不是退步。那是幻想从那个早期原型里流尽,留下了一个至少不再那么脱离市场的训练信号——那个市场是会向参与者收费的。

一个回测是你建造的一个世界

藏在这件事底下的教训,比手续费要大得多。每一个回测都是一个小小的模拟宇宙,而它的诚实程度,永远只取决于你选择放进其中的规则。漏掉成本,你建造的就不是一个中立的测试——你建造的是一个比真实世界更仁慈的世界,而任何学会在那里茁壮成长的模型,学会的是依赖一种在你的模拟之外并不存在的慷慨。

市场给一个新策略上的第一课,几乎总是同一课的某个版本:行动比你假设的更昂贵。你可以提前在模拟的安全环境里教会你的模型这一课,也可以让市场之后用真金白银、按全价来教它。我宁愿在更便宜的教室里为这一课付费。

一个只有在交易免费时才盈利的策略,并不算是真正的策略。它只是一个发现——一个你忘了为做出它而向自己收费的发现。

— 没有信号,没有回报,非投资建议。