到底发生了什么事? - 页 2

 

我有一个不同的技巧。顾问在每个小时的开盘时放出卖盘。对于欧元,它可以正常工作,但对于自定义符号,不清楚如何

在视觉模式下,一些蜡烛图丢失了


附加的文件:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

这又是关于测试仪/优化器...

注意到优化和单一测试的结果存在差异。重新启动了终端,改变了设置(以确定)。开始优化。

进行了一次测试...

怎么可能呢?这些胡言乱语从何而来?

这也是同样的方式。在优化过程之间,变量并不总是或不是全部按照单次优化前的方式进行初始化。我开始初始化一切,问题就消失了。

另一次,我有一个类似的问题,因为iSAR,在最小的步骤。

 

一位客户遇到了一个问题。他的专家顾问在测试器中进行测试并给出结果,但在优化器中所有的运行都是空的。

他的专家顾问在开仓交易方面的算法是基于从按钮上读出的标题,根据情况而改变。由于图形对象在优化过程中不被渲染,这个请求总是导致一个负面的结果。

如果你的专家顾问的算法使用图形对象的数据,测试和优化之间也会有明显的差异。

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


怎么说呢?两者都是一样的。怎么会有区别呢?特别是由于几乎所有的数据都是在循环中初始化的。如果那里的东西没有被初始化,你会得到一个错误。


如果你可以的话--请详细说明。我希望看到循环中的初始化。我要把它给我的孙女看。

 
永远不要再这样做。
 
Алексей Тарабанов:

如果可能,请提供更多细节。我希望看到循环中的初始化。我要把它给我的孙女看。

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

或者更好的是,你的孙女不会理解其中的含义。

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
你只需要忘记在你的代码中初始化一些东西,就会有区别。检查代码。

再次检查了所有东西--所有变量都被初始化了。

@Andrey Kaunov, 谢谢,但我根本不使用任何图形对象。

阿列克谢-塔拉巴诺夫

如果你可以的话--请详细说明。我希望看到循环中的初始化。我要把它给我的孙女看。

为了上帝的爱 ))))我做得有点过头了--当然不是全部,但只有指标手柄 ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

现在进入正题。

彻底清除了所有的日志和缓存。

启动编辑器,重新编译专家顾问。

打开了终端。

开始进行遗传优化。

等待着...


运行一个单一的测试。

我检查参数是否正确--它们被正确传递。

我打开回溯测试标签。

利润 - 697 / 247

交易 - 44 / 56。

我现在要收集日志,并附上它们。

附加的文件:
mt5logs.zip  288 kb
 

查阅代码,并试图弄清楚在优化范围内的事务会发生什么,并进行一次走查。

取消打印,自己放在一个文件里。

这是关于你的程序内部的逻辑。除了你,没有人可以看到,因此不会有任何帮助。

 
Renat Fatkhullin:

查阅代码,并试图弄清楚在优化范围内的事务会发生什么,并进行一次走查。

取消打印,自己放在一个文件里。

这是关于你的程序内部的逻辑。除了你,没有人可以看到,因此不会有任何帮助。

雷纳特,谢谢你。但请解释一下,谁不知道优化器中的2*2+2*3和单通道的区别?至少给我一个提示,到底哪里可能存在差异?

好吧,既然你提到了,请告诉我在哪里以及如何找到策略测试器中的EA和真实账户 中的差异。

我,也许是出于我自己的愚蠢,总是认为写好的代码(无论它是否有错误,无论它是否被优化),是被编译过的,因此,无论是在优化器中,还是在测试器中,还是在真正的账户上,它都应该同样工作......

那么,站在一个普通程序员的立场上--在这三种状态下,我们应该在哪里、如何以及通过什么方式来寻找一个(编译的)代码在执行中的任何不明确的差异?

我,作为一个用户,只看到一个可执行文件在优化器和测试器中的工作方式不一样,这意味着在现实生活中,它的工作方式也是一样的 .....


我想到了一个问题,如果你在测试一个EA,而它是...好吧,这不是好事。如果我用它来做真实的交易呢?如果它是圣杯呢?))))