回测回答的问题
回测是把事先定好的交易规则原样套用到过去的价格上。它回答的问题是“如果当时照这条规则执行会怎样”,而不是“今后是否也会如此”。所以与其看结果表里的某个数字,不如先追问这个数字有多接近偶然。本站的加密货币策略回测器用币安真实的历史K线运行六种规则,并把结果与单纯持有时并排展示。人们过度相信回测的原因很简单:平滑上升的曲线很有说服力,而做出这条曲线的人通常只留下效果好的设置。事先定好阅读顺序,就能减少这类陷阱。依次看:规则是否用文字写得准确,成交时点和成本是如何计入的,与持有相比如何,交易次数是否足够,分段之后结果是否仍然成立。如果规则像“回调得差不多时买入”这样含糊,测试本身就无法成立。
结果表里的数字
总收益率会随期间变长而增大,所以期间不同的结果之间要用年化收益率(CAGR)比较。胜率再高,只要有一笔亏损很大,也会亏钱;胜率再低,只要盈利的交易很大,也能赚钱。所以胜率要与盈亏比一起看才有意义。市场暴露是持有仓位时间的比例。暴露为 30% 的规则在其余 70% 的时间里持有现金,所以拿收益率和回撤与持有比较时,要把这一差异一并考虑。推迟止损、提早止盈的规则会提高胜率,但盈亏比会变差,只看胜率的话,这种性质会显得像优点。盈利因子小于 1,意味着在计入成本之前就已亏损;只是略高于 1 的话,很容易被成本和滑点翻转。暴露低的规则回撤小是理所当然的,仅凭这一点也很难说规则出色。
- CAGR = (最终资产 ÷ 初始资产)^(1 ÷ 年数) − 1
- MDD:从此前最高点下跌最深的比例
- 胜率:盈利交易 ÷ 已结束交易
- 盈亏比:平均盈利 ÷ 平均亏损
- 盈利因子:盈利交易的盈利总和 ÷ 亏损交易的亏损总和
- 市场暴露:持有仓位的K线数 ÷ 全部K线数
- 平均持仓时长:单个仓位平均持有的K线数
与持有比较,并计入成本
规则的结果要与同期买入后一直持有(持有)比较才有意义。如果是币价大涨的时期,大多数买入规则都会盈利。成本也必须计入。币安现货的基础手续费为每次成交 0.1%,再加上订单以比预想更不利的价格成交的滑点。如果每次都全额买卖,成交 200 次、每次 0.1%,资产约有 18% 被成本吃掉;每次 0.15% 则约为 26%。图中的示例只有 49 次成交,扣除成本前最终资产为 168,高于持有(165),但每次成交扣除 0.15% 后变为 157,低于持有。与分批定投相比的情况,可以用加密货币定投模拟器试算。成本的算术很简单:0.999 乘 200 次约为 0.819,0.9985 乘 200 次约为 0.741。越是短线买卖的规则,成交次数越多,这一影响越大;在交易清淡的币种或剧烈波动的区间,滑点可能远大于 0.05%。与持有比较时,要统一期间、初始资产和成本假设。
示例:对随机生成的 240 根K线价格(从生成的多组中挑出的一组)应用“收盘价站上 5 根K线移动平均线时在下一根K线开盘价买入,跌破时卖出”规则得到的资产曲线(起点 100)。49 次成交每次扣除 0.15%(手续费 0.1% + 滑点 0.05%)后,原本高于持有的最终资产变得低于持有。
先看最大回撤(MDD)
最大回撤是资产从此前最高点下跌最深的比例。即使最终收益率相同,中途跌过 35% 的曲线和跌过 10% 的曲线,是完全不同的体验。亏损与回本是不对称的:亏 20% 要涨 25%,亏 35% 要涨约 54%,亏 50% 要涨 100% 才能回到原点。还要一并看重新越过最高点花了多长时间。图中示例里,持有曲线的 MDD 为 35%,同期计入成本的规则曲线 MDD 为 11%。之所以先看回撤再看收益率,是因为实际照这条曲线操作的人能否扛得住,取决于回撤。身处回撤之中时,无法分辨规则是失效了还是暂时休息,很多人恰恰在那个时候放弃规则。回测的 MDD 只是过去一条路径得出的数值,稳妥起见,应认为今后的回撤可能比它更深。
示例:上图中的“持有”曲线。从此前最高点下跌最深的比例就是最大回撤(MDD),这里是 -35%。重新越过最高点所花的时间也要一并看。
未来函数:当时并不知道的信息
未来函数是把当时无从得知的信息用于判断的错误。最常见的形式是用K线的收盘价判断信号,又假定以同一个收盘价成交。收盘价要等K线结束才能知道,所以用已收盘K线的收盘价判断的话,成交应记在下一根K线的开盘价。本站的回测器也是这样做的。假定在一天开始时就知道当天的最高价、最低价,或者在那根K线的位置就使用要等右侧K线收盘才能确认的波段高点,也属于同一类错误。常见的误解是把好得过分的结果当成实力。胜率异常高或几乎没有亏损交易时,首先要怀疑未来函数。依次确认:指标计算中是否混入了那根K线之后的数值(如按全期间最高、最低值归一化的数值),信号K线与成交K线是否是同一根,数据的K线时间是以开始为准还是以结束为准。
过拟合:尝试越多,挑中的越可能是偶然
把周期、倍数等设置换上几十种,其中总有一种会碰巧得出好结果。一旦选中这个设置,结果表反映的就不再是规则的实力,而是挑选的结果。上面的图也是这样做出来的。生成多组随机价格,挑出便于说明的一组,结果在挑选买卖时机的规则根本没有理由奏效的随机价格上,也得到了一条扣成本前看起来优于持有的曲线。检查方法是看所选设置的相邻数值是否同样表现良好,在其他期间、其他币种上结果是否仍然成立。每多加一个条件,对过去就会拟合得更好。因为每个条件都会被打磨成恰好避开过去某段特定的亏损区间。所以会采用把选设置的区间和测试的区间分开的方法:在前一段区间定好设置之后,在未动过的后一段区间只跑一次。如果看了后一段区间的结果再去改设置,那段区间也就不再能用于测试了。
幸存者偏差与行情依赖
只挑现在仍在交易的币种去测试过去,期间消失或被下架的币种就被排除在外,只剩幸存币种的样本会让结果变好。用“现在市值排名靠前的币种”来选对象,也等于事先知道哪些币种期间大涨再去挑,存在同样的问题。本课程的实测统计也是用现在仍存在的 10 个大型币种测量的,有同样的局限。行情阶段也要看。这 10 个币种日线(各币种上线日~2026 年 9 月)的全部 29,746 根K线中,从K线收盘价到 20 根K线后收盘价的收益率平均为 +4.62%,但中位数为 +0.15%,上涨比例为 50.4%。这说明少数几次大涨拉高了平均值,而这几次是否落在测试期间内,可能让结果大不相同。要分段确认结果是否依赖于某一轮牛市。分段时,把上涨区间、下跌区间和横盘区间分开来看,记下规则在哪里赚钱、在哪里亏钱。
交易次数少,数字就会摇摆
已结束的交易只有十次左右时,胜率和盈利因子会被几次偶然大幅左右。在本课程的实测中,币安 BTC 日线的金叉(SMA50 上穿 SMA200)从 2017 年 8 月到 2026 年 9 月只有 9 次,5 根K线后上涨的比例为 9 次中 1 次(11.1%),20 根K线后为 8 次中 6 次(75.0%)。全部K线的基准分别为 53.1%、53.7%。同一个信号,只是换一个测量时点,看起来就完全相反。样本少的结果无论好坏都应暂缓下结论,先延长期间或增加币种来扩大交易次数。十次赢七次与一百次赢七十次,胜率相同,分量却不同。因为抛十次硬币出现七次以上正面的概率约为 17%,并不罕见。
好的回测也不会告诉你的事
即使避开了所有陷阱,回测也只是展示过去的一条路径。市场性质一变,原本有效的规则可能有一段时间失灵;而在实际交易中,连续亏损时要坚持照规则执行比想象中更难。把回测看作事先展示规则性格的工具更准确,也就是它多久买卖一次、会跌多深。如果想检验自己的目测判断,可以在看图猜走势测验中把正确率与瞎猜的基准线比较。所以看完结果表之后要做的,不是计算能赚多少,而是想清楚自己能否真正承受那样的回撤和连败,成本假设是否符合自己的交易环境。把同一规则实际跟踪几个月的记录与回测并排对照,就能看出成本、成交和心理带来的差异从何而来。
加密货币与股票的不同之处
同样的规则,在不同市场上,结果表的假设被打破的方式也不同。加密货币 24 小时交易,日线之间几乎没有空档;而股票在常规交易时段结束后出现的消息会在次日开盘价上一并反映,形成跳空。“在下一根K线开盘价成交”的假设虽然相同,但在股票上,这个开盘价可能与前一天收盘价相差很大,止损也常常不是在止损价、而是在跳空后的开盘价成交。韩国股票有每日涨跌幅限制(±30%),被封在涨停或跌停时,会出现无法以想要的价格买卖的日子,而回测通常把那一天也当作已成交。美股没有个股每日涨跌幅限制,但有在剧烈波动时暂停交易的机制。成本也不同。韩国股票卖出时要缴交易税,往返成本的算法与只付手续费的加密货币不同。幸存者偏差的形式也不同。用现在的指数成分股或美国大型科技股测试过去,期间被剔除的个股就消失了;只挑三星电子、SK海力士这类长期存活的大盘股,结果很容易显得好看。还要确认股票数据是否是反映了拆股和分红的复权价格。
实战检查顺序
拿到结果表时按下面的顺序看,就能少漏掉一些东西。在实时图表上跟踪同一规则时,还要多确认一点。回测只使用已收盘的K线,而屏幕上最后一根K线仍在进行中,收盘价、移动平均线和 RSI 每次更新都会变化。盘中亮起的信号在K线收盘时熄灭的情况很常见,所以要与回测在同样条件下比较,就只统计K线收盘后的信号。回测器的结果是在历史K线全部收盘的状态下计算的,所以现在屏幕上看到的信号与结果表中的信号数量可能看起来不同。如果把进行中的K线也算作信号,就会混入实际上无法成交的信号。下面的列表也是阅读结果表的顺序。
- 规则是否用文字写得准确(入场、出场、止损条件)
- 信号K线与成交K线是否不同(以收盘价判断,在下一根K线开盘价成交)
- 每次成交是否都计入了手续费和滑点
- 是否与同期持有比较,并考虑了暴露的差异
- MDD 和回本时间是否真的扛得住
- 已结束交易是否足够,分段之后结果是否仍然成立
- 所选设置的相邻数值、其他币种或个股上是否也类似
- 实时比较是否只用了已收盘K线的信号
🌍 在搜索引擎中查找更多
点击下方按钮,即可在对应搜索引擎中直接搜索该关键词