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

Рейтинг 2146



РЕКОМЕНДУЮ



оБРАЗЕЦ

Добрый день Андрей, прошу создать пример — индикатор. в котором будут 2 кнопки работать параллельно.
т.е Если нажать 1 кнопку(включить) то и 2-я кнопка тоже будет нажатой и при этой будет показываться на экране например красный прямоугольник ( OBJ_RECTANGLE ). При повторном нажатии на кнопку(не важно какую) прямоугольник должен удалиться и кнопки перевестись в состояние выкл.
Иными словами мне нужен пример с 2-мя кнопка которые бы работали параллельно, т.е не важно какую кнопку нажать должно происходить действие.
Нажали 1 кнопку (сразу 2 кнопки включились, перевелись в состояние нажатия) — произошло действие(например с прямоугольником).
Чтобы можно было включить одной кнопкой и выключить другой.
  • 0
  • Просмотров: 1175
  • 31 августа 2020, 18:19
  • lafler356
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник на индикаторе phil-Peak.
Следующая запись в группе  
Простейший советник
30 августа 2020
31 августа 2020

Брокер для ваших роботов, 15 лет на рынке

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

+
0
на 3-е
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 31 августа 2020, 19:39
+
0
Спасибо, буду ждать
avatar

  9  lafler356 Автор Сообщений: 305

  • 1 сентября 2020, 10:36
+
0
готово:




//+------------------------------------------------------------------+
//|                                                        Baton.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   PutButton("B",100,120,"BUY");
   PutButton("S",100,80,"SELL");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- уничтожим таймер при завершении работы
   ObjectDelete(0,"OK");
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   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,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTumb()
  {
   ObjectDelete(0,"OK");
   ObjectCreate(0,"OK",OBJ_ARROW_THUMB_UP,0,Time[0],High[0]);
//--- установим способ привязки
   ObjectSetInteger(0,"OK",OBJPROP_ANCHOR,0);
//--- установим цвет знака
   ObjectSetInteger(0,"OK",OBJPROP_COLOR,Aqua);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(0,"OK",OBJPROP_STYLE,0);
//--- установим размер знака
   ObjectSetInteger(0,"OK",OBJPROP_WIDTH,9);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,"OK",OBJPROP_BACK,0);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,"OK",OBJPROP_SELECTABLE,1);
   ObjectSetInteger(0,"OK",OBJPROP_SELECTED,1);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,"OK",OBJPROP_HIDDEN,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
     
   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      PutTumb();
      ObjectSetInteger(0,"S",OBJPROP_STATE,1);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      PutTumb();
      ObjectSetInteger(0,"B",OBJPROP_STATE,1);
     }

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==0)
     {
      ObjectDelete(0,"OK");
      ObjectSetInteger(0,"S",OBJPROP_STATE,0);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==0)
     {
      ObjectDelete(0,"OK");
      ObjectSetInteger(0,"B",OBJPROP_STATE,0);
     }
     
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 3 сентября 2020, 20:59
+
0
Спасибо но не правильно работает


При нажатии на селл — бай через секунду-две только нажимается, и если я нажму на бай кнопки не выключатся.
avatar

  9  lafler356 Автор Сообщений: 305

  • 4 сентября 2020, 06:52
+
0
вот этот код действует без тика и точно по тз:


//+------------------------------------------------------------------+
//|                                                        Baton.mq4 |
//|                                              Copyright 2020, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   PutButton("B",100,120,"BUY");
   PutButton("S",100,80,"SELL");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectDelete(0,"OK");
   ObjectDelete(0,"B");
   ObjectDelete(0,"S");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutButton(string name,int x,int y,string text)
  {
   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,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,3);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(0,name,OBJPROP_ZORDER,0);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTumb()
  {
   ObjectDelete(0,"OK");
   ObjectCreate(0,"OK",OBJ_ARROW_THUMB_UP,0,Time[0],High[0]);
//--- установим способ привязки
   ObjectSetInteger(0,"OK",OBJPROP_ANCHOR,0);
//--- установим цвет знака
   ObjectSetInteger(0,"OK",OBJPROP_COLOR,Aqua);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(0,"OK",OBJPROP_STYLE,0);
//--- установим размер знака
   ObjectSetInteger(0,"OK",OBJPROP_WIDTH,9);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(0,"OK",OBJPROP_BACK,0);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(0,"OK",OBJPROP_SELECTABLE,1);
   ObjectSetInteger(0,"OK",OBJPROP_SELECTED,1);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(0,"OK",OBJPROP_HIDDEN,0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {

  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      if(sparam=="B")
        {
         ObjectSetInteger(0,"S",OBJPROP_STATE,1);
         PutTumb();
        }

      if(sparam=="S")
        {
         ObjectSetInteger(0,"B",OBJPROP_STATE,1);
         PutTumb();
        }
     }

   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==0)
     {
      ObjectDelete(0,"OK");
      ObjectSetInteger(0,"S",OBJPROP_STATE,0);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==0)
     {
      ObjectDelete(0,"OK");
      ObjectSetInteger(0,"B",OBJPROP_STATE,0);
     }
  }
//+------------------------------------------------------------------+


Редактирован: 6 сентября 2020, 08:47
avatar

  35  AM2 Сообщений: 16276 - Андрей

  • 4 сентября 2020, 18:17
+
0
Спасибо, то что нужно! Класс, супер
avatar

  9  lafler356 Автор Сообщений: 305

  • 6 сентября 2020, 18:45

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