Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Sergey Golubev, 2020.03.23 16:08
Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
Терминал пишет, что у вас выход за пределы массива. Один из индексов принимает значение большее, чем размер массива.
Запустите индикатор, посмотрите во вкладке "Эксперты", на какую строку ругается терминал, найдите её и напишите здесь. Например, так
double rsi0 = work[r ][iRsi];
work[r][iRsi] = work[r-1][iRsi] + alpha1*(iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,i) - work[r-1][iRsi]); // array out of range in 'GH strategy.mq4' (248,27) work[r][iEma] = work[r-1][iEma] + alpha2*(MathAbs(work[r-1][iRsi]-work[r][iRsi]) - work[r-1][iEma]); // array out of range in 'GH strategy.mq4' (249,27) work[r][iEmm] = work[r-1][iEmm] + alpha2*(work[r][iEma] - work[r-1][iEmm]); // array out of range in 'GH strategy.mq4' (250,27) for (n = m; n <= m + 9; n++) k += MathAbs(High[n] - Low[n]); // array out of range in 'GH strategy.mq4' (291,56)
Поставьте печать перед местом, где ошибка:
printf(IntegerToString(ArrayRange(work,0))+" : "+IntegerToString(r)); work[r][iRsi] = work[r-1][iRsi] + alpha1*(iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,i) - work[r-1][iRsi]); // array out of range in 'GH strategy.mq4' (248,27)
И посмотрите, что происходит с индексом перед ошибкой. Возможно он становится равным нулю, и когда Вы отнимаете единицу, то в скобках work[r-1] получается отрицательное значение.
Чему равняется iRsi , iEma, iEmm ?
А я подумал на work[r-1], там ещё табуляция была, как раз 27 место. Думаю... хотя это догадки.
Поставьте печать перед местом, где ошибка:
И посмотрите, что происходит с индексом перед ошибкой. Возможно он становится равным нулю, и когда Вы отнимаете единицу, то в скобках work[r-1] получается отрицательное значение.
for (i=limit, r=Bars-i; i>=0; i--,r++)
Да, ошибка в предыдущих строках исчезла. Теперь ошибка переместилась в другую строку:
trend1[i] = trend1[i+1];
printf(IntegerToString(ArrayRange(trend1,0))+" : "+IntegerToString(i));
2021.08.04 00:29:45.133 GH strategy EURUSD,M1: 0 : 24386
Вот: 2021.08.04 00:14:14.879 GH strategy EURUSD,M1: 24372 : 0
Когда r равно 0, невозможно посмотреть значение предыдущего элемента, поскольку это и так самый первый элемент. В этот момент r-1 не существует. Нужно менять логику.
Например так:
if(r>0) { work[r][iRsi] = work[r-1][iRsi] + alpha1*(iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,i) - work[r-1][iRsi]); work[r][iEma] = work[r-1][iEma] + alpha2*(MathAbs(work[r-1][iRsi]-work[r][iRsi]) - work[r-1][iEma]); work[r][iEmm] = work[r-1][iEmm] + alpha2*(work[r][iEma] - work[r-1][iEmm]); } else { work[r][iRsi] = 0; work[r][iEma] = 0; work[r][iEmm] = 0; continue; }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую Всех ! Заранее всем спасибо !
Я объединил 2 разных индикатора на основе QQE для личного использования. Эти индикаторы доступны в CodeBase.
У меня была проблема: Array out of a range.
Индикатор не работает в обновленной версии MQL4. Прекращает работу при "// # property strict".
Пожалуйста, помогите.
Уважаемые админы. Пожалуйста не игнорируйте. Мне нужна помощь в решении этой проблемы. Уже 1 неделю не могу найти решение этой проблемы.
//============================================================================
1 индикатор - QQE
2 индикатор QQE