- Как получить период графика советника (не текущего графика)
- Требуется гайд для новичка.
- А такой рисунок видели?
Программа работает с разными тф в МТ4 и при простое начинает гнать чушь(хотя вроде текущии котировки по этим тф ходят синхронно), пока не пощёлкаю тф, всё перерисовывается как надо, как с этим бороться?
На каждом тике обращаться к другому ТФ. Хотя бы так:
iTime(NULL, eTF, 1);
А лучше всего проверять доступность данных другого ТФ:
bool IsTFDataReady(const ENUM_TIMEFRAMES eTF) { ResetLastError(); iTime(NULL, eTF, 1); return GetLastError() == ERR_NO_ERROR; }
я обычно первый раз в OnInit() вызываю загрузку данных с других ТФ, затем в таймере 1 раз в 50 секунд поддергиваю все ТФ которые необходимы
примерно так все в коде:
вверху кода: const ENUM_TIMEFRAMES PeriodTF[9]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; .... int OnInit() { OnTimer(); // вызываю ф-цию таймера принудительно ...... //--- create timer EventSetTimer(49); return(INIT_SUCCEEDED); } .... void OnTimer() { static int count=0; datetime t[]; int i,startpos=0; if(count<6) { for(i=0;i<9;i++) CopyTime(_Symbol,PeriodTF[i],startpos,iBars(_Symbol,PeriodTF[i]),t); // загружаем всю доступную историю первые 5 минут count++; }else{ for(i=0;i<9;i++) CopyTime(_Symbol,PeriodTF[i],startpos,2,t); // загружаем 0 и 1-й бар в дальнейшем } }
проверок доступности ТФ не делаю, в теории это плохо, но на практике все работало без проблем
Терминал гарантирует наличие истории только по открытым графикам.
В Вашем случае, если на графике М1, то по нему история всегда в кэше терминала. По остальным таймфреймам, она подгружается при поступлении запроса и там может получиться по разному, никто Вам ничего не гарантирует, вся информация есть в спецификации, раздел: "Доступ к таймсериям и данным индикаторов".
Вполне может быть, что, в связи с длительным отсутствием запроса по историческим данным, они просто удаляются из кэша, а через 49 с Вы опять пытаетесь их получить, а их опять нет. В спецификации mql5 об этом в контексте буферов индикаторов написано, думаю здесь принцип тот же, поэтому обращайтесь к таймфреймам почаще и будет Вам счастье, и не забывайте проверять, что критические для Вас данные получены..
а через 49 с Вы опять пытаетесь их получить, а их опять нет
если речь идет о моем примере, то у меня была задачка сделать полуавтоматическую панель для ручной торговли, делал из классов из поставки МТ4, была проблема, что при переключении ТФ иногда могли графические элементы "разьединиться", искал причину - оказалось, что подгрузка истории иногда была с притормаживанием, а иногда нет
вот и сделал подгрузку каждые 49 с, заказчик доволен, все работает, он по ТФ переключает без проблем
Если речь идет о вызове индикаторов или просто данных OHLC из другого ТФ, тут да - лучше каждый тик "дергать" все ТФ которые будут использованы, тогда все будет корректно работать
ЗЫ: не найду топик обсуждения похожего вопроса - месяца 3-4 назад был, модератор Слава однозначно указал, что в МТ4 нет механизма проверки загрузки истории по другим ТФ, т.е. запросить историю можно, а вот проверить скачалась и готова она нельзя. Я у меня был вопрос почему результат возвращаемых ф-циями CopyXXX() если по ТФ вообще отсутствует история будет = 2048, мне ответили, что это размер порции данных за одно обращение к серверу, т.е. при следующем вызове CopyXXX() будет подгружены еще 2048... и так пока все не скачается, проверить эту ситуацию невозможно, только запрашивать и ждать
ЗЫЗЫ: в МТ4 нужна помощь пользователя для корректной работы с несколькими ТФ: нужно открыть график символа, попереключать все ТФ и кликать мышью обновить, а лишь затем запускать эксперта который вызывает несколько ТФ. При таком запуске все будет без проблем работать в дальнейшем. Держать несколько графиков с разными ТФ не обязательно, но каждый тик нужно обращаться ко всем ТФ через CopyXXX() - второй пост этого топика пример
С уважением, Макс
модератор Слава однозначно указал, что в МТ4 нет механизма проверки загрузки истории по другим ТФ, т.е. запросить историю можно, а вот проверить скачалась и готова она нельзя.
Тоже с этим столкнулся, пытаясь автоматизировать подкачку истории.
Удивляет такой 19-й век в технологиях. В то время как космические корабли бороздят просторы вселенной)
Тоже с этим столкнулся, пытаясь автоматизировать подкачку истории.
Удивляет такой 19-й век в технологиях. В то время как космические корабли бороздят просторы вселенной)
увы, разработчики не дополняют функционал МТ4, в МТ5 есть механизмы проверки доступности и проверки подкачки истории
но в целом, МТ4 все равно годная штука ;)
PS: в кодобазе есть примеры автоматической подкачки истории https://www.mql5.com/ru/code/9888
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования