preasto

 
Уровень 11

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ



Торговая панель на классах библиотеки МТ4. Дополнение

Здравствуйте! Просьба дополнить торговую панель с использованием классов стандартной библиотеки МТ4
из поста блога AM2 mql.opentraders.ru/33213.html

1. Добавить функции на кнопки:
Закрыть:
Sell[X]/Buy[X] = закрыть все Sell/Buy ордера
SPrf[X]/BPrf[X] = закрыть все профитные Sell/Buy ордера
CloseAllProfit=«Prft[X]» = закрыть все профитные ордера
CloseAll=«CLOSE» = закрыть все ордера
CloseStopOrders=«Stp[X]» = удалить все стоп ордера
CloseLimitOrders=«Lim[X]» = удалить все лимит ордера
ClosePendingOrders=«PO[X]» = удалить все отложенные ордера
Открыть:
SellLimit=«S-Lim», SellStop=«S-Stop», BuyLimit=«B-Lim», BuyStop=«B-Stop»
Добавить в параметры:
Отступы от цены: — для Stop ордеров, — для Limit ордеров
//extern int StopDelta   = 150;   // отступ от цены Stop ордеров
//extern int LimitDelta  = 150;   // отступ от цены Limit ордеров

Кнопки уже добавлены в панельку, см. рис.

Функции можно взять свои, или из советника Скрипт управления ордерами — скрипт для MetaTrader 4 (пример)(может работать как советник или как скрипт) www.mql5.com/ru/code/15091

Оттуда же добавить функцию вывода по кнопке вертикального отрезка захвата группы ордеров, которые надо обработать (закрыть)
на кнопку GroupOrdersVLine=«Group». Кнопка фиксируемая (залипает).
Когда она нажата — выводится вертикальный отрезок(линия) который можно менять по высоте, захватив конкретную группу ордеров.
Тогда по остальным кнопкам/функциям закрытия ордеров закрываются только те ордера, которые захватывает (пересекает) этот отрезок линии. Остальные ордера остаются нетронутыми.
Когда отжата — вертикальный отрезок(линия) удаляется(отстутствует) и по кнопкам/функциям обработки ордеров обрабатываются/закрываются все соответствующие ордера на графике.
Слева вверху также выводятся данные захваченных отрезком(или всех) ордеров (код/функция в советнике)
см. рис.


2. Сделать независимых 2 поля ввода лотности ордеров — для Sell и Buy отдельные.
Начальное значение лот(ов) устанавливается по умолчанию из параметров советника,
при замене значения в полях лотов — значение для ордеров меняется и берётся оттуда (изменённое).

3. Поправить корректность вывода панельки при перемещении и смене ТФ в окне (сейчас остаются какие-то следы), при замене советника на другой или закрытии его — иногда закрывается всё окно графика, где он установлен.
см. рис.


— В приложении: вариант панельки с подготовленным под функции/кнопки кодом TradePanel_1.0.mq4
TradePanel_1.0.mq4 (34 Kb)
В коде советника (панельки) сделаны предварительные заготовки: разметка кнопок, операторы:
class: public CAppDialog стр. 30-100

//+------------------------------------------------------------------+
//|      class CTradePanel                                                            |
//+------------------------------------------------------------------+
class CTradePanel : public CAppDialog
  {
private:

//   CLabel            Lots_label;                      // Display label " Lots"

   CEdit             Lots;                            // Display volume of next order    
//   CEdit             LotsSell;                            // Display volume of next order SELL
//   CEdit             LotsBuy;                            // Display volume of next order BUY   
   CButton           SELL,BUY;                        // Sell and Buy Buttons
//   CButton           CloseAll;                        // Close buttons
// добавлены кнопки
//  1 колонка 
   CButton           CloseSell;                    // CloseAllSell buttons
   CButton           CloseSellProfit;              // CloseSellProfit buttons  
   CButton           CloseAll;                     // Close buttons    
   CButton           SellLimit;                    // SellLimit buttons   
   CButton           SellStop;                     // CloseAllSell buttons 
   CButton           CloseStopOrders;              // CloseAllStopOrders buttons    
   CButton           ClosePendingOrders;           // CloseAllPendingOrders buttons     
   
//  2 колонка      
   CButton           CloseBuy;                     // CloseAllBuy buttons
   CButton           CloseBuyProfit;               // CloseBuyProfit buttons   
   CButton           CloseAllProfit;               // CloseAllProfit buttons   
   CButton           BuyLimit;                     // BuyLimit buttons
   CButton           BuyStop;                      // BuyStop buttons       
   CButton           CloseLimitOrders;             // CloseAllLimitOrders buttons    
   CButton           GroupOrdersVLine;             // GroupOrdersVerticalLine buttons    

   //--- Create Label object
   bool              CreateLabel(const long chart,const int subwindow,CLabel &object,const string text,const uint x,const uint y,label_align align);
   //--- Create Button
   bool              CreateButton(const long chart,const int subwindow,CButton &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size);
   //--- Create Edit object
   bool              CreateEdit(const long chart,const int subwindow,CEdit &object,const string text,const uint x,const uint y,const uint x_size,const uint y_size);

   //--- On Event functions
   void              LotsEndEdit(void);               // Edit Lot size   
//   void              LotsSellEndEdit(void);               // Edit Lot size Sell
//   void              LotsBuyEndEdit(void);               // Edit Lot size Buy
   //--- variables of current values
   double            cur_lot;                         // Lot of next order
//   double            cur_lotsell;                         // Lot of next order Sell
//   double            cur_lotbuy;                         // Lot of next order Buy  
   
   void              BuyClick();                      // Click BUY button
   void              SellClick();                     // Click SELL button
//   void              CloseClick();                  // Click CLOSE button 
   
// добавлены кнопки
//  1 колонка 
   void           CloseSellClick();                    // CloseSell buttons
   void           CloseSellProfitClick();              // CloseSellProfit buttons  
   void           CloseClick();                        // Close buttons    
   void           SellLimitClick();                    // SellLimit buttons   
   void           SellStopClick();                     // SellStop buttons 
   void           CloseStopOrdersClick();              // CloseStopOrders buttons    
   void           ClosePendingOrdersClick();           // ClosePendingOrders buttons     
   
//  2 колонка      
   void           CloseBuyClick();                     // CloseBuy buttons
   void           CloseBuyProfitClick();               // CloseBuyProfit buttons   
   void           CloseAllProfitClick();               // CloseAllProfit buttons   
   void           BuyLimitClick();                     // BuyLimit buttons
   void           BuyStopClick();                      // BuyStop buttons       
   void           CloseLimitOrdersClick();             // CloseLimitOrders buttons    
   void           GroupOrdersVLineClick();             // GroupOrdersVerticalLine buttons 


Create object и Event Handling стр. 221-286

//+------------------------------------------------------------------+
//|       CTradePanel                                                            |
//+------------------------------------------------------------------+
bool CTradePanel::Create(const long chart,const string name,const int subwin=0,const int x1=20,const int y1=20,const int x2=320,const int y2=420)
  {
// At first call create function of parents class
   CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);

// Calculate coordinates and size of BID object

// Create object
//   CreateLabel(chart,subwin,LotsSell_label,"LOT",55,5,0);
   CreateEdit(chart,subwin,Lots,"0.1",3,3,45,20);
//   CreateEdit(chart,subwin,LotsSell,"0.1",3,3,45,20);
   CreateButton(chart,subwin,SELL,"SELL",3,25,45,20);
   CreateButton(chart,subwin,CloseSell,"Sell[X]",3,48,45,20);
   CreateButton(chart,subwin,CloseSellProfit,"SPrf[X]",3,71,45,20);
   CreateButton(chart,subwin,CloseAll,"CLOSE",3,94,45,20);
   CreateButton(chart,subwin,SellLimit,"S-Lim",3,117,45,20);
   CreateButton(chart,subwin,SellStop,"S-Stop",3,140,45,20);
   CreateButton(chart,subwin,CloseStopOrders,"Stp[X]",3,163,45,20);   
   CreateButton(chart,subwin,ClosePendingOrders,"PO[X]",3,186,45,20); 
      
////////// 2 колонка  

   CreateEdit(chart,subwin,Lots,"0.1",50,3,45,20);
//   CreateEdit(chart,subwin,LotsBuy,"0.1",50,3,45,20);
   CreateButton(chart,subwin,BUY,"BUY",50,25,45,20);
   CreateButton(chart,subwin,CloseBuy,"Buy[X]",50,48,45,20);
   CreateButton(chart,subwin,CloseBuyProfit,"BPrf[X]",50,71,45,20);
   CreateButton(chart,subwin,CloseAllProfit,"Prft[X]",50,94,45,20);
   CreateButton(chart,subwin,BuyLimit,"B-Lim",50,117,45,20);
   CreateButton(chart,subwin,BuyStop,"B-Stop",50,140,45,20);
   CreateButton(chart,subwin,CloseLimitOrders,"Lim[X]",50,163,45,20);
   CreateButton(chart,subwin,GroupOrdersVLine,"Group",50,186,45,20);      
   return(true);
  }
//+------------------------------------------------------------------+
//| Event Handling                                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CTradePanel)
ON_EVENT(ON_END_EDIT,Lots,LotsEndEdit)
//ON_EVENT(ON_END_EDIT,LotsSell,LotsEndEdit)
//ON_EVENT(ON_END_EDIT,LotsBuy,LotsEndEdit)
ON_EVENT(ON_CLICK,SELL,SellClick)
ON_EVENT(ON_CLICK,BUY,BuyClick)
//ON_EVENT(ON_CLICK,CloseAll,CloseClick)
// добавлены кнопки
//  1 колонка 
//ON_EVENT(ON_CLICK,CloseSell,CloseSellClick)
//ON_EVENT(ON_CLICK,CloseSellProfit,CloseSellProfitClick)
ON_EVENT(ON_CLICK,CloseAll,CloseClick)
//ON_EVENT(ON_CLICK,SellLimit,SellLimitClick)
//ON_EVENT(ON_CLICK,SellStop,SellStopClick)
//ON_EVENT(ON_CLICK,CloseStopOrders,CloseStopOrdersClick)
//ON_EVENT(ON_CLICK,ClosePendingOrders,ClosePendingOrdersClick)
////////// 2 колонка 
//ON_EVENT(ON_CLICK,CloseBuy,CloseBuyClick)
//ON_EVENT(ON_CLICK,CloseBuyProfit,CloseBuyProfitClick)
//ON_EVENT(ON_CLICK,CloseAllProfit,CloseAllProfitClick)
//ON_EVENT(ON_CLICK,BuyLimit,BuyLimitClick)
//ON_EVENT(ON_CLICK,BuyStop,BuyStopClick)
//ON_EVENT(ON_CLICK,CloseLimitOrders,CloseLimitOrdersClick)
//ON_EVENT(ON_CLICK,GroupOrdersVLine,GroupOrdersVLineClick)
//
EVENT_MAP_END(CAppDialog)

Координаты панельки: стр. 118
// Create Trade Panel
   TradePanel.Create(ChartID(),"Panelka",0,100,1,206,240); 

Компиляция:
  • 0
  • Просмотров: 2602
  • 20 декабря 2021, 15:45
  • preasto
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Нужен советник по индикатору "Volumes"
Следующая запись в группе  
Изменение советника
18 декабря 2021
22 декабря 2021

Комментарии (14)

+
+1
здесь навыки нужны по работе с классами графических объектов. посмотрю завтра что можно быстро сделать.
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 20 декабря 2021, 18:10
+
0
быстро такую штуку не сделаешь. также не удалось побороть глюк со меной тф
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 21 декабря 2021, 21:08
+
0
Андрей, может быть, тогда, добавите эти функции и кнопки в советник/панель cm_control.mq4? К тем, что там уже есть.
Могу там разметку панели с этими полями и кнопками сделать
Редактирован: 22 декабря 2021, 14:47
avatar

  11  preasto Автор Сообщений: 445

  • 22 декабря 2021, 14:45
+
+1
я вчера долго его делал. процентов 70 сделал. сегодня еще чуть чуть доделаю и скину
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 22 декабря 2021, 17:27
+
+1
просто конский объем работы. 90% сделано. считывание с полей редактирования на потом



www.opentraders.ru/downloads/3205/
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 22 декабря 2021, 21:11
+
+1
доделал считывание: www.opentraders.ru/downloads/3205/
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 25 декабря 2021, 08:57
+
0
Андрей, благодарю! Панелька отлично работает, все основные функции, кнопки есть для удобной работы по ручным стратегиям, в т.ч. для быстрого скальпинга.
Окна для дистанции отложек с записью прямо в панеле тоже весьма удобны при работе.*good* 

По окнам дистанций для отложек:
Для Sell всё нормально:
Для Sell Limit берёт значение из правого окна, под кн. «Lim[X]»
для Sell Stop берёт дистанцию из левого окна под кн. «St[X]»
Но для Buy и Limit и Stop — всё берёт из левого окна под кн. «St[X]».

Просьба поправить, сделать взятие дистанции для Buy Limit из правого окна, под кн. «Lim[X]»
Т.е. левое окно дистанций отложек — для всех Стоп-ордеров,
правое — для всех Лимит-ордеров

Также панелька не работает в тестере… Хорошо бы, чтобы и в тестере заработала.
И, по-возможности, добавить параметр/функцию — виртуальные отложки (да/нет), когда выводит линию места отложки, а ордер открывает при достижении её ценой, для того же тестера в т.ч. *hi* 
avatar

  11  preasto Автор Сообщений: 445

  • 28 декабря 2021, 11:07
+
0
у меня по дельте — левое байстоп байлимит,
правое окно селллимит селлстоп. тоже по лотам
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 28 декабря 2021, 20:49
+
0
проверил ещё раз по дельте: (поменял в окнах дельты отступы на 100 и 200)
правое окно — только селллимит
левое байстоп байлимит, и селлстоп

Редактирован: 28 декабря 2021, 21:27
avatar

  11  preasto Автор Сообщений: 445

  • 28 декабря 2021, 21:27
+
0
нет все правильно:

avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 28 декабря 2021, 21:32
+
0
И вернулся глюк* с перемещением панельки:
она ни с того, ни с сего пропадает из окна через неск. мин,
*глюк был в версии от 25.12.21, в версии от 28.12.21 пока всё норм.

Но когда открываешь свойства советника кнопкой с графика из меню и снова сохраняешь, появляется со сдвигом слоёв,
при этом меняешь в параметрад отступ(дельту) на 250 или др. — а вылазит в окнах всегда 300**:
**проблема начала решаться, см. след пост ниже


Редактирован: 29 декабря 2021, 11:26
avatar

  11  preasto Автор Сообщений: 445

  • 28 декабря 2021, 21:36
+
0
перекачал сов — версия от 28.12.21 (была от 25.12)— в окнах дельты всё так:
левое байстоп байлимит,
правое окно селллимит селлстоп.
И глюков при перезапуске и смене ТФ, в новой версии от 28.12.21 вроде нет, пока всё норм.
Но при смене лотов и делты в параметрах (на 0.2 и 250) — в окнах остаются те же значения: 0.1 и 300**

**проблема начала решаться, см. след пост ниже


Редактирован: 29 декабря 2021, 11:26
avatar

  11  preasto Автор Сообщений: 445

  • 28 декабря 2021, 21:49
+
0
дальше не ко мне
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 28 декабря 2021, 22:06
+
0
поменял в строках 161-165 «0.1» и «300» на extern int Lot и Delta:
<code>
   CreateEdit(chart,subwin,BLot,Lot,5,5,45,20); // (chart,subwin,BLot,"0.1",5,5,45,20);
   CreateEdit(chart,subwin,SLot,Lot,55,5,45,20); // (chart,subwin,SLot,"0.1",55,5,45,20);

   CreateEdit(chart,subwin,BDelta,Delta,5,205,45,20); // (chart,subwin,BDelta,"300",5,205,45,20);
   CreateEdit(chart,subwin,SDelta,Delta,55,205,45,20); // (chart,subwin,SDelta,"300",55,205,45,20);
</code>

стало в окна выводить то, что задано в этих параметрах свойств советника.

При компиляции по этим строкам пишет предупреждение:
implicit conversion from 'number' to 'string' TradePanel_28.12.21.mq4 162(строка) 33(столбец)

внесённые надписи и Lot и Delta там выделены тёмно-красным (остальной код черным)

Может что-то некорректно по правилам кода?
Что подправить?



Редактирован: 28 декабря 2021, 23:53
avatar

  11  preasto Автор Сообщений: 445

  • 28 декабря 2021, 23:50

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