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

 
Maksym Mudrakov:

错误可能出在小数点后的数字上。


这不是错误,数据没有在历史上计算,但从符号创建的 那一刻起,一切都在正确计算,我怀疑历史计算功能没有正常工作,也就是说,这是一个错误。
 
下午好,先生们。

我有这样一个问题:我刚刚开始使用MT5,我正在从MT4转移我的指标,我遇到了一些问题。我需要在一行中使用iMA,并获得一个特定指数的值。我在论坛上看到消息,使用iMAGet功能(以及类似的iATRGet等)。如我所见,这些函数不再起作用,那么这个问题:如何优雅地获得一个单一的iMA值?我试着用上述函数来做这件事。

NormalizeDouble(iMAGet(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW), shift), Digits())

我知道不检查就不好,但我必须移植旧的MT4代码,我想不出有什么其他方法可以使它更简单(我有几十个向导,他们都在不同的时间段工作)。我不能在oninit中初始化向导,因为代码有三个步骤嵌套,我不能在没有麻烦的情况下调用需要的向导。因此,简而言之,我的目标是要把

这个:

NormalizeDouble(iMA(Symbol(), timeframe, signal_period, 0, MODE_LWMA, PRICE_LOW, shift), Digits())

变成在MT5上工作的东西,没有任何激烈的姿态。

 
Olga Miakhovich:
下午好,先生们。

我有一个问题,我刚刚开始使用MT5,当我从MT4转移我的指标时,我遇到了问题。我需要在一行中使用iMA,并获得一个特定指数的值。我在论坛上看到消息,使用iMAGet功能(以及类似的iATRGet等)。如我所见,这些函数不再起作用,那么这个问题:如何优雅地获得一个单一的iMA值?我试着用上述函数来做这件事


我知道不检查就不好,但我必须移植旧的MT4代码,我想不出有什么其他方法可以使它更简单(我有几十个向导,他们都在不同的时间段工作)。我不能在oninit中初始化向导,因为代码有三个步骤嵌套,我不能在没有麻烦的情况下调用需要的向导。因此,简而言之,我的目标是要把

这个:

变成在MT5上工作的东西,没有任何激烈的姿态。

看看kodobase中的例子,比如这个:https://www.mql5.com/ru/code/27161

基本上:在OnInit()中创建一个指标句柄。

handle_iMA_High=iMA(Symbol(),Period(),Inp_MA_ma_period,Inp_MA_ma_shift,
                       Inp_MA_ma_method,PRICE_HIGH);
//--- if the handle is not created
   if(handle_iMA_High==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iMA indicator (\"Price High\") for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }

然后,你将必要的元素复制到剪贴板上,并对其进行处理。

if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
     {
      //--- if the copying fails, tell the error code
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());

https://www.mql5.com/ru/docs/series/copybuffer

 
Vitaly Muzichenko:

在kodobase中查找例子,例如这个例子:https://www.mql5.com/ru/code/27161

基本上:在OnInit()中创建指标手柄。

然后你把必要的元素复制到缓冲区,并对其进行处理。

https://www.mql5.com/ru/docs/series/copybuffer

正如我已经写过的,在OnInit中的初始化对我来说不合适。我必须同时处理所有时间段的工作,我必须初始化每个TF中的所有掩码,然后在代码中使用一些值,做这样的事情。

if(timeframe = PERIOD_M5)
        CopyBuffer(handle_ma_m5, ...)
if(timeframe = PERIOD_M15)
        CopyBuffer(handle_ma_m15, ...)
...

因此,每一个腕带的调用都是如此。代码就会变成混乱的腹泻。

而每一个新的酒吧都需要以某种方式来更新它?

有没有一个类似于CopyBuffer的函数,但复制的不是一个数组,而是按要求的索引复制一个值?

 
Olga Miakhovich:

正如我已经写过的,在OnInit中的初始化对来说不合适。我必须同时处理所有时间段的工作,我必须初始化每个TF中的所有掩码,然后在代码中使用一些值,做这样的事情。

因此,每一个腕带的调用都是如此。

,代码就会变成纠缠不清的腹泻。而每一个新酒吧都需要某种方式来更新它?

有没有一个类似CopyBuffer的函数,但不是复制一个数组,而是按正确的索引复制一个单值?

OnInit()中制作一个手柄数组,并对其进行处理。

为了方便使用,将CopyBuffer(...)放入函数中,给它输入指标句柄和数组中的必要索引,函数将返回价格。

 
Vitaly Muzichenko:

OnInit()中制作一个手柄数组,并对其进行处理。

为了方便使用,将CopyBuffer(...)放入一个函数中,从数组中传递指标句柄和所需的索引,该函数将返回价格。

虽然很不方便)

 
Olga Miakhovich:

(虽然很尴尬))

更像是不舒服的))))

 
Vitaly Muzichenko:

OnInit()中制作一个手柄数组,并对其进行处理。

为了便于使用,将CopyBuffer(...)放入函数中,在那里你输入指标手柄和数组中的所需索引,函数将返回价格。

CopyBuffer的另一个问题是,它需要为自己提供一个指示器缓冲区。我总共有一百个指标,它们被用于计算以得到一个单一的指标。我需要创建一百个缓冲区来存储这些值吗?

 
Olga Miakhovich:

CopyBuffer的另一个问题是,它必然要求自己有一个指标缓冲区。我总共有不到一百个指标,它们被用于计算以得到一个单一的指标。我需要创建一百个缓冲区来存储这些值吗?

在scriptor的CodeBase中寻找代码实例--一切都在那里。
实际上,你可以计算任何一个条形图的MA。
 
我需要一个例子来解决以下问题:图表中有一个指标¹1,有十几个图形缓冲区(不是波浪帽和其他东西),地下室指标¹2应该从指标¹1中获取一些缓冲区,并在地下室中已经显示为六边形图(无论如何)。预先感谢你,为MT5。