- MetaEditor - профессиональный редактор торговых приложений
- Компиляция - Разработка программ
- Скачайте MetaTrader 5 build 1730 с новыми возможностями для трейдеров
Переношу свой индикатор на мт5. Написал и проверил некоторые функции, которые отсутствуют в мт5. Всё скомпилировалось. Теперь думаю всё будет в порядке. Закидываю индикатор на график и.. происходит ругать на строку, в которой вообще кода нет (там комментарии). Как вообще ошибку искать? Ведь среда разработки должна помогать, а не тыкать наобум в любую строку..
Или код в студию или к телепатам на сеанс.
Или код в студию или к телепатам на сеанс.
Прилагаю код индикатора и библиотеку, которую написал для работы с таймсериями рыночных данных
Прилагаю код индикатора и библиотеку, которую написал для работы с таймсериями рыночных данных
Так как Вы делаете вызов функций из библиотеки - при компиляции невозможно проверить ошибки (нужно делать включаемый файл mqh).
Вероятно ошибка здесь:
// 7.1 Возвращает значение времени открытия бара торгового инструмента активного окна, находящегося на shift баров от 0-го бара в историю. ========================================= datetime getBarOpenTime(int shift, // Индекс бара, время открытия которого требуется определить ENUM_TIMEFRAMES tf = PERIOD_CURRENT) export { // ТФ, на котором будет происходить поиск открытия баров функцией CopyTime() datetime barOpenTime[]; CopyTime(_Symbol,tf,shift,1,barOpenTime); return barOpenTime[0]; }
CopyTime вызывается в воздух, без проверки результата.
Так как Вы делаете вызов функций из библиотеки - при компиляции невозможно проверить ошибки (нужно делать включаемый файл mqh).
Вероятно ошибка здесь:
CopyTime вызывается в воздух, без проверки результата.
Уже проверил:
// 7.1 Возвращает значение времени открытия бара торгового инструмента активного окна, находящегося на shift баров от 0-го бара в историю. ========================================= datetime getBarOpenTime(int shift, // Индекс бара, время открытия которого требуется определить ENUM_TIMEFRAMES tf = PERIOD_CURRENT) export { // ТФ, на котором будет происходить поиск открытия баров функцией CopyTime() datetime barOpenTime[]; if (CopyTime(_Symbol, tf, shift, 1, barOpenTime) == -1) return -1; return barOpenTime[0]; } // 7.2 Возвращает значение времени открытия бара заданного торгового инструмента, находящегося на shift баров от 0-го бара в историю. ============================================== datetime getBarOpenTime(int shift, // Индекс бара, время открытия которого требуется определить string tradingInstrument, // Торговый инструмент, на котором будет произведён поиск ENUM_TIMEFRAMES tf = PERIOD_CURRENT) export { // ТФ, на котором будет происходить поиск открытия баров функцией CopyTime() datetime barOpenTime[]; if (CopyTime(tradingInstrument, tf, shift, 1, barOpenTime) == -1) return -1; return barOpenTime[0]; }
Предлагаете сделать включаемый файл для проверки, а потом опять работать с библиотекой что-ли когда станет понятно? Кстати, когда я вот так поправил код как показал ошибки больше нет. Индикатор на график цепляется и показывает если уменьшить масштаб какую-то хрень. Сами понимаете, библиотеки имеют свои приемущества.
А как раньше было реализовано в мкл4 так что не было таких касяков? Ведь, по сути, там и ошибки то быть не может. Я копирую 1 время открытие и его же возвращаю. По сути, написан код как и раньше. Но работает не так.
Я так понимаю буедт лишним делать какие-либо проверки в самом индикаторе. Как-то ведь раньше получалось значение времени открытия в самой iTime(). Неужели сейчас это без проблем не возможно вообще сделать? Это такие удобства в mql5 что-ли, что для получения элемента таймсерии нужно страницы проверок понаписывать? Ведь было же это нормально вполне..
Уже проверил:
Предлагаете сделать включаемый файл для проверки, а потом опять работать с библиотекой что-ли когда станет понятно? Кстати, когда я вот так поправил код как показал ошибки больше нет. Индикатор на график цепляется и показывает если уменьшить масштаб какую-то хрень. Сами понимаете, библиотеки имеют свои приемущества.
А как раньше было реализовано в мкл4 так что не было таких касяков? Ведь, по сути, там и ошибки то быть не может. Я копирую 1 время открытие и его же возвращаю. По сути, написан код как и раньше. Но работает не так.
Я так понимаю буедт лишним делать какие-либо проверки в самом индикаторе. Как-то ведь раньше получалось значение времени открытия в самой iTime(). Неужели сейчас это без проблем не возможно вообще сделать? Это такие удобства в mql5 что-ли, что для получения элемента таймсерии нужно страницы проверок понаписывать? Ведь было же это нормально вполне..
Всегда было так - что нужно проверять возвращаемое из функции значение. Загляните в справку по МТ4 и поглядите что возвращают функции в случае ошибок.
Другое дело, что многие горе-программеры просто никогда не проверяли возврат из функции на ошибки, и теперь считают, что стало хуже... А ведь никакой разницы и нет. Кто раньше писал корректный код с проверками результата, тот и сейчас продолжает это делать. А вот кто раньше писал чудо-поделки, тому сейчас конечно хуже - его заставили проверять на ошибки. А как хорошо было раньше "на авось" всё делать ... :)
Всегда было так - что нужно проверять возвращаемое из функции значение. Загляните в справку по МТ4 и поглядите что возвращают функции в случае ошибок.
Другое дело, что многие горе-программеры просто никогда не проверяли возврат из функции на ошибки, и теперь считают, что стало хуже... А ведь никакой разницы и нет. Кто раньше писал корректный код с проверками результата, тот и сейчас продолжает это делать. А вот кто раньше писал чудо-поделки, тому сейчас конечно хуже - его заставили проверять на ошибки. А как хорошо было раньше "на авось" всё делать ... :)
Так я же последний раз проверил всё. Что не так?
Другой вопрос в том, что раньше я вызывал функцию iTime() для нужного индекса и она возвращала мне время открытия на этом индексе. Не было никаких головняков. Я тоже самое щяс реализовал, по осути. Вы видите ошибку в логике?
Так я же последний раз проверил всё. Что не так?
Другой вопрос в том, что раньше я вызывал функцию iTime() для нужного индекса и она возвращала мне время открытия на этом индексе. Не было никаких головняков. Я тоже самое щяс реализовал, по осути. Вы видите ошибку в логике?
datetime iTime(string symb,ENUM_TIMEFRAMES tf,int index) { datetime Arr[1]; return((CopyTime(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE); } //------------------------------------------------------------------------------------------------------- double iOpen(string symb,ENUM_TIMEFRAMES tf,int index) { double Arr[1]; return((CopyOpen(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE); } //------------------------------------------------------------------------------------------------------- double iClose(string symb,ENUM_TIMEFRAMES tf,int index) { double Arr[1]; return((CopyClose(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE); } //------------------------------------------------------------------------------------------------------- double iLow(string symb,ENUM_TIMEFRAMES tf,int index) { double Arr[1]; return((CopyLow(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE); } //------------------------------------------------------------------------------------------------------- double iHigh(string symb,ENUM_TIMEFRAMES tf,int index) { double Arr[1]; return((CopyHigh(symb,tf,index,1,Arr)==1)?Arr[0]:WRONG_VALUE); }
Vitaly Muzichenko, по сути, у меня тоже самое написано, разве что без тернатрного оператора. Хотя, другие функции я с тернарным оператором писал в этой же библиотеке. Странно, что я проверял втестовом эксперте, всё получается верно.
В справке написано, что рекомендуется передавать в CopyTime динамический массив. Вы размер задали, что бы сэкономить ресурсы я так понял. Согласен. Я тоже так сделаю. Разумно.
Всё-равно, кстати, индикатор не рисует ничего ((
Я обнаружил вот что:
Явно задаете нулевые значения буферам и обнуляете их при первом запуске?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования