不适合MT开发者!用什么来代替INIT_PARAMETERS_INCORRECT? - 页 10

 
Aleksey Vyazmikin:

不正确的参数一般有3个原因被禁用。

1.研究区域不感兴趣(例如,排除一些时间段,是最容易理解的选择)。

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

完全正确。

 
Сергей Таболин:

那么,在不包括 "无效 "参数的情况下,你如何组织例子中的MA优化?

好吧,我同意,我没有仔细看。为了优化另一个参数,切出了一个无效的缺口

 
TheXpert:

好吧,我同意,我没有仔细看。为了优化,带出另一个参数,把无效的间隙剪掉。

你能给我一个例子吗?

 
Сергей Таболин:

我可以给你举个例子吗?

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

我同意。时间框架的情况如何?

 
Сергей Таболин:

我同意。那么在时限方面该怎么做呢?

同样的--将连续区间内的int转换为时间框架。 例如,用所有TF值创建一个数组,并通过数组索引 进行优化

 
TheXpert:

例如,创建一个包含所有TF值的数组,并通过数组索引 进行优化

嗯,这在我看来是一个拐杖...也许我错了,但这几乎是我的起始例子所要做的事情。只是在这种情况下,你不需要事先将整个阵列转储到一个文件中......

 

在OnTester()中,出现了一个想法,在遗传优化过程中筛选出 "无效的 "参数。

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

事实证明,如果不干扰遗传学,可能看不到INIT_PARAMETERS_INCORRECT的结果。

这里出现了另一个问题:在这种情况下,我们是否可以在利润上获得 "深度减负"?

 

我的方法是:创建一个单独的参数,并根据其值替换其他值。

一个简单的例子(2周前)。

有时间框架参数:TF_UP(高级)和TF_DOWN(初级),高级必须总是大于初级,在相反的情况下,input_incorrect会出来。在测试器中,有很多无效的结果和遗传学 "白忙活"(尽管它很快速)。因此,我删除了这2个参数,并创建了一个新的参数,其类型如下所述,并只对其进行优化,在OnInit函数 中已经对其他2个参数进行了替换,取决于这个参数。

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};