- Полезные функции от KimIV
- индикатор и галочка "Разрешить импорт функцией из DLL"
- [АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5.
Может он неправильно инициализируется?
Проверте все переменные при объявлении.
Скорее всего проблема действительно не в советнике. А в том, что не успели обновиться какие-нибудь исторические данные.
Совсем недавно столкнулся с похожей проблемой. Эксперт должен быть выставить сделку, если в этот день сделки еще не открывались. В тестере тоже все было ОК, но в реале эксперт почти всегда открывал сделку. Рабочий ТФ эксперта H1, а данные он запрашивал с D1. Я был очень удивлен, когда в переменной NowDay, в которой хранилось начало текущего дня, оказалось значение начала дня за неделю назад.
Проблему решила такая конструкция в init:
Comment("Подождите, производится запрос исторических данных..."); int P = 0; while(P < 120) { NowDay = iTime(Symbol(), PERIOD_D1, 0); if (GetLastError() != 4066) break; Sleep(1000); P++; } Comment("");
По справочнику MQL4 iTime должна возвращать -1, если данные еще не обновлены, но на практике она возвращает последний известный результат. В итоге оказалось, что нужно вне зависимости от того, что возвращает iTime, проверять код ошибки. Подозреваю, что такая проблема получается со всеми массивами-таймсериями - нужно ждать их обновления.
Хотя есть и другой, непрограммный, способ решения - попереключаться между ТФ, с которых будет производится получение данных. Таким образом, они обновятся.
Скорее всего проблема действительно не в советнике. А в том, что не успели обновиться какие-нибудь исторические данные.
Совсем недавно столкнулся с похожей проблемой. Эксперт должен быть выставить сделку, если в этот день сделки еще не открывались. В тестере тоже все было ОК, но в реале эксперт почти всегда открывал сделку. Рабочий ТФ эксперта H1, а данные он запрашивал с D1. Я был очень удивлен, когда в переменной NowDay, в которой хранилось начало текущего дня, оказалось значение начала дня за неделю назад.
Проблему решила такая конструкция в init:
По справочнику MQL4 iTime должна возвращать -1, если данные еще не обновлены, но на практике она возвращает последний известный результат. В итоге оказалось, что нужно вне зависимости от того, что возвращает iTime, проверять код ошибки. Подозреваю, что такая проблема получается со всеми массивами-таймсериями - нужно ждать их обновления.
Хотя есть и другой, непрограммный, способ решения - попереключаться между ТФ, с которых будет производится получение данных. Таким образом, они обновятся.
Есть такой грех. Давно заметил. Небольшая пауза помогает.
По справочнику MQL4 iTime должна возвращать -1, если данные еще не обновлены, но на практике она возвращает последний известный результат. В итоге оказалось, что нужно вне зависимости от того, что возвращает iTime, проверять код ошибки. Подозреваю, что такая проблема получается со всеми массивами-таймсериями - нужно ждать их обновления.
Нет этого в справочнике. Зато есть:
"Если запрашивается информация с другого графика (название инструмента и/или значение таймфрейма отличаются от текущих), то возможна ситуация, что в клиентском терминале не открыт соответствующий график и необходимые данные должны быть запрошены у сервера. В этом случае в переменную last_error будет помещена ошибка ERR_HISTORY_WILL_UPDATED (4066 - запрошенные исторические данные в состоянии обновления) и необходимо через некоторое время повторить попытку запроса (см. пример ArrayCopySeries())."
Нет этого в справочнике. Зато есть:
"Если запрашивается информация с другого графика (название инструмента и/или значение таймфрейма отличаются от текущих), то возможна ситуация, что в клиентском терминале не открыт соответствующий график и необходимые данные должны быть запрошены у сервера. В этом случае в переменную last_error будет помещена ошибка ERR_HISTORY_WILL_UPDATED (4066 - запрошенные исторические данные в состоянии обновления) и необходимо через некоторое время повторить попытку запроса (см. пример ArrayCopySeries())."
Пардон, не -1, а 0:
Возвращает значение времени открытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). В случае ошибки функция возвращает 0. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
Речь идет о доступе к текущему графику (то есть график открыт), но другому его таймфрейму. Для меня остается непонятным - почему при ошибке iTime возвращает ненулевое значение? Вот и все.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования