外汇EA编写教程:趋势与巩固条件下的分离策略优化

目录

  • 简介
  • 分离优化的概念
  • 选择一种策略来跟踪趋势
  • 测试交易策略
  • 选择基于整合的策略
  • 基于整合的测试策略
  • 组合策略
  • 总结
  • 结论

简介

在制定交易策略时,首要任务是确定进入交易的条件、跟踪头寸和退出点的方法。为此,将使用各种数学、统计和其他分析方法。它们通常被现有的以指标形式评估市场特征的自治系统所加强。制定交易策略的主要问题之一是缺乏通用性。在所有可能的市场条件下,交易系统不能以相同的效率运行。因此,在开发EA交易时,交易者通常选择检测特定(潜在盈利能力)市场条件的条件。nbsp;

此外,每个交易系统都有其自身的缺陷。趋势跟踪策略会在长期的合并变化中亏损,而基于合并的策略在强劲的方向变化时会错误地进入市场。为了减少错误信号的影响,提高盈利能力,系统变得灵活,这意味着它们有一些特定的设置或输入数据,这是由于市场行为而合理的。改变。

随着时间的推移,任何一个交易系统的效率都会降低,因此有必要调整其参数以适应新的条件。内置的MetaTrader 5策略测试程序就是这个问题的解决方案。此工具有助于分析历史上任何EA事务的性能,并定义最佳设置,以便在实际事务中进一步使用。

分离优化概念

在本文中,我们将在更广泛的范围内讨论策略测试器的应用。显然,大多数交易系统是双向的(在特定条件下交易)。图1显示了一个实际交易策略的简单示例,这个想法很简单——低买高卖。

图1。趋势跟踪策略

通常,一组设置用于确定这样一个系统中的向上和向下趋势,并且入口条件相似。但关键是,市场增长和衰退的具体情况在速度和持续时间等诸多特征上可能存在很大差异。在这方面,我建议考虑一个系统,分别识别上升和下降趋势下的进入交易。

为此,我们需要两组参数来定义市场进入和退出条件。在这方面,我们提出了“分离优化”的概念。

分离优化是指利用策略测试仪分别确定交易系统的上升和下降趋势的最优参数。

为了测试分离优化,我决定选择两个交易系统:趋势跟踪系统和基于合并的系统。在跟随趋势的策略中,我们将分别对向上和向下的趋势进行优化,而在整合策略中,我们将对渠道内交易的优化进行评估。nbsp;

选择遵循策略
的趋势

我将使用J.F.Ehlers的中心度指数,用彩色OSMA柱状图(重心OSMA)表示,来测试分离优化。它的信号由计算平均价格速度的指标确定。

参数 说明
使用的指示器 重心OSMA
使用的指示器 平均速度
时间框架 H1
购买条款 重心指数的重心显示增长(指数值小于0),而平均速度指数值高于阈值(参数中预设)。
销售条款 重心指数重心显示下降(指数值大于0),平均速度指数值高于阈值(参数中预设)。
退出条件 利润/止损

该策略如图2所示。从上表可以看出,交易策略定义了买卖时进入市场的条件。因为这是一种趋势跟随策略,所以购买条件对应于上升趋势,而销售条件对应于下降趋势。nbsp;

图2。趋势跟踪策略的进入条件

在元编辑器中实现此策略时,我们应该设置EA的工作条件,以便它只能用于升序、降序或同时用于这两种情况。nbsp;

我们还应考虑以下内容:

  • 能够管理上升和下降趋势,并测试两种情况下的模式。
  • 对于个体优化,需要分别使用ea进行上升趋势、下降趋势和联合操作。
  • 上升趋势和下降趋势应有各自独立的参数。在联合交易中使用它们是必要的。

要满足这些EA开发条件,请输入以下代码:

//+------------------------------------------------------------------+
//| 操作模式枚举                                                       |
//+------------------------------------------------------------------+
enum Trend_type
  {
   UPTREND = 1,            //上升趋势       
   DOWNTREND,              //下降趋势
   BOTH                    //两种趋势
  };

输入参数集如下:

//+------------------------------------------------------------------+
//| EA 的输入参数                                                      |
//+------------------------------------------------------------------+
input string               Inp_EaComment="Trend Strategy";              //EA 注释
input double               Inp_Lot=0.01;                                //手数
input MarginMode           Inp_MMode=LOT;                               //资金管理

input Trend_type           Inp_Trend_type=3;                            //趋势类型
//--- 上升趋势参数
input string               Inp_Str_label1="===Uptrend parameters===";   //标签
input int                  Inp_MagicNum1=1111;                          //幻数
input int                  Inp_StopLoss1=40;                            //止损(点数)
input int                  Inp_TakeProfit1=60;                          //获利(点数)

//--- CenterOfGravityOSMA 指标参数
input uint                 Period_1=9;                                  //平均周期数
input uint                 SmoothPeriod1_1=3;                           //平滑周期数1
input ENUM_MA_METHOD       MA_Method_1_1=MODE_SMA;                      //平均方法1
input uint                 SmoothPeriod2_1=3;                           //平滑周期数2
input ENUM_MA_METHOD       MA_Method_2_1=MODE_SMA;                      //平均方法2
input Applied_price_       AppliedPrice1=PRICE_OPEN_;                   //使用的价格

//--- 平均速度指标的参数
input int                  Inp_Bars1=1;                                 //天数
input ENUM_APPLIED_PRICE   Price1=PRICE_CLOSE;                          //使用的价格
input double               Trend_lev1=2;                                //趋势水平

//--- 下降趋势参数
input string               Inp_Str_label2="===Downtrend parameters==="; //标签
input int                  Inp_MagicNum2=2222;                          //幻数
input int                  Inp_StopLoss2=40;                            //止损(点数)
input int                  Inp_TakeProfit2=60;                          //获利(点数)

//--- CenterOfGravityOSMA 指标参数
input uint                 Period_2=9;                                  //平均周期数
input uint                 SmoothPeriod1_2=3;                           //平滑周期数1
input ENUM_MA_METHOD       MA_Method_1_2=MODE_SMA;                      //平均方法1
input uint                 SmoothPeriod2_2=3;                           //平滑周期数2
input ENUM_MA_METHOD       MA_Method_2_2=MODE_SMA;                      //平均方法2
input Applied_price_       AppliedPrice2=PRICE_OPEN_;                   //使用的价格

//--- 平均速度指标的参数
input int                  Inp_Bars2=1;                                 //天数
input ENUM_APPLIED_PRICE   Price2=PRICE_CLOSE;                          //使用的价格
input double               Trend_lev2=2;                                //趋势水平

从代码中可以看到,inp_trend_类型变量用于选择EA操作模式,而对于uptrend(向上趋势)和downtrend(向下趋势)模式,它分别分为uptrend参数和downtrend参数。在选择两种模式时,使用两部分的参数,主要逻辑实现代码如下:

//+------------------------------------------------------------------+
//| EA交易分时函数                                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 取得计算数据

   if(!GetIndValue())
      return;

   if(Inp_Trend_type==1 && !Trade.IsOpenedByMagic(Inp_MagicNum1))
     {
      //--- 如果有买入信号,开启订单
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment);
     }
   else if(Inp_Trend_type==2 && !Trade.IsOpenedByMagic(Inp_MagicNum2))
     {
      //--- 如果有卖出信号,开启订单
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment);
     }
   else if(Inp_Trend_type==3)
     {
      //--- 如果有买入信号,开启订单
      if(BuySignal() && !Trade.IsOpenedByMagic(Inp_MagicNum1))
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment);
      //--- 如果有卖出信号,开启订单
      if(SellSignal() && !Trade.IsOpenedByMagic(Inp_MagicNum2))
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| 买入条件                                                           |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(avr_speed1[0]>Trend_lev1 && cog1[1]<cog1[0] &&(cog1[1]<0 && cog1[0]<0))?true:false;
  }
//+------------------------------------------------------------------+
//| 卖出条件                                                           |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(avr_speed2[0]>Trend_lev2 && cog2[1]>cog2[0] &&(cog2[1]>0 && cog2[0]>0))?true:false;
  }
//+------------------------------------------------------------------+
//| 取得当前指标值                                                      |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,cog1)<=0 ||
          CopyBuffer(InpInd_Handle2,0,0,2,cog2)<=0 ||
          CopyBuffer(InpInd_Handle3,0,0,2,avr_speed1)<=0 ||
          CopyBuffer(InpInd_Handle4,0,0,2,avr_speed2)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

对于上升和下降趋势的交易规则都很简单:在上升趋势上买入,在下降趋势上卖出,即跟随趋势。在这两种模式下,这些系统一起工作,独立地使用自己的输入参数-上升趋势+下降趋势。

测试交易策略

对于所选策略的测试和优化,我们可以合理地选择一个明确的上升周期作为上升模式,一个下降周期作为下降模式。所以我决定选择下面图3所示的时间段。

图3。选择测试时间段

因此,让我们总结一下以下测试设置。

  • 时间:uptree模式:2017年4月10日-2018年2月1日。下行树模式:2014年5月8日至2015年3月13日。
  • 交易品种:欧元兑美元。
  • 交易模式:无延迟。&这些都不是高频交易策略,因此延迟的影响将很小。
  • 测试:1 ohlc。&实时共享的预测试结果大致相同。
  • 首期存款:1000美元。
  • 杠杆率:1:500。
  • 服务器:MetaQuotes演示。
  • 引号:5位数。

测试和优化的目标是在策略中使用指标,以及停止和利润值。

上行趋势优化结果如下:

图4。上升趋势的测试和优化结果

下行趋势优化结果如下:

图5。下降趋势的检验与优化结果

在优化最佳参数的时间间隔有利于所选择的模型,是时候尝试这些参数的混合区间与向上和向下的趋势。这将使我们能够测试交易策略的多功能性。nbsp;

我决定选择以下时间间隔,非常适合上述要求。

图6。为混合测试选择的时间段

如图6所示,这个时间段包括向上和向下的趋势以及回滚和合并的时间段。现在让我们来看看EA在这个陌生时期的表现。

图7。逆境区间优化趋势跟踪策略的检验结果

考虑到这一趋势的测试结果遵循策略,我们可以得出以下结论:

  • 该策略在不利区间内显示出积极的结果。
  • 成功的多头交易的比例高于空头交易。
  • 此外,盈利能力和预期回报等参数表明,该策略在测试间隔通常表现出积极的势头。nbsp;

选择基于整合的策略

为了在合并市场中单独优化,我选择了Williams的百分比范围来确定超买/超卖状态。该工具将作为搜索入口点的主要索引,ADX趋势跟踪索引将作为无趋势的确认。

参数 说明
使用的指示器 威廉斯百分比范围(WPR)
使用的指示器 ADX
时间框架 H1
购买条款 海外地区的WPR指数低于-80,ADX低于阈值。
销售条款 超买区域的WPR指数(高于-20)和低于阈值的ADX。
退出条件 利润/止损

图8提供了一个基于此策略的可视化条目示例。

图8。根据合并策略的进入条件

根据选择的策略,将根据交易类型分别进行优化:在买入和卖出模式下。

//+------------------------------------------------------------------+
//| 操作模式枚举                                                       |
//+------------------------------------------------------------------+
enum Trend_type
  {
   UPTREND = 1,            //买入       
   DOWNTREND,              //卖出
   BOTH                    //同时 
  };

这样,我们就可以判断在合并条件下如何选择战略。EA代码如下:

//+------------------------------------------------------------------+
//| EA交易分时函数                                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 取得计算数据

   if(!GetIndValue())
      return;

   if(Inp_Trend_type==1 && !Trade.IsOpenedByMagic(Inp_MagicNum1))
     {
      //--- 如果有买入信号,开启订单
      if(BuySignal())
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment);
     }
   else if(Inp_Trend_type==2 && !Trade.IsOpenedByMagic(Inp_MagicNum2))
     {
      //--- 如果有卖出信号,开启订单
      if(SellSignal())
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment);
     }
   else if(Inp_Trend_type==3)
     {
      //--- 如果有买入信号,开启订单
      if(BuySignal() && !Trade.IsOpenedByMagic(Inp_MagicNum1))
         Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment);
      //--- 如果有卖出信号,开启订单
      if(SellSignal() && !Trade.IsOpenedByMagic(Inp_MagicNum2))
         Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment);
     }
  }
//+------------------------------------------------------------------+
//| 买入条件                                                           |
//+------------------------------------------------------------------+
bool BuySignal()
  {
   return(wpr1[0]<-80 && adx1[0]<Inp_FlatLevel1)?true:false;
  }
//+------------------------------------------------------------------+
//| 卖出条件                                                           |
//+------------------------------------------------------------------+
bool SellSignal()
  {
   return(wpr2[0]>=-20 && adx2[0]<Inp_FlatLevel2)?true:false;
  }
//+------------------------------------------------------------------+
//| 取得当前的指标值                                                    |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,wpr1)<=0  ||
          CopyBuffer(InpInd_Handle2,0,0,2,wpr2)<=0 || 
          CopyBuffer(InpInd_Handle3,0,0,2,adx1)<=0  ||
          CopyBuffer(InpInd_Handle4,0,0,2,adx2)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

基于合并的测试策略

与测试趋势跟踪策略类似,我们应该首先选择一个历史段进行培训,并优化选择的基于集成的策略。下图显示了测试周期:

图9。合并策略的选定时间段

一般试验条件如下:

  • 时间间隔:2015年3月13日至2017年1月1日。
  • 交易品种:欧元/美元。
  • 交易模式:无延迟。&这些都不是高频交易策略,因此延迟的影响将很小。
  • 测试:1 ohlc。&实时共享的预测试结果大致相同。
  • 首期存款:1000美元。
  • 杠杆率:1:500。
  • 服务器:MetaQuotes演示。
  • 引号:5位数。

损益参数将用于测试和优化。购买模式下的独立优化结果如下表所示。

0

图10。购买模式下基于集成的策略优化结果

ELL模式下的独立优化结果如下:

1

图11。销售模式下基于合并策略的优化结果

在使用单独的优化方法定义了两种模式的最佳参数后,是时候检查不利区间策略并了解其在新条件下的行为。作为一个实验,我们将选择已经被选择用来测试趋势跟踪策略的非合并市场部分(如图6所示)。我们在两种模式(上升趋势+下降趋势)下对趋势跟踪策略进行混合测试。

结果如下:

2

图12.基于不利区间的盘整理优化策略的测试结果

考虑到该策略是基于合并的,且测试间隔有较长的趋势移动,取得了良好的效果,并显示出盈利能力。nbsp;

组合策略

我们使用基于趋势跟踪和整合的策略作为个体优化的例子。这两种策略分为培训和优化两部分,以利于市场的发展。此外,他们的生存能力已经在未知的细分市场进行了测试,结果非常好。现在让我们来看一个策略,它将这两个策略结合在一个更宽的时间间隔内。但首先,我们应该把这两种策略结合起来。nbsp;

在代码中实现了这一策略后,立即建立了两种基于合并的趋势跟踪模式和两种模式的优化参数。

//+------------------------------------------------------------------+
//| EA 的输入参数                                                      |
//+------------------------------------------------------------------+
input string               Inp_EaComment="Universe Strategy";           //EA 注释
input double               Inp_Lot=0.01;                                //手数
input MarginMode           Inp_MMode=LOT;                               //资金管理

//--- 上升趋势参数
input string               Inp_Str_label1="===Uptrend parameters===";   //标签
input int                  Inp_MagicNum1=1111;                          //幻数
input int                  Inp_StopLoss1=50;                            //止损(点数)
input int                  Inp_TakeProfit1=55;                          //获利(点数)

//--- CenterOfGravityOSMA 指标参数
input uint                 Period_1=9;                                  //平均周期数
input uint                 SmoothPeriod1_1=3;                           //平滑周期数1
input ENUM_MA_METHOD       MA_Method_1_1=MODE_SMA;                      //平均方法1
input uint                 SmoothPeriod2_1=3;                           //平滑周期数2
input ENUM_MA_METHOD       MA_Method_2_1=MODE_SMA;                      //平均方法2
input Applied_price_       AppliedPrice1=PRICE_TRENDFOLLOW1_;           //使用的价格

//--- 平均速度指标的参数
input int                  Inp_Bars1=1;                                 //天数
input ENUM_APPLIED_PRICE   Price1=PRICE_LOW;                            //使用的价格
input double               Trend_lev1=1.6;                              //趋势水平

//--- 下降趋势参数
input string               Inp_Str_label2="===Downtrend parameters==="; //标签
input int                  Inp_MagicNum2=2222;                          //幻数
input int                  Inp_StopLoss2=40;                            //止损(点数)
input int                  Inp_TakeProfit2=70;                          //获利(点数)

//--- CenterOfGravityOSMA 指标参数
input uint                 Period_2=15;                                 //平均周期数
input uint                 SmoothPeriod1_2=3;                           //平滑周期数1
input ENUM_MA_METHOD       MA_Method_1_2=MODE_SMA;                      //平均方法1
input uint                 SmoothPeriod2_2=3;                           //平滑周期数2
input ENUM_MA_METHOD       MA_Method_2_2=MODE_SMA;                      //平均方法2
input Applied_price_       AppliedPrice2=PRICE_HIGH_;                   //使用的价格

//--- 平均速度指标的参数
input int                  Inp_Bars2=1;                                 //天数
input ENUM_APPLIED_PRICE   Price2=PRICE_WEIGHTED;                       //使用的价格
input double               Trend_lev2=1.0;                              //趋势水平


//--- Buy parameters
input string               Inp_Str_label3="===Buy parameters===";       //标签
input int                  Inp_MagicNum3=3333;                          //幻数
input int                  Inp_StopLoss3=40;                            //止损(点数)
input int                  Inp_TakeProfit3=60;                          //获利(点数)

//--- WPR indicator parameters
input int                  Inp_WPRPeriod1=11;                           //WPR 周期数
//--- ADX indicator parameters
input int                  Inp_ADXPeriod1=13;                           //ADX 周期数
input int                  Inp_FlatLevel1=25;                           // ADX 盘整水平

//--- Sell parameters
input string               Inp_Str_label4="===Sell parameters===";      //标签
input int                  Inp_MagicNum4=4444;                          //幻数
input int                  Inp_StopLoss4=30;                            //止损(点数)
input int                  Inp_TakeProfit4=30;                          //获利(点数)

//--- WPR indicator parameters
input int                  Inp_WPRPeriod2=7;                            //WPR 周期数
//--- ADX indicator parameters
input int                  Inp_ADXPeriod2=15;                           //ADX 周期数
input int                  Inp_FlatLevel2=40;                           // ADX 盘整水平

此外,由于合并的EA不受培训或优化的影响,因此取消了设置模式的选项。战略本身实施如下:

//+------------------------------------------------------------------+
//| EA交易分时函数                                                     |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 取得计算数据

   if(!GetIndValue())
      return;

//--- 如果有买入信号 (跟随趋势策略) 就开启订单
   if(BuySignal_1() && !Trade.IsOpenedByMagic(Inp_MagicNum1))
      Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss1,Inp_TakeProfit1,Inp_MagicNum1,Inp_EaComment);
//--- 如果有卖出信号(跟随趋势策略)就开启订单
   if(SellSignal_1() && !Trade.IsOpenedByMagic(Inp_MagicNum2))
      Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss2,Inp_TakeProfit2,Inp_MagicNum2,Inp_EaComment);

//--- 如果有买入信号 (盘整策略)就开启订单
   if(BuySignal_2() && !Trade.IsOpenedByMagic(Inp_MagicNum3))
      Trade.BuyPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss3,Inp_TakeProfit3,Inp_MagicNum3,Inp_EaComment);
//--- 如果有卖出信号 (盘整策略) 就开启订单
   if(SellSignal_2() && !Trade.IsOpenedByMagic(Inp_MagicNum4))
      Trade.SellPositionOpen(Symbol(),Inp_Lot,Inp_StopLoss4,Inp_TakeProfit4,Inp_MagicNum4,Inp_EaComment);
  }
//+------------------------------------------------------------------+
//| 买入条件 (跟随趋势策略)                                              |
//+------------------------------------------------------------------+
bool BuySignal_1()
  {
   return(avr_speed1[0]>Trend_lev1 && cog1[1]<cog1[0] &&(cog1[1]<0 && cog1[0]<0))?true:false;
  }
//+------------------------------------------------------------------+
//| 卖出条件 (跟随趋势策略)                                              |
//+------------------------------------------------------------------+
bool SellSignal_1()
  {
   return(avr_speed2[0]>Trend_lev2 && cog2[1]>cog2[0] &&(cog2[1]>0 && cog2[0]>0))?true:false;
  }
//+------------------------------------------------------------------+
//| 买入条件 (基于盘整策略)                                              |
//+------------------------------------------------------------------+
bool BuySignal_2()
  {
   return(wpr1[0]<-80 && adx1[0]<Inp_FlatLevel1)?true:false;
  }
//+------------------------------------------------------------------+
//| 卖出条件 (基于盘整策略)                                              |
//+------------------------------------------------------------------+
bool SellSignal_2()
  {
   return(wpr2[0]>=-20 && adx2[0]<Inp_FlatLevel2)?true:false;
  }
//+------------------------------------------------------------------+
//| 取得当前指标值                                                      |
//+------------------------------------------------------------------+
bool GetIndValue()
  {
   return(CopyBuffer(InpInd_Handle1,0,0,2,cog1)<=0       ||
          CopyBuffer(InpInd_Handle2,0,0,2,cog2)<=0       ||
          CopyBuffer(InpInd_Handle3,0,0,2,avr_speed1)<=0 ||
          CopyBuffer(InpInd_Handle4,0,0,2,avr_speed2)<=0 ||
          CopyBuffer(InpInd_Handle5,0,0,2,wpr1)<=0       ||
          CopyBuffer(InpInd_Handle6,0,0,2,wpr2)<=0       ||
          CopyBuffer(InpInd_Handle7,0,0,2,adx1)<=0       ||
          CopyBuffer(InpInd_Handle8,0,0,2,adx2)<=0
          )?false:true;
  }
//+------------------------------------------------------------------+

这两种策略的四种模式彼此独立工作。培训后,他们有自己的参数集,不会以任何方式相互交叉。为了测试,我决定使用更广泛的范围-过去三年。所有试验条件列表如下:

  • 时间:2015年1月1日至2018年11月30日。
  • 交易品种:欧元/美元。
  • 交易模式:无延迟。&这些都不是高频交易策略,因此延迟的影响将很小。
  • 测试:1 ohlc。&实时共享的预测试结果大致相同。
  • 首期存款:1000美元。
  • 杠杆率:1:500。
  • 服务器:MetaQuotes演示。
  • 引号:5位数。

试验结果如下:

3

图13。综合策略测试结果

没有进行新的参数优化。参数取自优势区间单次优化过程中确定的最优值。考虑到这四种独立的策略在常见的不利条件下运行,结果是积极的。

总结

通过比较两种策略在上升趋势、下降趋势和巩固条件下的测试结果,得出以下结论:

  • 对于所测试的策略,分离优化方法显示出正动态。
  • 结果表明,分离优化(或更准确地说,分离训练)方法在有利的市场区间内是非常有效的。
  • 即使在不适合策略的时间间隔进行测试(根据趋势跟踪时间间隔测试经过培训的整合策略),也显示出积极的动态。
  • 由两种训练策略组成的组合策略的测试是对两种系统生存能力的双重检验。这两种策略的工作时间间隔都很长,没有修改、优化和拟合。此外,他们从一开始就没有被选为单一交易系统的模块。

考虑到我选择了随机交易系统进行测试,并通过个体优化对其进行改进,最后检查了最不利的历史区间,研究结果是肯定的。结果表明,分离优化方法具有良好的效率,值得在交易系统的开发和配置中应用。

结论

附加的存档包含所有列出的文件,这些文件位于相应的文件夹中。要执行正确的操作,应将mql5文件夹保存到终端的根目录中。

本文使用的步骤如下:

&名称 说明
1 趋势策略.mq5 E &基于趋势跟踪策略的EA。
2 扁平策略.mq5 每个 &基于合并策略的EA。
通用战略MQL5 EA和NBSP; 基于组合策略的EA。
MQH 图书馆 事务函数类。
5 平均速度.mq5 指数 &趋势跟踪策略中使用的平均价格速度指标。
重心osma.mq5 指数 &趋势跟踪策略的中心指标。

本文由MetaQuotes Software Corp.翻译自俄语原文
,网址为https://www.mql5.com/ru/articles/5427。

附加文件下载zip separate_optimization.zip(101.79 kb)

 

 


MyFxtop迈投(www.myfxtop.com)-靠谱的外汇跟单社区,免费跟随高手做交易!

 

免责声明:本文系转载自网络,如有侵犯,请联系我们立即删除,另:本文仅代表作者个人观点,与迈投财经(www.myfxtop.cn)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。

風險提示

MyFxtops邁投所列信息僅供參考,不構成投資建議,也不代表任何形式的推薦或者誘導行為。MyFxtops邁投非外匯經紀商,不接觸妳的任何資金。 MYFXTOPS不保證客戶盈利,不承擔任何責任。從事外彙和差價合約等金融產品的槓桿交易具有高風險,損失有可能超過本金,請量力而行,入市前需充分了解潛在的風險。過去的交易成績並不代表以後的交易成績。依據各地區法律法規,MyFxtops邁投不向中國大陸、美國、加拿大、朝鮮居民提供服務。

邁投公眾號

聯繫我們

客服QQ:981617007
Email: service@myfxtop.com

MyFxtops 邁投