当我尝试为我的EA建立指标(RSI线的SMA)时,“数组超出范围”

时间:2019-05-08 04:53:53

标签: arrays mql4 indicator

我想请些帮助:我想将规则集成到我的EA中,但是我无法正确地创建阵列。规则将是“如果较高TF上RSI的SMA高于/低于blabla。 ..“

这是我的代码:

      double MA;  
   double RSIBuf[];
   double MaBuf[];

ArrayResize(RSIBuf,0);
int counted_bars=IndicatorCounted();
int limit = Bars-counted_bars-1;
for(int i=limit; i>=0; i--)
{
RSIBuf[i] = (iRSI(NULL,higherTF,RSIPeriod,0,i)); 
MaBuf[i] = iMAOnArray(RSIBuf,higherTF,RSI_SMA,0,0,i);
}
MA = MaBuf[0];

...(无关的代码行)

direction Trend=NEUTRAL;

if(MA>RSI_Up )        Trend=UP;  

MT4在RSIBuf []行上表示其错误

我在哪里弄错了?

非常感谢您的努力

wicha

2 个答案:

答案 0 :(得分:0)

ArrayResize(RSIBuf,0)为数组RSIBuf []分配了0的大小,这是没有意义的,因为该数组的大小必须为> 0,在您的情况下为至少= limit。

因此在循环中,当您尝试为RSIBuf [i]分配值时,超出了范围,因为i大于0(i以i = limit开头)

根据MQL4文档,第二个参数应为new_size,然后0是无效值:

int  ArrayResize(
   void&  array[],              // array passed by reference
   int    new_size,             // new array size
   int    reserve_size=0        // reserve size value (excess)
   );

答案 1 :(得分:0)

通常最好通过时间序列访问来递增和递增计数,而不是递减。 条[0]是当前条,条[1]是上一条,依此类推。该视频完美地说明了这一点。 https://www.youtube.com/watch?v=JQgfm4v6dhs