Объект "Кнопка"

 

Приветствую Всех ! MT4  как передать в кнопку , имя + значение  ( пример кнопка Lots = 0.1) ?

Заранее всем спасибо ! 

 
Dark_333:

Приветствую Всех ! MT4  как передать в кнопку , имя + значение  ( пример кнопка Lots = 0.1) ?

Заранее всем спасибо ! 

class CMyButton : public CChartObjectButton
{
        public:
        string  desc;
        double value;
};
...
CMyButton button;
button.Description(button.desc+"="+DoubleToString(button.value,2));

например так

 
Aleksey Mavrin:

например так

А как потом из OnChartEvent() добраться до этого класса. Все тоже самое, только вид с другого бока.

 
Aleksey Mavrin:

Если не затруднит разжевать, с классами ещё не работал .  


#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern bool Objects  = true; // Удалять все объекты при выгрузке Советника
double Lots;        // переменная для расчёта лота
string lots; 


//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
   //--- удаление всех созданных объектов
   int i;
   int obj_total=ObjectsTotal();
   //PrintFormat("Всего %d объектов",obj_total);
   if(Objects)
     {
      for(i=obj_total-1;i>=0;i--)
         {
          string name=ObjectName(i);
          PrintFormat("Объект %d: %s",i,name);
          ObjectDelete(name);
         }
     }
  //----------------------  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   PutButton(0,"R",lots ); // Кнопка Lots
  }
//+------------------------------------------------------------------+
//----------------------------------------------------------------------------
//                функция установки объекта «Кнопка»
//----------------------------------------------------------------------------

void PutButton(int n,string name ,string text)
  {
   int y=20+n*25;
   int x=66;
   if(ObjectFind(name)<0)
     {
     ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
     //--- установим координаты кнопки
     ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
     ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
     //--- установим размер кнопки
     ObjectSetInteger(0,name,OBJPROP_XSIZE,65);
     ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
     //--- установим угол графика, относительно которого будут определяться координаты точки
     ObjectSetInteger(0,name,OBJPROP_CORNER,1);
     //--- установим цвет границы
     ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrBlack);

     
//--- ------------------Kнопка Авто LOTS --------------------------------
   if(ObjectGetInteger(0,"R",OBJPROP_STATE)) // Состояние кнопки (Нажата/Отжата)
     {
      ObjectSetString(0,"R",OBJPROP_TEXT,lots);
      ObjectSetInteger(0,"R",OBJPROP_BGCOLOR,clrGainsboro); // установим цвет фона
      ObjectSetString (0,"R",OBJPROP_FONT,"Arial");         // установим шрифт текста
      ObjectSetInteger(0,"R",OBJPROP_COLOR,clrGreen);       // установим цвет текста кнопки
     }
   else 
     { 
     
     } 
   }
 }
 
Dark_333:

Приветствую Всех ! MT4  как передать в кнопку , имя + значение  ( пример кнопка Lots = 0.1) ?

Заранее всем спасибо ! 

Можно сделать надпись на кнопке с величиной лота, например "Buy 0.1". Когда поймаешь событие в OnChartEvent(), взять надпись и отделить число. Неплохой способ - двух зайцев убивает - и удобство для пользователя и программируется легко. 

Еще можно OBJPROP_TOOLTIP использовать.

Еще можно глобальную переменную терминала использовать. Имя переменой сформировать из хэндла чарта и имени кнопки.

Еще можно сохранять лот в лэйблу (OBJ_LABEL). Разместить ее за пределами графика, имя сделать как у кнопки, но с добавкой - будет очень удобно. Тоже неплохой способ, легкий в реализации.

 
Dmitry Fedoseev:

Можно сделать надпись на кнопке с величиной лота, например "Buy 0.1". 


   этот вариант рассматривал предать имя кнопки из функции расчета авто лота , 

//+-------------------------------------------------------------------------+
//                       Функция расчета лота от прибыли                    +                                                   +
//+-------------------------------------------------------------------------+
// double Lots; глобальная переменная
//string lots;        // переменная для отоброжения имя кнопки от лота
double FloatingLots()
  {
   double Lots1=1200,Lots2=2200,Lots3=3200,Lots4=4200,Lots5=5200,Lots6=6200,Lots7=7200,Lots8=8200,Lots9=9200,Lots10=10200;
   if(AccountBalance()<=Lots1){Lots=0.1; lots="Lots 0.1";}
   if(AccountBalance()>=Lots1 && AccountBalance()<=Lots2){Lots=0.2;lots="Lots 0.2";}
   if(AccountBalance()>=Lots2 && AccountBalance()<=Lots3){Lots=0.3;lots="Lots 0.3";}
   if(AccountBalance()>=Lots3 && AccountBalance()<=Lots4){Lots=0.4;lots="Lots 0.4";}
   if(AccountBalance()>=Lots4 && AccountBalance()<=Lots5){Lots=0.5;lots="Lots 0.5";}
   if(AccountBalance()>=Lots5 && AccountBalance()<=Lots6){Lots=0.6;lots="Lots 0.6";}
   if(AccountBalance()>=Lots6 && AccountBalance()<=Lots7){Lots=0.7;lots="Lots 0.7";}
   if(AccountBalance()>=Lots7 && AccountBalance()<=Lots8){Lots=0.8;lots="Lots 0.8";}
   if(AccountBalance()>=Lots8 && AccountBalance()<=Lots9){Lots=0.9;lots="Lots 0.9";}
   if(AccountBalance()>=Lots9 && AccountBalance()<=Lots10){Lots=1; lots="Lots 1";}
   if(AccountBalance()>=Lots9 && AccountBalance()>Lots10){Lots=1;  lots="Lots 1";}
   return(Lots);
  } 


   а как передать в кнопку SEEL количество открытых сделок , ну и также кнопка BAY .

   

 
Dark_333:

   этот вариант рассматривал предать имя кнопки из функции расчета авто лота , 


   а как передать в кнопку SEEL количество открытых сделок , ну и также кнопка BAY .

   

А зачем? Не надо. Как отловили событие нажатия кнопки, так собирайте все нужные данные.

 
Dmitry Fedoseev:

А зачем? Не надо. Как отловили событие нажатия кнопки, так собирайте все нужные данные.

Ок


всем спасибо ! разобрался вот таким путём

string lots;        // переменная для отоброжения имя кнопки Lots
string sell;        // переменная для отоброжения имя кнопки Sell
string bay;         // переменная для отоброжения имя кнопки Bay    

void OnTick()
    {   
    //--------------- переменные кнопок---------+
     if(Seconds()!=Time_Seconds)
       {
        Time_Seconds=Seconds();
        lots=("Lots "+DoubleToStr(FloatingLots(),1));
        bay=("BAY "+IntegerToString(CountBuy()));
        sell=("SELL "+IntegerToString(CountSell()));
       }
       
     PutButton(1,"A","Torgovliy"); // Кнопка Автоматической торговля по сигналам
     PutButton(2,"B","Tral-Stop"); // Кнопка Автоматического Trailing-Stop
     PutButton(3,"E","Skalping"); // Кнопка торговли Skalping
     PutButton(4,"C",bay);  // Кнопка торговли в один клик BAY
     PutButton(5,"R",lots); // Кнопка LOTS
     PutButton(6,"D",sell); // Кнопка торговли в один клик SELL
Причина обращения: