Нужен совет! 4 копии советника на 4 графиках. Торговать должен только тот что на активном окне

 

Подскажите!

4 копии советника на 4 графиках. Торговать должен только тот, что на активном окне (сейчас открываются 4 сделки, каждая в своей копии).

Советник имеет интефейс с кнопками которые тоже надо синхронизировать.......

 
NGMsakh:

Подскажите!

4 копии советника на 4 графиках. Торговать должен только тот, что на активном окне (сейчас открываются 4 сделки, каждая в своей копии).

Советник имеет интефейс с кнопками которые тоже надо синхронизировать.......

void OnInit(void)
{
   string nm="myButt_1"+Symbol();
   ObjectCreate(0,nm,OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,nm,OBJPROP_XSIZE,50);
   ObjectSetInteger(0,nm,OBJPROP_YSIZE,20);
   ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,20);
   //--
          nm="myButt_2"+Symbol();
   ObjectCreate(0,nm,OBJ_BUTTON,0,0,0);
   ObjectSetInteger(0,nm,OBJPROP_XSIZE,50);
   ObjectSetInteger(0,nm,OBJPROP_YSIZE,20);
   ObjectSetInteger(0,nm,OBJPROP_YDISTANCE,50);
}

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//--- проверим событие на нажатие кнопки мышки
   if(id==CHARTEVENT_OBJECT_CLICK && ObjectGetInteger(0,sparam,OBJPROP_TYPE)==OBJ_BUTTON) {
      long currChart=ChartFirst();
      int i=0;
      while(i<CHARTS_MAX) { // у нас наверняка не больше CHARTS_MAX открытых графиков
         if(ObjectGetInteger(0,sparam,OBJPROP_STATE)) {
            ObjectSetInteger(currChart,sparam,OBJPROP_STATE,true);
            ObjectSetString(currChart,sparam,OBJPROP_TEXT,"ON");
            ChartRedraw(currChart);
         } else {
            ObjectSetInteger(currChart,sparam,OBJPROP_STATE,false);
            ObjectSetString(currChart,sparam,OBJPROP_TEXT,"OFF");
            ChartRedraw(currChart);
         }
         currChart=ChartNext(currChart); // на основании предыдущего получим новый график
         if(currChart==-1) break;        // достигли конца списка графиков
         i++;                            // не забудем увеличить счетчик
      }
   }
}
 
Глобальные переменные для синхронизации?
 
NGMsakh:

Подскажите!

4 копии советника на 4 графиках. Торговать должен только тот, что на активном окне (сейчас открываются 4 сделки, каждая в своей копии).

Советник имеет интефейс с кнопками которые тоже надо синхронизировать.......

void OnTick(void)
{
  // if(ChartGetInteger(0, CHART_BRING_TO_TOP)) return; // Окно не активно - выход

   if(ChartGetInteger(0, CHART_BRING_TO_TOP)) {
      // Выполняется код, если окно активно
      Print("Active: ",Period());
   }
}
 
Aleksandr Morozov:
Глобальные переменные для синхронизации?

Да Глобальные переменные для синхронизации. 

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные - Переменные - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
NGMsakh:

Да Глобальные переменные для синхронизации. 

Зачем, если это делается простейшим путём без них, тем более что дал рабочий код

 
добавьте внешний параметр на разрешение торговли
 
Vitaly Muzichenko:

Зачем, если это делается простейшим путём без них, тем более что дал рабочий код

Кнопками управляют самописные функции, чтоб не писать много буков под каждую кнопку. То есть одна функция на 6 кнопок и еще одна на 4 кнопки и тд. Изначально пошди по пути глобальных переменных.

Подскажите, как решить проблему синхронизации кнопок с такими вводными? 

 
NGMsakh:

Кнопками управляют самописные функции, чтоб не писать много буков под каждую кнопку. То есть одна функция на 6 кнопок и еще одна на 4 кнопки и тд. Изначально пошди по пути глобальных переменных.

Подскажите, как решить проблему синхронизации кнопок с такими вводными? 

//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//--- проверим событие на нажатие кнопки мышки
   if(id==CHARTEVENT_OBJECT_CLICK && ObjectGetInteger(0,sparam,OBJPROP_TYPE)==OBJ_BUTTON) {
      long currChart=ChartFirst();
      int i=0;
      while(i<CHARTS_MAX) { // у нас наверняка не больше CHARTS_MAX открытых графиков
         if(ObjectGetInteger(0,sparam,OBJPROP_STATE)) {
            ObjectSetInteger(currChart,sparam,OBJPROP_STATE,true);
            ChartRedraw(currChart);
         } else {
            ObjectSetInteger(currChart,sparam,OBJPROP_STATE,false);
            ChartRedraw(currChart);
         }
         currChart=ChartNext(currChart); // на основании предыдущего получим новый график
         if(currChart==-1) break;        // достигли конца списка графиков
         i++;                            // не забудем увеличить счетчик
      }
   }
}
 
Vitaly Muzichenko:
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
   if(id == CHARTEVENT_OBJECT_CLICK && ObjectGetInteger(0, sparam, OBJPROP_TYPE) == OBJ_BUTTON)
   {
      long currChart = ChartFirst();
      int i = 0;
      while(i < CHARTS_MAX) // у нас наверняка не больше CHARTS_MAX открытых графиков
      {
//+------------------------------------------------------------------+
//|     КНОПКА BIGSIG                                                |
//+------------------------------------------------------------------+
         if(sparam == "BIGSIG")
         {
            if(ObjectGetInteger(0, "BIGSIG", OBJPROP_STATE))
            {
               BIGSIG = true;
               GlobalVariableSet("BIGSIG", BIGSIG);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_STATE, BIGSIG);
               //SetSTTX("BIGSIG", NULL, BIGSIG, NULL);

               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_BGCOLOR, C'0,151,167');
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_BORDER_COLOR, clrBlue);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_COLOR, clrLime);

            }
            else
            {
               BIGSIG = false;
               GlobalVariableSet("BIGSIG", BIGSIG);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_STATE, BIGSIG);
               //SetSTTX("BIGSIG", NULL, BIGSIG, NULL);

               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_BGCOLOR, clrDarkGray);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_BORDER_COLOR, clrBlack);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_COLOR, clrWhite);


            }
            //GlobalVariableSet("BIGSIG", BIGSIG);
            SetSTTX("BIGSIG", NULL, BIGSIG, NULL);
            ChartRedraw(currChart);
            Alert("BIGSIG = ", BIGSIG);
            Alert( GlobalVariableGet("BIGSIG"));


         }
         //if(ObjectGetInteger(0, sparam, OBJPROP_STATE))
         //{
         //   ObjectSetInteger(currChart, sparam, OBJPROP_STATE, true);
         //   ObjectSetString(currChart, sparam, OBJPROP_TEXT, "ON");
         //   ChartRedraw(currChart);
         //}
         //else
         //{
         //   ObjectSetInteger(currChart, sparam, OBJPROP_STATE, false);
         //   ObjectSetString(currChart, sparam, OBJPROP_TEXT, "OFF");
         //   ChartRedraw(currChart);
         //}
         currChart = ChartNext(currChart); // на основании предыдущего получим новый график
         if(currChart == -1) break;      // достигли конца списка графиков
         i++;                            // не забудем увеличить счетчик
      }
   }

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Типы событий графика - Константы графиков - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Как передать в функцию SetSTTX("BIGSIG", NULL, BIGSIG, NULL) значение глобальной переменной на всех графиках, а не только на текущем? 

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