使用iMAonArray时“阵列超出范围”

时间:2019-05-05 11:22:14

标签: arrays mql4

我想请些帮助:我想将规则集成到我的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

1 个答案:

答案 0 :(得分:0)

您说的是EA,但您使用的是指标代码。

在指标中,您希望将缓冲区声明为缓冲区:

IndicatorBuffers(2);    //Allocate memory for buffers

double RSIBuf[];   //indicator buffers
double MaBuf[];

// Bind the array and allocated memory to an actual double-array dynamic buffer
SetIndexBuffer(0, RSIBuf);
SetIndexBuffer(1, MaBuf);

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];

如果它在EA中,则必须提前分配足够的内存,如下所示:

int maxBars = TerminalInfoInteger(TERMINAL_MAXBARS);
double RSIBuf[maxBars];
double MaBuf[maxBar];

然后您照常进行。