错误、漏洞、问题 - 页 1190

 
对不起,这是在MT4中
 
Luckhuman:
对不起,这是在MT4中。
试着添加#property strict指令。也许一些错误会被写在日志中。
 
Luckhuman:
对不起,这是在MT4中
不幸的是MetaTrader 4不支持CopySpread()函数(在帮助中出现了错误)。
 
Automated-Trading:
不幸的是MetaTrader 4不支持CopySpread()函数(在帮助中出现了错误)。
MT4支持多少个指标缓冲区?我只绑定了17个缓冲区
 
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <Object.mqh>

class CDoubleDynArray : public CObject
  {
public:
   double            Buffer[];

                     CDoubleDynArray(void){}
                    ~CDoubleDynArray(void){}
  };

CDoubleDynArray *buffers[];

int OnInit()
  {
//--- indicator buffers mapping
   ArrayResize(buffers,24);
   int i;
   for(i=0;i<ArraySize(buffers);i++)
      buffers[i]=new CDoubleDynArray;

   IndicatorBuffers(ArraySize(buffers));
   SetIndexBuffer(0,buffers[0].Buffer);
   for(i=1;i<ArraySize(buffers);i++)
     {
      if(!SetIndexBuffer(i,buffers[i].Buffer,INDICATOR_CALCULATIONS))
         Print(i," ",GetLastError());
      else
         Print(i," ",ArraySize(buffers[i].Buffer));
     }
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   IndicatorBuffers(1);
   for(int i=1;i<ArraySize(buffers);i++)
     {
      delete buffers[i];
      buffers[i]=NULL;
     }
   delete buffers[0]; 
   ArrayResize(buffers,0); 
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


 
Luckhuman:


你在代码中哪里可以看到只有17个? 你在创造24个,不是吗?

让我看看日志上写的是什么。

 
Luckhuman:
MT4支持多少个指标缓冲区?我只绑定了17个缓冲区

在MT4中,有512个缓冲区可用。

缓冲区的数量不能超过512,并且要小于 indicator_buffers 属性中指定的值。 如果你的自定义指标需要额外的缓冲区进行计数,你应该使用这个函数来指定缓冲区的总数。

在这个例子中,你需要添加一行。

#property indicator_buffers 24
IndicatorBuffers - Документация на MQL4
  • docs.mql4.com
IndicatorBuffers - Документация на MQL4
 
Automated-Trading:


在这个例子中,你需要添加一行。

我们能不能像MT5那样,对缺失的属性地块发出警告?
 
Automated-Trading:

在MT4中,有512个缓冲区可用。

在这个例子中,我们需要添加一行。

在这一行,我指定了缓冲区的数量

IndicatorBuffers(ArraySize(buffers));

下面是一个结果的屏幕截图

 
Automated-Trading:

在MT4中,有512个缓冲区可用。

应该在例子中添加一行。

#property indicator_buffers 24

有了这句话,就可以了。但随后IndicatorBuffers()函数就不起作用了,因为它是代码中使用的数值为24的那一个。

请原谅我。我已将代码削减为一个测试实例,从一个模板指标开始。在指标中,有以下一行

#property indicator_buffers 1
#property indicator_plots   1
原因: