Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Может стоит провериться - IsConnected()?
Если эксперт уже висел на чарте, а терминал только запущен, могло не успеть пройти соединение с сервером и как следовательно рыночное окружение не прогрузилось?
...
Попробовал. Выяснилось, что в момент запроса, действительно, коннект отсутствует.
Может стоит провериться - IsConnected()?
Если эксперт уже висел на чарте, а терминал только запущен, могло не успеть пройти соединение с сервером и как следовательно рыночное окружение не прогрузилось?
Судя по всему, именно это и произошло. Насколько я знаю, до некоторых пор были жёствие ограничения на использование переменных окружения в init(). Но с некоторых пор эта проблема снята. В ините доступна вся информация, пришедшая с последним тиком (разумеется, если терминал уже соединился с сервером и тик пришёл). Более точно лучше выяснить у разработчиков.
Но вопрос к разработчикам остается. Здесь просматривается какая-то недоработочка.
Вот из документации ( МЕ - Справочник MQL4 - Выполнение программ ):
Сразу же после присоединения к графику программа начинает работу с функции init(). Функция init() присоединенного к графику советника или пользовательского индикатора запускается также сразу после старта клиентского терминала и подгрузки (это касается только советников и не касается индикаторов) исторических данных, после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора.
В индикаторе функция init() вызывается в любом случае даже если нет рыночного окружения. Индикатор ведь надо рисовать "здесь и сейчас", а не ждать подключения и закачки всех данных. То есть, в функции init() из кастомного индикатора(!) нельзя обращаться/доверять к рыночному окружению.
В отличие от индикатора, функция init() эксперта(!) гарантированно вызывается при наличии всего полного рыночного окружения. Функция init() у эксперта вызывается не в момент прикрепления эксперта к графику, а после прихода первого ценового тика.
То есть, в функции init() из кастомного индикатора(!) нельзя обращаться/доверять к рыночному окружению.
Это не грабли, а принципиальный момент. Полностью рыночное окружение можно распознать только по приходу тика.
Это не грабли, а принципиальный момент. Полностью рыночное окружение можно распознать только по приходу тика.
Я имел в виду грабли для программистов, которые не понимали этой специфики.
А по поводу прихода тика - это немного не то, что хотелось. Ситуация следующая: стартует терминал, идет подключение к счету. В этот момент индикатор уже может начинать рисовать себя - а не хочется. Этот момент при старте терминала отлавливается проверкой
но я не уверен что это сработает при смене счета :(
Второй момент: соединились с ДЦ - терминал начинает заливать недостающие в истории бары. Как узнать что приехали уже все и следующий будет только с новым тиком, а не то, что это просто модем "залип" и не конект просто "висит"?
Ведь если закачка истории закончена, инициализации все проведены, а следующий тик, например ночью, придет только через 5 минут?! - зачем же столько ждать?
Ну ведь должнен же терминал "знать что ему уже ничего не надо", и он просто ждет очередного тика. Мне бы хотелось поймать именно эту ситуацию.
Я понимаю, что индикатор сможет перерисоваться только при приходе нового тика. В таком случае решение моей проблемы - это отловить момент когда старт или инит отрабатывают закачку самого последнего бита ;) недостающей истории. Как бы мне узнать что старт или инит "дернули" последний раз и следующий раз будет уже на новом тике?
Может добавить вызов встроенной функции, чтото типа "InitFinished()"? Тогда мне не нужно никаких проверок - терминал сам меня дернет ;)
MarketInfo не работает хорошо в init. Решение - проверяйте значение на первом тике.
MarketInfo бывает не работает и в теле советника, и с конектом все в порядке... торговый сервер ДЦ не выдает данные...