массив вне диапазона, когда я пытался встроить индикатор (SMA линии RSI) в свой советник

Я хотел бы попросить небольшую помощь: я хочу интегрировать правило в свой советник, но я не могу правильно создать массив .. Правило было бы «если SMA RSI на более высоком TF выше / ниже 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


person wicha    schedule 08.05.2019    source источник


Ответы (2)


Строка ArrayResize(RSIBuf,0) присваивает размер 0 массиву RSIBuf [], это не имеет смысла, поскольку массив должен иметь размер> 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)
   );
person J_P    schedule 10.05.2019

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

person Community    schedule 15.05.2019