初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1218

 
Pineapple88:

修好了,一切似乎都正常了!)

我把两个MA指标转移到OnInit函数

我的理解是,我们只在OnInit函数中创建指标句柄,在OnTick函数中对数组进行所有其他操作,并在每个tick上检查?

是的,我们在OnInit中创建指标句柄。而其他所有的操作都在OnTick中实现。

 
Vladimir Karputov:

是的,指标句柄是在OnInit中创建的。而其余的工作则在OnTick中实现。

明白了,谢谢!

 
在MT5中优化EA是一件必要且有用的事情。但问题是:对于EA的运营来说,什么时期是保证其未来收支平衡的最佳参数?据认为,每个月都必须进行优化。但优化保证存款至少在未来一个月内不会损失?
 
BORIS GOLICIN:
在MT5中优化EA是一件必要且有用的事情。但问题是:对于EA的运营来说,什么时期是保证其未来收支平衡的最佳参数?据认为,每个月都必须进行优化。但优化保证存款至少在未来一个月内不会损失?

为银行业提供担保 )

 
BORIS GOLICIN:
在MT5中优化专家顾问是有用和必要的。但问题是:在什么时期,专家的最佳参数能保证它在未来实现收支平衡?据认为,每个月都必须进行优化。但优化保证存款至少在未来一个月内不会损失?

在我看来,优化是没有用的。它只适用于估计你在某一时期的损失有多大,以及你可以获得多少利润。此外,市场形势随时都会发生变化,所有的优化都会付诸东流。为了使策略在自动模式下工作得更久,你不应该贪婪。不要试图从市场中榨取最大的利润。经纪公司不会让它。

 

以下是我在互联网上能够找到的关于优化的内容。

假设我们有一大块15年(至少10年)的历史,比如从2000年到2015年。我们将这一作品分为以下几个时期。2000-2003年是我们的后向测试阶段,2003-2012年是优化阶段,2012-2015年是前向测试。在优化之后,我们通过选择10-20个最成功的集合来进行通常的正向测试。之后,我们在后向测试中运行这些选定的集。其结果应与正向测试中获得的结果相似。那些通过测试的集子被保存下来,以便进一步比较。然后,我们对整个历史块中剩余的集进行测试,并选择显示出比其他集更好的结果。结果,我们只剩下一套最合适的设置。
我们如何在第一阶段--正向测试--选择成套的产品?非常简单:在这个阶段对我们来说最重要的是平衡曲线的类型。理想情况下,它应该是一条从左下角到右上角的直线。也就是说,连续看所有最好的套装是没有意义的--它们往往是几乎相同的。

 

大家下午好!

当访问ATR指标处理程序时,前30秒给出了奇怪的数值。

搞不清楚是什么原因造成的?

int ATRdefinition = 0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ATRdefinition = iATR(_Symbol,_Period,14);
   if(ATRdefinition == INVALID_HANDLE)
     {
      Print("Ошибка создания Хендла");
     }

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   string signal = "";

   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);

   double ATRarray[];
   ArraySetAsSeries(ATRarray,true);

   CopyBuffer(ATRdefinition,0,0,3,ATRarray);
   
   double ATRValue = NormalizeDouble(ATRarray[0],5);

   Print("ATRVALUE: ",ATRValue);
  }
附加的文件:
ATR.png  51 kb
 
Pineapple88:

大家好!

当访问ATR指标处理程序时,前30秒给出了奇怪的数值。

我不明白这是什么原因?

你是否检查指标是否准备好了?

//--- determine the number of values calculated in the indicator 
   int calculated=BarsCalculated(handle); 

(插入你的手柄而不是'手柄')

 

事实证明,这个数据(402082)并不足以计算出指标

我认为,如果没有足够的数据进行计算,BarsCalculated 函数应该给出一个错误(-1)。

附加的文件:
ATR2.png  21 kb
 
Pineapple88:

事实证明,这个数据(402082)并不足以计算出指标

我认为,如果没有足够的数据进行计算,BarsCalculated 函数应该给出一个错误(-1)。

看来,终端继续抽出历史记录--分别是,指标一直在重新计算。或者,另一种选择:在你的终端中,你设置了非常多的条形图来显示,而你的电脑非常弱。


已添加。

在MetaTrader 5 x64 build 2470上进行了检查,"显示条形图 "设置为100000--历史记录已下载。该代码工作得非常好。