"массив вне диапазона", когда я пытался встроить индикатор (SMA линии RSI) в мой советник - PullRequest
0 голосов
/ 08 мая 2019

Я хотел бы попросить немного помощи: я хочу интегрировать правило в мой советник, но я не могу правильно создать массив. Правило было бы «если SMA RSI на более высоком TF выше / ниже блабла»... "

вот мой код:

      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 ]

2 голосов
/ 11 мая 2019

Строка ArrayResize(RSIBuf,0) назначает размер 0 для массива RSIBuf [], это не имеет смысла, поскольку массив должен иметь размер> 0, а в вашем случае как минимум = limit.

Таким образом, в цикле при попытке присвоить значение RSIBuf [i] выходит за пределы диапазона, поскольку i больше 0 (я начинаю с 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)
   );
0 голосов
/ 15 мая 2019

обычно лучше увеличивать и считать с помощью доступа к временным рядам, а не уменьшать. Bar [0] - текущий бар, Bar [1] - предыдущий бар и т. Д. Это видео объясняет это прекрасно. https://www.youtube.com/watch?v=JQgfm4v6dhs

...