Потому что проверка в корне неверная. Допустим, Bars вернула 1000, а cb тоже 1000. Затем в цикле на первой итерации i получает значение 1000. В первом же условии тела цикла:
сразу два выхода за пределы массива: обращение к бару с индексом 1000 и с индексом 1001. Ведь если на графике 1000 баров, то первый бар имеет индекс 0, а последний - 999.
Дальше по телу цикла идет обращение к еще более далеким барам а истории:
Все это нужно учесть при изначальной проверке.
Как делать правильно проверку? посмотрите в примере по функции IndicatorCounted(), в справке по MQL4. Только теперь IndicatorCounted() лучше заменить на совместное использование переменных rates_total (это Bars) и prev_calculated (это IndicatorCounted()).
Спасибо, Нашел,
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars--;
Если нужно ограничивать количество баров, на которых отображаются данные индикатора, то лучше сделать так:
int GetRecalcIndex(int& total, constint ratesTotal, constint prevCalculated)
{
total = ratesTotal - 2 - barsig;
if (cb > 0 && cb < total)
total = MathMin(cb, total);
if (prevCalculated < ratesTotal - 1)
{
InitializeBuffers(); // Это функция, которая должна заново инициализировать все индикаторные буфера, т. к. имеем дело с первой загрузкой индикатора или подкачкой историиreturn (total);
}
return (MathMin(ratesTotal - prevCalculated, total));
}
Пользоваться так:
int total;
int limit = GetRecalcIndex(total, rates_total, prev_calculated);
for (int i = limit; i >= 0; --i)
{
...
}
Значение total - это индекс самого глубокого бара в истории, к которому можно обращаться, исходя из значений настроечных параметров индикатора.
'InitializeBuffers' - function not definedHiLo.mq41617
и в справке об этой функции ничего нет
Я же написал в комментарии, что это функция, которая должна выполнить инициализацию всех буферов индикатора. Это пользовательская функция. У меня она такая:
У вас будет другая, т . к. другие буфера. В случае же, если индикатор работает с графическими объектами, то здесь нужно все их удалить, т. к. предстоит начальная отрисовка показаний.
Я же написал в комментарии, что это функция, которая должна выполнить инициализацию всех буферов индикатора. Это пользовательская функция. У меня она такая:
У вас будет другая, т . к. другие буфера. В случае же, если индикатор работает с графическими объектами, то здесь нужно все их удалить, т. к. предстоит начальная отрисовка показаний.
Спасибо, но ничего не изменилось ...array out of range in 'HiLo.mq4' (130,15)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Всё равно вылетает.
у вас [i+1], нужно проверять на +2 больше
вообще нужно делать примерно так
Потому что проверка в корне неверная. Допустим, Bars вернула 1000, а cb тоже 1000. Затем в цикле на первой итерации i получает значение 1000. В первом же условии тела цикла:
сразу два выхода за пределы массива: обращение к бару с индексом 1000 и с индексом 1001. Ведь если на графике 1000 баров, то первый бар имеет индекс 0, а последний - 999.
Дальше по телу цикла идет обращение к еще более далеким барам а истории:
Все это нужно учесть при изначальной проверке.
Как делать правильно проверку? посмотрите в примере по функции IndicatorCounted(), в справке по MQL4. Только теперь IndicatorCounted() лучше заменить на совместное использование переменных rates_total (это Bars) и prev_calculated (это IndicatorCounted()).
Спасибо, Нашел,
с чем его сравнивать? в примере начинает с limit
limit=Bars-counted_bars;с чем мне эту "cb" сравнивать?
Спасибо, Нашел,
с чем его сравнивать? в примере начинает с limit
с чем мне эту "cb" сравнивать?
Если нужно ограничивать количество баров, на которых отображаются данные индикатора, то лучше сделать так:
Пользоваться так:
Значение total - это индекс самого глубокого бара в истории, к которому можно обращаться, исходя из значений настроечных параметров индикатора.у вас [i+1], нужно проверять на +2 больше
вообще нужно делать примерно так
Сделал, точно так, пишет ...array out of range in 'HiLo.mq4' (122,15)
что проверять на +2 больше?
Если нужно ограничивать количество баров, на которых отображаются данные индикатора, то лучше сделать так:
Пользоваться так:
Значение total - это индекс самого глубокого бара в истории, к которому можно обращаться, исходя из значений настроечных параметров индикатора.Компилятор ругается
'InitializeBuffers' - function not defined HiLo.mq4 161 7
Компилятор ругается
'InitializeBuffers' - function not defined HiLo.mq4 161 7
Я же написал в комментарии, что это функция, которая должна выполнить инициализацию всех буферов индикатора. Это пользовательская функция. У меня она такая:
У вас будет другая, т . к. другие буфера. В случае же, если индикатор работает с графическими объектами, то здесь нужно все их удалить, т. к. предстоит начальная отрисовка показаний.
Я же написал в комментарии, что это функция, которая должна выполнить инициализацию всех буферов индикатора. Это пользовательская функция. У меня она такая:
У вас будет другая, т . к. другие буфера. В случае же, если индикатор работает с графическими объектами, то здесь нужно все их удалить, т. к. предстоит начальная отрисовка показаний.
Спасибо, но ничего не изменилось ...array out of range in 'HiLo.mq4' (130,15)
. Что не так?
Спасибо, но ничего не изменилось. Что не так?
Конечно, результат не изменится. Ведь главную причину (цикл по cb) Вы не убрали. Вот этот цикл организован неправильно:
Его нужно убирать и вместо него ставить цикл по limit. В обоих местах.
Конечно, результат не изменится. Ведь главную причину (цикл по cb) Вы не убрали. Вот этот цикл организован неправильно:
Его нужно убирать и вместо него ставить цикл по limit. В обоих местах.
Таких циклов 3. Заменил их, терминал завис.
Сделал, не зависает, не вылетает, но в первом буфере (fx2) значений бывает 3: цена, 0.0 и 164874239.218492.
если значение sell_1_B!=EMPTY_VALUE и sell_1_B!=0 это не значит что там цена.
Как получить сигнал?