Обсуждение статьи "Создаем помощника в ручной торговле" - страница 6

 
zhixiong Li:
Hello Dmitriy, can this trade panel be used in MT4 history testing mode ? It seems the function OnChartEvent() is not executed when doing history back test ? Would you please teach me how to solve this ? Thank you so much, Robison.
Yes, in test mode MT4 and MT5 don't generate events to run OnChartEvent function. But if you want use some psnel in test mode of MT4 you must create function to check state of buttons on every tick. But this method doesn't work in MT5.
Best regstds,
Dmitriy.
 

Здравствуйте. В вашей статьи я не понял как реализована "подвижность" панели, как сделать, чтобы панель перемещалась мышью и сворачивалась. Поясните пожалуйста. И скажите можно ли реализовать тоже самое в mql4. 

 
Aleksandr Teleguz:

Здравствуйте. В вашей статьи я не понял как реализована "подвижность" панели, как сделать, чтобы панель перемещалась мышью и сворачивалась. Поясните пожалуйста. И скажите можно ли реализовать тоже самое в mql4. 

Добрый день,
В своей статье при написании панели я использовал стандартные библиотеки. Указанные Вами функции уже реализованы в них. В mql4 есть аналогичные библиотеки с аналогичными функциями.

С уважением,
Дмитрий.

 

Дмитрий, привет! Делаю панель на MT4, за основу взял твой опыт, но вот проблема, при переключение ТФ, где-то на 3й раз панель начинает дублироваться и разъезжается. В MT5 в твоем примере все ОК. в МТ4 беда. Может знаешь где покапать?)

 
Eugeny Kotovschikov:

Дмитрий, привет! Делаю панель на MT4, за основу взял твой опыт, но вот проблема, при переключение ТФ, где-то на 3й раз панель начинает дублироваться и разъезжается. В MT5 в твоем примере все ОК. в МТ4 беда. Может знаешь где покапать?)


Добрый день, Евгений.
Нужно в OnDeinit прописать функцию принудительного удаления панели с графика. Дело в том, что не при смене графика МТ4 инициирует закрытие программы и вызов функции OnDeinit. После первой деинициализации в классе CAppDialog в частную переменную m_deinit_reason прописывается причина деинициализации. Но при смене таймфрейма МТ4 не удаляет класс из памяти. И при последующих попытках удалить паенель, класс считывает значение переменной и так как оно не пустое, ничего не делает

//+------------------------------------------------------------------+
//| Application dialog deinitialization function                     |
//+------------------------------------------------------------------+
void CAppDialog::Destroy(const int reason)
  {
//--- destroyed already?
   if(m_deinit_reason!=WRONG_VALUE)
      return;
//---

Но более простой и, наверно, более правильный вариант будет объявлять класс панели через ссылку на класс с использованием "*". В таком варианте нужно внести небольшие изменения в код

CTradePanel *TradePanel;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   // Init class CTradePanel
   TradePanel=new CTradePanel();
   if(CheckPointer(TradePanel)==POINTER_INVALID)
      return INIT_FAILED;
   // Creat Trade Panel
   if(!TradePanel.Create(ChartID(),"Trade Panel"))
     {
      return (INIT_FAILED);
     }
   // Run Trade Panel
   TradePanel.Run();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(CheckPointer(TradePanel)!=POINTER_INVALID)
     {
      TradePanel.Destroy(reason);
      delete TradePanel;
     }
  }

Такой вариант принудительно удалит класс торговой панели при деинициализации, а затем повторно его создаст.

С уважением,
Дмитрий.

 
Dmitriy Gizlyk:

Добрый день, Евгений.
Нужно в OnDeinit прописать функцию принудительного удаления панели с графика. Дело в том, что не при смене графика МТ4 инициирует закрытие программы и вызов функции OnDeinit. После первой деинициализации в классе CAppDialog в частную переменную m_deinit_reason прописывается причина деинициализации. Но при смене таймфрейма МТ4 не удаляет класс из памяти. И при последующих попытках удалить паенель, класс считывает значение переменной и так как оно не пустое, ничего не делает

Но более простой и, наверно, более правильный вариант будет объявлять класс панели через ссылку на класс с использованием "*". В таком варианте нужно внести небольшие изменения в код

Такой вариант принудительно удалит класс торговой панели при деинициализации, а затем повторно его создаст.

С уважением,
Дмитрий.


Дмитрий, спасибо огромное, второй вариант сработал.))))

 
Dmitriy Gizlyk:
Как создать панель, похожую на панель для ручной установки ордера при тестировании исторических данных в mt4?

Исторический бэктестинг не может работать с помощью кнопок.

 
Yupeng Xiao:

Историческое бэктестирование не может работать с помощью кнопок.


Тестер MT4 не генерирует события, но сами кнопки работают. Поэтому в тестере MT4 вы можете проверять состояние кнопок на каждом тике.

 

Привет, Дмитрий

Очень хорошая работа. Не могли бы вы объяснить мне, как изменить цвет фона панели? Я знаю, что могу изменить определение макроса в файле Defines.mqh, но мне интересно, есть ли способ сделать это без редактирования этого файла.

Заранее спасибо.


Савио

 

Очень хорошая идея! Очень проста в использовании, облегчает mt5 для новичков. Спасибо