Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 534
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Владимир, спасибо за ответ на первый вопрос, я пропустил эти функции.
Один и тот же индикатор ставлю в МТ4 и в МТ5 (код конечно адаптирован для каждой платформы).
До нулевого бара у них значения совпадают, так что видимо с одного конца ... :)
А при отключении расчета на текущем баре в МТ4 под текущим баром ничего не рисуется, в МТ5 - неправильные значения.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих
Karputov Vladimir, 2016.03.08 15:13
... на время отладки ставьте проверку - какое значение содержится в массиве-таймсерии time[i] - так Вы поймёт с какого конца Вы начинаете обсчёт баров и где у Вас "нулевой" бар.
А как ставить такую проверку ?
В MetaEditore добавить точку останова и запустить отладку. Когда на точке останова будет остановка, добавьте в наблюдение time[0]:
В MetaEditore добавить точку останова и запустить отладку. Когда на точке останова будет остановка, добавьте в наблюдение time[0]:
МТ4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00:00
МТ5 2016.03.08 18:36:23.565 mvt_Vlt (EURUSD,H1) time[0] = 2010.01.04 00:00:00 time[rates_total-1] = 2016.03.08 17:00:00
Вставил в код МТ5 ArraySetAsSeries(time,true);
Теперь вывод:
МТ5 2016.03.08 18:45:05.402 mvt_Vlt (EURUSD,H1) time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 2010.01.04 00:00:00
А массивы цен тоже также делать ?
Я уже в коде вставил вывод
МТ4 2016.03.08 18:37:04.710 mvt_Vlt EURUSD,H1: time[0] = 2016.03.08 17:00:00 time[rates_total-1] = 1971.01.04 00:00:00
А что делать теперь ?
В обе версии индикатора добавить ArraySetAsSeries - для тех массивов, которые Вы используете для своих расчётов: high[], low[] и временно для массива time[] - это поможет понять, где же "нулевой" бар. Таким образом "нулевой" бар в обоих версиях будет с одинаковой стороны графика (справа или слева - в зависимости от того, что вы выставите в ArraySetAsSeries) и Вы получите одинаковую расчётную часть индикатора.
Добавлено: пока я печатал, Вы нащупали верный путь :)
Добавлено: пока я печатал, Вы нащупали верный путь :)
Вставил в код МТ5:
Выводит:
Это только ExtCalcVlBuffer выводит, а среднюю и отклонение не считает...
И все равно на текущем баре выводит,хотя и не должно.
...
И все равно на текущем баре выводит,хотя и не должно.
Это ещё почему не должно?
Я же его отключал i<rates_total-1
ЗАЧЕМ?!
А не надо на текущем считать, только зря процессор загружать, да и просто не нужно это значение.
Так нужно такую хотелку сразу оговаривать :) .
Ситуация такая - если на графике есть бар, то ему соответствует ячейка в индикаторном буфере. Пока Вы в эту ячейку чего-нибудь не запишите, в этой ячейке будет храниться мусор.