История тех ТФ, по которым не открыты графики, терминалом не поддерживаются в автоматическом режиме. Они могут быть закачаны по запросу. Для этого нужно обратиться к нужному ТФ/символу при помощи любой из функций "i" и ждать, пока история не появится. Правда, сколько ждать, никому не известно, т. к. функций прямого контроля готовности данных не существует. Для себя сделал такой костыль:
bool IsTFDataReady(const string strSymbol, const ENUM_TIMEFRAMES eTF) { ResetLastError(); iTime(strSymbol, eTF, 1); return GetLastError() == ERR_NO_ERROR; }
Он в большинстве случаев работает, но не гарантирует 100% правильности контроля.
А что делать с OnTimer?
Как заставить его работать, если он по каким-либо причинам не запустился, да и как программно проверить, что он не работает, чтобы его запустить повторно, если советник стоит на офф-лайновом графике без тиков или на валютной паре, на которой перестали по каким-либо причинам (выходной или пара USDRUR ночью), тики?
И, вообще, почему надо изобретать какие-то костыли, если это могут сделать сами разработчики МТ?
Например, при запросе таймсерии сначала обновлять таймсерии, а потом выдавать результат. Пусть это будет работать несколько медленнее, но любой пользователь будет уверен, что берутся самые свежие данные.
Например, сделать отдельную функцию по запросу значения таймсерии и добавить в функции "i..." iTime(string symbol,int period,int shift,bool НовыеДанные=false). Если false, то по старому. Если true, то сначала происходит обновление таймсерий данного символа и тф, а потом выдается результат...
И, вообще, почему надо изобретать какие-то костыли, если это могут сделать сами разработчики МТ?
Например, при запросе таймсерии сначала обновлять таймсерии, а потом выдавать результат. Пусть это будет работать несколько медленнее, но любой пользователь будет уверен, что берутся самые свежие данные.
Например, сделать отдельную функцию по запросу значения таймсерии и добавить в функции "i..." iTime(string symbol,int period,int shift,bool НовыеДанные=false). Если false, то по старому. Если true, то сначала происходит обновление таймсерий данного символа и тф, а потом выдается результат...
Ну так сделайте себе. Язык MQL даёт вам все карты в руки. Разработчики не обязаны подстраиваться под все "хотелки" многомилионной армии
пользователей - каждому не угодишь.
Людям дали мощный инструмент, и в разных руках он приносит разные результаты. В ваших - глюк-на-косяке,
в других - чёткая бесперебойная работа. Каждый выбирает свой путь: одни - делать, другие - ныть и страдать.
Ну-да, ну-да.
Это просто отмазка.
Чем потрудиться и сделать нормальную программу, легче обвинить в этом самих пользователей.
Ну-да, ну-да.
Это просто отмазка.
Чем потрудиться и сделать нормальную программу, легче обвинить в этом самих пользователей.
Отмазка у вас о вашей некомпетентности - это у вас ничего не работает. Это вам никто ничего за вас не сделал. Сделали для вас, но вам нужно "за вас".
Продолжайте плакать :)
"Добрый" админ.
Я вопрос задаю разработчикам МТ, а не новоиспеченному админу.
Как ты программируешь - я знаю. Поэтому чья бы корова мычала.
Dmitry Sumsky:
... Пусть это будет работать несколько медленнее, но любой пользователь ...
А с какого, простите перепугу, любой пользователь должен терпеть тормоза ради ваших хотелок???
А с какого, простите перепугу, любой пользователь должен терпеть тормоза ради ваших хотелок???
ну поэтому и предложил вариант true/false.
нужна скорость - false, нужны свежие данные - true
)))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Что-то раньше писал программы и не замечал, как и многие, очевидного.
Первый момент.
При обращении к таймсериям, выдаются старые значения, а обновление самих таймсерий происходит уже после обращения.
Написал небольшой скрипт по выбору времени нулевого бара всех таймсерий по одному символу.
Можете сами попробовать.
При первом запуске видим просто хрень в комментарии.
При втором все нормализовалось
Если файла какого-то ТФ не было на момент первого запуска скрипта, то он может и появится, а может и нет. Следовательно и последующие запросы значений будут кривые, пока терминал не соизволит записать эту таймсерию...
Причем если подождать минут 10-20 и снова запустить скрипт для этого символа, то опять выдаются значения 10-20 минутной давности, а обновление происходит уже после выдачи кривых значений.
Это так и должно работать???
Второй момент.
Заметил, что OnTimer() бывает запустится, а бывает и нет.
Записал туда простую функцию вывода в комментарий локального времени компьютера
Переключил ТФ и часики пропали и не появляются, переключил снова - могут появиться, а могут и нет.
Запуск таймера в OnInit() стоит на 1 сек. В OnDeinit() пробовал и ставить (как по умолчанию) удаление таймера и удалял эту функцию - не помогает...
Это тоже нормально???