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

 
запускаю паявляется панел но она неработает а в углу правом нету написама сгхто панел активна
 
kudikelis:
запускаю паявляется панел но она неработает а в углу правом нету написама сгхто панел активна
 В журнале МТ есть сообщения об ошибках?
 
Есть ли такой пример создания торговой панельки для МТ4 в .mq4 ?
Можно ли данный пример и панельку перевести для МТ4 в .mq4 ?
 
Traskont:
Есть ли такой пример создания торговой панельки для МТ4 в .mq4 ?
Можно ли данный пример и панельку перевести для МТ4 в .mq4 ?

Добрый день,

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

 
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.
 
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;
     }
  }

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

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

Причина обращения: