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

 
NGMsakh:

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

Код в чистом виде не сработал?

Вам же нужна синхронизация кнопок на всех графиках с одинаковым символом?

 
Четыре графика, четыре советника, торгует только один на активном окне. И что, после этого не дышать на терминал? Сделать, чтобы каждый советник создавал одну кнопку - вкл/выкл. Самостоятельны выключать ненужные и включать нужный.
 
Vitaly Muzichenko:

Код в чистом виде не сработал?

Вам же нужна синхронизация кнопок на всех графиках с одинаковым символом?

Ваш код отправляет всем графикам событие  OnChartEvent()

В моём случае состоянием кнопки управляют функция SetSTTX("BIGSIG", NULL, BIGSIG, NULL) вызываемая в OnInit() при создании и в OnChartEvent() при изменении состояния
То есть необходимо передать значение глобальной переменной BIGSIG в функцию SetSTTX("BIGSIG", NULL, BIGSIG, NULL) каждому советнику на каждом графике.

 
NGMsakh:

Ваш код отправляет всем графикам событие  OnChartEvent()

В моём случае состоянием кнопки управляют функция SetSTTX("BIGSIG", NULL, BIGSIG, NULL) вызываемая в OnInit() при создании и в OnChartEvent() при изменении состояния
То есть необходимо передать значение глобальной переменной BIGSIG в функцию SetSTTX("BIGSIG", NULL, BIGSIG, NULL) каждому советнику на каждом графике.

void SetSTTX( string name, string name2, bool state, bool state2)
{
   if(state && !state2)
   {
      ObjectSetInteger(0, name, OBJPROP_BGCOLOR, C'0,151,167');
      ObjectSetInteger(0, name, OBJPROP_BORDER_COLOR, clrBlue);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clrLime);

      ObjectSetInteger(0, name2, OBJPROP_BGCOLOR, clrDarkGray);
      ObjectSetInteger(0, name2, OBJPROP_BORDER_COLOR, clrBlue);
      ObjectSetInteger(0, name2, OBJPROP_COLOR, clrWhite);

   }
   if(!state && !state2 )
   {
      ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrDarkGray);
      ObjectSetInteger(0, name, OBJPROP_BORDER_COLOR, clrBlack);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);

      ObjectSetInteger(0, name2, OBJPROP_BGCOLOR, clrDarkGray);
      ObjectSetInteger(0, name2, OBJPROP_BORDER_COLOR, clrBlue);
      ObjectSetInteger(0, name2, OBJPROP_COLOR, clrWhite);
   }
   if(state2)
   {
      ObjectSetInteger(0, name2, OBJPROP_BGCOLOR, clrRed);    
      ObjectSetInteger(0, name2, OBJPROP_COLOR, clrBlack);           
      ObjectSetInteger(0, name2, OBJPROP_BORDER_COLOR, clrRed);    

      ObjectSetInteger(0, name, OBJPROP_BGCOLOR, clrDarkGray);
      ObjectSetInteger(0, name, OBJPROP_BORDER_COLOR, clrBlack);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);
   }
   ObjectSetInteger(0, name, OBJPROP_STATE, state);
   ObjectSetInteger(0, name2, OBJPROP_STATE, state2);

   ChartRedraw();
}
 
NGMsakh: Вот код в OnChartEvent()
//+------------------------------------------------------------------+
//|     КНОПКА BIGSIG                                                |
//+------------------------------------------------------------------+
         if(sparam == "BIGSIG")
         {
            if(ObjectGetInteger(0, "BIGSIG", OBJPROP_STATE))
            {
               BIGSIG = true;
               GlobalVariableSet("BIGSIG", BIGSIG);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_STATE, BIGSIG);
            }
            else
            {
               BIGSIG = false;
               GlobalVariableSet("BIGSIG", BIGSIG);
               ObjectSetInteger(currChart, "BIGSIG", OBJPROP_STATE, 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++;                            // не забудем увеличить счетчик
      }
   }
 
NGMsakh:

Ваш код отправляет всем графикам событие  OnChartEvent()

В моём случае состоянием кнопки управляют функция SetSTTX("BIGSIG", NULL, BIGSIG, NULL) вызываемая в OnInit() при создании и в OnChartEvent() при изменении состояния
То есть необходимо передать значение глобальной переменной BIGSIG в функцию SetSTTX("BIGSIG", NULL, BIGSIG, NULL) каждому советнику на каждом графике.

Покажите кнопки.

У вас логика реализована через это место -> (.)

 
Vitaly Muzichenko:

Покажите кнопки.

У вас логика реализована через это место -> (.)

Это же моя логика.

Есть ли у Вас мысли как передать значение переменной в функцию каждому советнику на каждом гарфике.

Любым способом.

Как решить именно эту задачу?

 
NGMsakh:

Это же моя логика.

Есть ли у Вас мысли как передать значение переменной в функцию каждому советнику на каждом гарфике.

Любым способом.

Как решить именно эту задачу?

как вариант

на каждом графике по ChartID() можно отобразить текстовый объект

В зависимости от текста, советник либо торгует, либо нет

В процессе торговли текст при необходимости можно менять программно по некоему алгоритму

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_text

https://www.mql5.com/ru/docs/objects/objectgetstring

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

Это же моя логика.

Есть ли у Вас мысли как передать значение переменной в функцию каждому советнику на каждом гарфике.

Любым способом.

Как решить именно эту задачу?

Опишите ещё раз задачу полностью. Понимаете, глоб.переменные - "тяжёлые" и нужно их как-то обходить, если есть возможность

 
Vitaly Muzichenko:

Опишите ещё раз задачу полностью. Понимаете, глоб.переменные - "тяжёлые" и нужно их как-то обходить, если есть возможность

В функции SetSTTX("BIGSIG", NULL, BIGSIG, NULL) прописаны состояния кнопки 

В OnChartEvent() мы ее вызываем и изменяем состояния кнопки.

Переменную BIGSIG в  OnChartEvent()  надо передавалась не только в функцию SetSTTX("BIGSIG", NULL, BIGSIG, NULL) на своем графике , но и на всех остальных (каждой копии советника).
Только так кнопки на всех графиках (советниках) можно будет синхронизировать в моём коде.


Проблема, чтоб торговал только один советник решена

Осталось лишь синхронизировать кнопки

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