История по всем таймфреймам загружена на максимально возможную глубину (через архив котировок). Однако этот эффект проявляется не только при изменении таймфрейма, но и при любой попытке переинициализации эксперта (в частоности при открытии окна настроек и нажатии там ОК).
Любопытства ради - а как недостаток истории может быть связан с неверным позиционированием элементов управления?
Любопытства ради - а как недостаток истории может быть связан с неверным позиционированием элементов управления?
да, влияет,
в таймере сделайте так и все будет работать:
//+------------------------------------------------------------------+ int OnInit() { OnTimer(); EventSetTimer(49); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnTimer() { const ENUM_TIMEFRAMES PeriodTF[9]={PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1}; datetime t[]; int i,startpos=0; for(i=0;i<9;i++) CopyTime(_Symbol,PeriodTF[i],startpos,iBars(_Symbol,PeriodTF[i]),t); } //+------------------------------------------------------------------+
Используйте указатели. Поищите на форуме тут уже было несколько тем по этой проблеме.
Вот одна из них https://www.mql5.com/ru/forum/313896#comment_11757136
- 2019.05.20
- www.mql5.com
Используйте указатели. Поищите на форуме тут уже была тема по этой проблеме.
да, я тоже панельку через указатель создаю, но если история не будет подгружена с другого ТФ, указатель не поможет - я проверял, из 5 ти раз 1-2 раза будут кнопки разьзжаться, чтобы проверить это или удалите историю с других ТФ или откройте какой-нибудь символ которым не пользуетесь - на текущем ТФ будет норм, при переключении ТФ пока не подгрузится история, будет картинка как у ТС
тут в общем в чем отличие работы в МТ4 от МТ5 - в МТ5 всегда при работе панельки будет подгружена история, при переключении ТФ терминал просто из уже загруженных минуток формирует только новые бары ТФ
а в МТ4 - каждый ТФ скачивается с сервера и вот этот момент закачки и синхронизации с сервером и происходит сдвиг графических элементов
а в МТ4 - каждый ТФ скачивается с сервера и вот этот момент закачки и синхронизации с сервером и происходит сдвиг графических элементов
Игорь, скажите, пожалуйста, а почему этот сдвиг происходит без изменения таймфрейма? Например, при открытии окна настроек советника и нажатии там кнопки ОК.
К сожалению, ничего не изменилось. Код советника прилагаю. Для таймера пробовал разные значения в диапазоне от 1 до 60.
не все фалы приатачили и у меня так написано в моем примере
int OnInit() { OnTimer();
вот так попробуйте:
CControlsDialog *ExtDialog; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { OnTimer(); ExtDialog = new CControlsDialog; if (!EventSetTimer(50)) return (INIT_FAILED); //--- create application dialog if(!ExtDialog.Create(0,"Controls",0,20,20,360,324)) return(INIT_FAILED); //--- run application ExtDialog.Run(); //--- succeed return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy dialog EventKillTimer(); ExtDialog.Destroy(reason); delete ExtDialog; }
Игорь, скажите, пожалуйста, а почему этот сдвиг происходит без изменения таймфрейма? Например, при открытии окна настроек советника и нажатии там кнопки ОК.
у меня не было такой ситуации, было как у Вас на скриншоте, сделал: подкачку истории и создание обьекта через указатель - все работает в МТ4
я правда панельку создаю через #include <Controls\Dialog.mqh> и добавляю элементы управления на нее
Используйте указатели.
вот так попробуйте:
Вот теперь всё работает! @Igor Makanu и @Vitalii Ananev, огромное вам спасибо!
Приложу оба файла, вдруг ещё кому-то пригодится.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Озаботился созданием панели управления для своего советника. С недавних пор в стандартной поставке МТ4 имеются классы для создания графических элементов управления. Логично предположить, что они могут быть использованы для создания торговой панели. Я попробовал создать её, но потерпел фиаско.
Прежде всего я предпринял попытку найти описание работы с этими классами и примеры их использования в документации МТ4, но не нашёл. Тогда я подумал, что, возможно, стоит поискать в документации МТ5. Там действительно описаны эти классы. Более того, в стандартной поставке есть пример советника с работающей панелью (Controls.mq5). Также есть очень хорошая статья на эту тему. Забегая вперёд, скажу, что я позаимствовал некоторые фрагменты кода оттуда (в частности, изменение позиционирования свёрнутого окна) и они успешно работают в МТ4.
Я подумал, что, возможно, разработчики МТ4, включив в стандартную поставку все необходимые для создания панелей классы, просто забыли приложить пример советника. Тогда я просто взял его из МТ5, скопировал в МТ4, изменил расширение на .mq4, скомпилировал и запустил. И всё заработало! Но радовался я недолго.
Внеся необходимые изменения и наполнив панель нужной функциональностью, я убедился, что всё работает корректно. Кроме одного, но очень важного момента. Когда мы изменяем таймфрейм, вносим изменения в настройки или ещё каким-то способом вызываем инициализацию советника, панель рассыпается :(
Вот как это выглядит:
Я нашел в CodeBase эксперт, в котором автор демонстрирует создание панели для МТ4. Но эта панель тоже рассыпается при переинициализации (хотя и находится в CodeBase). В обсуждении этого эксперта в начале 2016 года люди задавали автору вопрос, почему панель рассыпается при переинициализации графика. Он обещал разобраться за неделю, но, к сожалению, после этого пропал из обсуждения навсегда (прошло 3.5 года).
Пожалуйста, подскажите, как решить эту проблему? Возможно, где-то есть готовый пример создания торговой панели в МТ4 при помощи классов из стандартной поставки терминала?