文章 "自适应交易系统以及它们在 MetaTrader 5 客户端中的运用" - 页 2

 

将文档翻译成英文是否很麻烦?我一直很欣赏好的文档。很棒的文章,感谢你的贡献

 
Lugner:

将文档翻译成英文是否很麻烦?我一直很欣赏好的文档。很好的文章,感谢您的贡献

我们将尽快翻译所附文档。
 

要使用输入参数(变量),只需在类声明之前声明它们,并按照类(包含)的调用路径进行操作即可。

类(包括)的调用路径。

 
Lugner:

将文档翻译成英文是否很麻烦?我一直很欣赏好的文档。很棒的文章,感谢您的贡献

谢谢。文档已经翻译完毕。
 
AM2:

在 CAdaptiveStrategy 类中,我尝试只交易随机指标:

我禁用了其他策略,但测试器中的图表还是一样。据我所知,这是策略连接和断开的地方吗?

是的,策略在 CAdaptiveStrategy::Expert_OnInit() 函数中连接。为了方便起见,最好使用 Expert Advisor 的调试版本,它增加了将结果保存到文件的功能。通过文件 direction_res.txt,您可以知道在实际交易中使用了哪些策略的哪些信号。

使用由指定的 5 种随机指标组成的自适应策略(欧元兑美元 H1,测试时间为 2010 年初至 2010 年 9 月 1 日)时,会得到以下结果:




 

这可能是我很久很久以来读到的关于程序化/机器人交易的最发人深省的文章。非常感谢!

基于这种新的热情,我对 Eugene 的工作进行了一些调整。[抱歉--至少我也会分享想法 ;-) ]。

我改编了一个现有的 EA(不幸的是,还不是面向对象的),用于

1.多个时间尺度:M1, M3, M5, M10, M20, M30, H1
2.多个快速 MA:3,5,7,9,11
3.多个慢速 MA:17、27、37、47 等 97、107、117 等

在 foreach(周期)-foreach(快速)-foreach(慢速)循环中附加到 M1 tick。每个刻度都会计算是否需要检查 "虚拟 "交易,并在必要时 "执行",保持逻辑/虚拟盈亏平衡。

结果非常令人惊喜,也非常积极...

现在需要优化的地方包括删除短时间段(如 M1、M3)[因为更长的时间段最终会'赢'],以及确定多久清除一次 "运行中的盈亏 "计数器,以便检测 "快速改进 "的参数 集。

我还必须将我最喜欢的交易 EA 与这项工作连接起来(添加 ADX/RSI/MACD/RVI 检查等),这样它就能始终使用最佳的、获胜的快速/慢速 MA 对,并具有良好的市场、资金、头寸和交易管理逻辑。

再次感谢、

T.

 

量子、

显然,如果我想添加更多的买入和卖出条件(或买入和卖出条件对/组合),除了仍然有天赋的

if(buy_condition_1 && buy_condition_2) new_state=SIGNAL_OPEN_LONG;
if(sell_condition_1 && sell_condition_2) new_state=SIGNAL_OPEN_SHORT;

CStrategyMA.mqh.中的示例外,显然还可以

以触发其他机会

new_state=SIGNAL_CLOSE_SHORT;
//和 
new_state=SIGNAL_CLOSE_LONG;

在 CStrategyMA.mqh 文件中添加这些组合没有逻辑意义,但对于每个新条件或条件对/组合

的条件,都应专用于另一个 include/class 文件、

对吗?

我的意思是,举例来说,如果我想添加这些条件:

// 购买条件 3:全新 MA 
   bool buy_condition_3=(m_values[0+5]>m_values[1+7]) && (m_values[1+5]>m_values[2+7]);
// 买入条件 4:之前的 OPEN 价格高于 MA
   bool buy_condition_4=(p_open>m_values[1]);

// 出售条件 3:新 MA 
   bool sell_condition_3=(m_values[0+5]<m_values[1+7]) && (m_values[1+5]<m_values[2+7]);
// 买入条件 4:之前的 OPEN 价格低于 MA
   bool sell_condition_4=(p_open<m_values[1]);

  if(buy_condition_3  &&  buy_condition_4) new_state=SIGNAL_OPEN_LONG;
   if(sell_condition_3 && sell_condition_4) new_state=SIGNAL_OPEN_SHORT;

   if((GetSignalState()==SIGNAL_OPEN_SHORT) && (buy_condition_3 || buy_condition_4)) new_state=SIGNAL_CLOSE_SHORT;
   if((GetSignalState()==SIGNAL_OPEN_LONG) && (sell_condition_3 || sell_condition_4)) new_state=SIGNAL_CLOSE_LONG;

可以添加到 CStrategyMA.mqh中的 子类中,而不会影响自适应系统的核心系统。

自适应系统的核心系统,换句话说,只要继续正确地将这个包含文件 CStrategyMA.mqh 与 CAdaptiveStrategy.mqh

和 CSampleStrategy.mqh 的互动,同时考虑到逻辑核心中的新条件(示例中的 3 和 4)?

的逻辑核心?

或者,对于条件 3 和 4,我应该重写并添加一个文件,例如 CStrategyMA3and4.mqh?

是否有可能在同一个 CStrategyMA.mqh 文件中添加这些条件并使其正常工作?

也许我自己就能回答,而且我有点笨,但我也想征求您的意见。

谢谢

 
Automated-Trading:

是的,策略在 CAdaptiveStrategy::Expert_OnInit() 函数中连接。为方便起见,最好使用 Expert Advisor 的调试版本,因为该版本增加了将结果保存到文件的功能。您可以通过 Direction_res.txt 文件了解在实际交易中使用了哪些策略信号。

使用由上述 5 种随机指标组成的自适应策略(欧元兑美元 H1,测试时间为 2010 年初至 2010 年 9 月 1 日),结果如下:

从图表上看,您又得到了一个简单的优化模型,即使其中部分优化是自动进行的,但自适应模型是指在策略运行过程中,有一个计算块可以根据市场调整进入和退出,而初始化中的参数根本不重要。在这种情况下,只有相对于平衡线的净值线将被均衡化,因为在获利平仓的 分布发生变化的情况下,这种系统仍将重新计算新值并确定新的获利区域,因此将重建获利参数并保留净值订单组:
附加的文件:
 

亲爱的 Forexistence、

您已经回答了您的问题:)

您是对的,如果您想修改交易条件,有两种方法,一种是在策略 CStrategyMA 中添加新条件(但我们将得到与初始策略不同的新策略),另一种方法是创建一个新类(例如 CStrategyMA34),并在其中添加额外的买入/卖出条件。

当然,您应该在新策略中包含文件,并将这些新策略添加到 CAdaptiveStrategy 类的 Expert_OnInit函数 中:

#include <CStrategyMA3and4.mqh>

int CAdaptiveStrategy::Expert_OnInit()
{
.....
--- adding new strategies
   for(int i=0; i<10; i++)
     {
      CStrategyMA34 *t_StrategyMA34;
      t_StrategyMA34=new CStrategyMA34;
      if(t_StrategyMA34==NULL)
        {
         delete m_all_strategies;
         Print("Error of creation of object of the CStrategy3and4 type");
         return(-1);
        }
      int period=3+i*10;
      t_StrategyMA34.Initialization(period,true);
      t_StrategyMA34.SetStrategyInfo(_Symbol,"[MA34_"+IntegerToString(period)+"]",period,"Moving Averages with new conditions "+IntegerToString(period));
      m_all_strategies.Add(t_StrategyMA34);
     }
.....
}

第二种方法更好,您可以添加许多策略及其变体。

没有必要删除 CStrategyMA 类实例(如果有的话),我们不会在它们的沙盒中查看它们的结果。

市场将帮助我们确定 m_all_strategies 中包含的策略列表中的最佳策略。

 
dasmen:
从图表中可以看出,您所使用的又是一个优化模型,即使其中部分优化是自动进行的,但调整模型是指在策略运行过程中,有一个计算模块可以根据市场调整进入和退出,而初始化中的参数根本不重要。在这种情况下,只有相对于平衡线的净值线将被均衡化,因为在盈利平仓分配发生变化的情况下 - 这种系统仍将重新计算新值并确定新的盈利区域,因此将重建盈利参数并保留净值订单组:

这篇文章使用了数学中的自适应策略概念和应用,实际上是一种实施管理 选择的系统。