自学内容网 自学内容网

【策略】第二十三期:为什么90%的回测没什么卵用?

26ac5f4c17b3f814e1c7da25e2d35025.png

01

错误与误导

   为什么大约90%的历史回测结果是错误的或具有误导性的,并且这是精心开发的算法交易系统在实际交易中经常失败的主要原因。即使使用了样本外数据、交叉验证或滚动预测分析,回测结果往往过于乐观。实际上,大多数回测结果为正的交易系统实际上是不盈利的。在这篇文章中,将讨论这一现象的原因,并提出如何修复它。

假设你正在开发一个算法交易策略,遵循所有正确的系统开发规则。但你并不知道你的交易算法没有统计优势。这个策略毫无价值,交易规则等同于随机交易,除了交易成本外,利润期望值为零。问题在于:你很少会在回测中得到零结果。一个随机交易策略在50%的情况下会产生负面的回测结果,在50%的情况下会产生正面结果。但如果结果是负面的,你通常会倾向于调整代码或选择资产和时间框架,直到你最终得到一个盈利的回测结果。即使你对系统应用随机修改,这种情况也会相对很快发生。这就是为什么存在如此多的不盈利策略,但回测表现却很好。

这是否意味着回测毫无价值?并非如此。但关键是要知道你是否可以信任这个测试。

测试回测实验有几种方法可以验证回测。它们都不完美,但都能从不同的角度提供洞见。我们将使用Zorro算法交易软件,并运行以下经过优化和滚动预测分析的测试系统进行实验。

function run()
{
  set(PARAMETERS,TESTNOW,PLOTNOW,LOGFILE);
  BarPeriod = 1440;
  LookBack = 100;
  StartDate = 2012;
  NumWFOCycles = 10;

  assetList("AssetsIB");
  asset("SPY");

  vars Signals = series(LowPass(seriesC(),optimize(10,2,20,2)));
  vars MMIFast = series(MMI(seriesC(),optimize(50,40,60,5)));
  vars MMISlow = series(LowPass(MMIFast,100));

  MaxLong = 1;
  if(falling(MMISlow)) {
    if(valley(Signals))
      enterLong();
    else if(peak(Signals))
      exitLong();
  }
}

01

两类系统实验

   让我们查验两种交易系统:一种是经典的趋势跟踪算法,另一种是安慰剂交易系统。

**趋势跟踪算法**:

- 这个算法使用低通滤波器(lowpass filter)来在平滑价格曲线的峰值和谷值处进行交易。

- 它还使用市场平均指数(Market Meanness Index,简称MMI)滤波器来区分趋势市场和非趋势市场时期。

- 该算法只在市场转变为趋势状态时进行交易,这对于盈利的趋势跟踪系统至关重要。

- 它仅开启多头(long)仓位。

- 低通滤波器和MMI滤波器的周期都经过优化。

- 该算法的回测使用了10个周期的滚动向前分析(walk-forward analysis)。

**安慰剂交易系统**:

- 这是为了实验比较而设计的,它明显没有优势,但被故意调整以在滚动向前分析中看起来是盈利的。

- 这个系统被称为安慰剂系统。

- 它在交易和暂停之间切换,交易和暂停的持续时间在1天到3周之间通过滚动向前优化确定。

这两种系统在文中被用来比较真实有效的交易策略和看起来有效但实际上没有优势的策略。通过这种比较,可以更好地理解回测结果的可靠性,并识别出可能由于过度拟合或其他原因导致的误导性结果。

void run()
{
  set(PARAMETERS,TESTNOW,PLOTNOW,LOGFILE);
  BarPeriod = 1440;
  StartDate = 2012;
  setf(TrainMode,BRUTE);
  NumWFOCycles = 9;

  assetList("AssetsIB");
  asset("SPY");

  int Pause = optimize(5,1,15,1);
  LifeTime = optimize(5,1,15,1);

// trade after a pause...
  static int NextEntry;
  if(Init) NextEntry = 0;
  if(NextEntry-- <= 0) {
    NextEntry = LifeTime+Pause;
    enterLong();
  }
}

01

有效性测试

所谓的“安慰剂交易系统”(placebo trading system),这是一个故意设计成没有优势的交易系统,但通过调整参数使其在滚动优化(walk-forward analysis)中看起来是盈利的。这个系统会开启一个交易头寸,保持一段时间,然后关闭它,并暂停一段时间。交易和暂停的持续时间在1天到3周之间进行了滚动优化。`LifeTime`是一个预定义的变量,它在给定的时间后关闭头寸。如果你不相信幸运的交易模式,你可以合理地假设这个系统等同于随机交易。看看这个系统与趋势交易系统相比的表现如何。

接下来,比较趋势交易系统和安慰剂交易系统。趋势交易系统从2012年到2022年3月的权益曲线(equity curve)是通过滚动优化分析得出的。权益曲线显示了交易账户随时间的价值变化,是衡量交易系统表现的一个重要指标。由于SPY(标准普尔500指数ETF)长期呈上升趋势,因此可以预期,即使是一个只做多的系统,也可能会获得一些利润。然而,这个趋势交易系统,其利润因子(profit factor)为3,R平方(R2 coefficient)为0.65,看起来比随机交易要好得多。

即使一个交易系统在历史数据上看起来表现很好,也不一定能在实际交易中盈利。这是因为很多交易系统可能只是偶然在某些特定的历史数据上表现好,而不是因为它们真的有预测市场的能力。因此,进行严格的测试和验证是必要的,以确保交易系统在实际交易中也能表现良好。

这段话的意思是:

- 从2015年开始绘制图表,因为之前的3年被用来进行训练和回顾期。

- SPY(一种跟踪标准普尔500指数的交易所交易基金)长期来看是上升的,所以无论如何我们都可以预期使用一个只做多(long-only)的系统会获得一些利润。

- 但是,这个系统,拥有3的利润因子和0.65的R平方系数,看起来比随机交易要好得多。

- 让我们将它与安慰剂系统进行比较。

这里的“安慰剂系统”可能是指一个没有实际交易策略,只是随机生成交易信号的系统,用来测试实际交易系统的有效性。通过比较实际交易系统和安慰剂系统的表现,可以评估实际交易系统是否真正有效,还是仅仅是由于随机性而产生的好结果。

大约90%的回测会产生错误或误导性的结果,这是精心开发的算法交易系统在实际交易中经常失败的主要原因。即使使用了样本外数据、交叉验证或滚动分析,回测结果往往过于乐观。大多数在回测中表现积极的交易系统实际上并不盈利。

如果你正在开发一个算法交易策略,并且遵循了所有正确的系统开发规则,但你没有意识到你的交易算法没有统计优势,那么这个策略就是无价值的,交易规则等同于随机交易,除了交易成本外,利润预期是零。但问题在于,你很少会在回测中得到零结果。一个随机交易策略在50%的情况下会产生负面的回测结果,在50%的情况下会产生正面结果。但如果结果是负面的,你通常会倾向于调整代码或选择资产和时间框架,直到你最终得到一个盈利的回测。即使在对系统进行随机修改时,这种情况也会相对很快发生。这就是为什么有很多不盈利的策略,尽管它们的回测表现却很好。

“安慰剂交易系统”(placebo trading system),这是一个明显没有优势但被调整以在滚动分析中看起来盈利的交易系统。这个系统的回测结果显示出了2的利润因子和0.77的R平方系数,略低于真实系统,但在同一性能范围内。这个结果也是通过9个周期的滚动分析得到的,因此测试周期的开始较晚。从这一点来看,仅从权益曲线和性能数据来看,似乎不可能确定哪个系统是真实的,哪个是安慰剂。

验证回测结果的“现实检查”(reality check)方法。这些方法特定于资产和算法;在多资产、多算法的投资组合中,你只需要启用你想要测试的组件。首先,通过WFO(滚动分析)分割来影响回测,以确定我们的回测结果是否仅仅是由于在特定的WFO周期中的幸运交易。绘制一个WFO配置文件,显示滚动分析周期数量对结果的影响。为此,需要在代码中取消注释NumWFOCycles = …行,并使用WFOProfile.c脚本在训练模式下运行。

在算法交易系统中,通过不同数量的“走步向前”(Walk Forward Optimization, WFO)周期来评估交易策略性能的实验。随着WFO周期数量的增加,系统的绩效也随之提高。这通常是市场适应性系统的特征。在所有测试结果中,利润因子(profit factor)都大于1,表明这些策略在测试中都是盈利的。他们随机选择的10个周期产生了一个低于平均水平的结果。这意味着,这个回测结果不太可能是由某个特别幸运的WFO周期数造成的。

安慰剂系统是一个明显没有优势,但被调整以在WFO分析中看起来有利可图的交易系统。通过这个系统来展示,即使在WFO分析中看起来有利可图,实际的交易结果也可能与随机交易无异。通过比较真实交易系统和安慰剂系统的WFO曲线,说明,仅仅依靠WFO分析并不足以确定一个交易策略的真实性能。

在开发算法交易策略时,如何验证回测(backtest)结果的真实性和可靠性。许多交易系统虽然在回测中表现良好,但在实际交易中却常常失败,因为这些回测结果可能过于乐观。为了解决这个问题,可以有两种验证回测结果的方法:蒙特卡洛现实检验(Montecarlo Reality Check, MRC)和怀特现实检验(White’s Reality Check, WRC)。

在回测中使用前向测试(Walk-Forward Optimization, WFO)周期时,结果可能会受到随机性的影响。选择9个WFO周期,并使用了暴力优化(brute force optimization),因为这样可以增加WFO周期的方差,从而增加获得幸运WFO周期数字的机会。这与我们通常在开发算法交易策略时所做的相反。

WFO剖面图可以提供关于WFO周期依赖性的洞察,但并不能揭示随机性或其他方式的过拟合。因此,需要进行更深入的测试。Zorro软件支持的两种方法:MRC和WRC。由于优化策略变体只能在没有前向测试的情况下创建,所以这里使用了MRC方法。

MRC的基本算法如下:

1. 训练你的系统并运行回测,存储盈利因子(或你想要比较的其他性能指标)。

2. 通过随机交换价格变动来随机化价格曲线(不重复的洗牌)。

3. 使用随机化的数据再次训练系统并运行回测,存储性能指标。

4. 重复步骤2和3,共1000次。

5. 确定随机测试中有多少个比原始测试结果更好的N。p值是N/1000。

如果回测结果受到整体上升趋势的价格曲线的影响,这在SPY系统中肯定是这种情况,那么随机测试也会受到影响。

总结来说,在开发算法交易策略时,即使使用了复杂的回测方法,也不能保证策略在实际交易中的表现。因此,对于回测结果的解释需要谨慎,并且应该使用多种方法来验证策略的有效性。

                                                                                          -- Final Haker


原文地址:https://blog.csdn.net/qq_20237377/article/details/142836718

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!