Скачать MetaTrader 5

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

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

Добрый день,

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

zhixiong Li
156
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.
Dmitriy Gizlyk
13813
Dmitriy Gizlyk  
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.
Aleksandr Teleguz
1373
Aleksandr Teleguz  

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

Dmitriy Gizlyk
13813
Dmitriy Gizlyk  
Aleksandr Teleguz:

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

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

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

Eugeny Kotovschikov
1305
Eugeny Kotovschikov  

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

Dmitriy Gizlyk
13813
Dmitriy Gizlyk  
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;
     }
  }

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий