Как отследить появление индикатора на графике?

 
Всем привет!) Имеется индикатор Pulse Fibonacci+Pivot. Как узнать, что пользователь прикрепил его к графику, убрал с графика? Нужно отследить два события: индикатор появился на графике, индикатор пропал с графика. Толкните в нужную сторону.)
 
Ирина Макарова:
Всем привет!) Имеется индикатор Pulse Fibonacci+Pivot. Как узнать, что пользователь прикрепил его к графику, убрал с графика? Нужно отследить два события: индикатор появился на графике, индикатор пропал с графика. Толкните в нужную сторону.)

ChartIndicatorName(), искать в цикле до ChartIndicatorsTotal()

 
Igor Zakharov:

ChartIndicatorName(), искать в цикле до ChartIndicatorsTotal()

  bool    uslov = true; 
  if(uslov){
   for(int i=0; i<ChartIndicatorsTotal(0,0); i++){
   string indicatorName = ChartIndicatorName(0,0,i);
      if(indicatorName == "Pulse Fibonacci+Pivot")
      {
      //здесь код, если индикатор присутствует на графике
      }
      else
      {
      //здесь код, если индикатор отсутствует на графике
      }
   }
}
uslov=false;
Вот так верно будет? Поправьте если что!)
 
Ирина Макарова:
Вот так верно будет? Поправьте если что!)

Нет, не правильно. Перед циклом нужно объявить флаг и задать ему значение false, в цикле установить флаг в true в случае, если индикатор найден. По окончании цикла - уже за его пределами, проверить флаг - если он установлен, значит индикатор найден.

 
Ирина Макарова:
Вот так верно будет? Поправьте если что!)
bool found = false;
for(int i=0; i<ChartIndicatorsTotal(0,0); i++)
 if(ChartIndicatorName(0,0,i) == "Pulse Fibonacci+Pivot")
  {
   found=true;
   break;
  }
if(found)
  {
      //здесь код, если индикатор присутствует на графике
  }
else
  {
      //здесь код, если индикатор отсутствует на графике
  }
 
Igor Zakharov:

Я делаю вот так

int OnInit()
 {
 // Ищем копии на графике
 int q=0;
 string ProgName=MQLInfoString(MQL_PROGRAM_NAME);

 for(int k=ChartIndicatorsTotal(0,0);k>=0;k--) {
  if(ChartIndicatorName(0,0,k)==ProgName) {
   if(q++>0) {
    Alert(ProgName,"; Уже установлен на графике");
    return(INIT_FAILED);
   }
  }
 }
  return(INIT_SUCCEEDED);
 }
 
Большое спасибо всем за помощь!)
 

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

 
в каких случаях это может понадобиться? пока не вижу
 
Ирина Макарова:

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

Было бы проще, если б знать, какое конкретно действие должно быть в блоках... Универсально как-то так:

//объявить глобально, не в функции
int block=0;

//выполнять внутри функции
bool found = false;
for(int i=0; i<ChartIndicatorsTotal(0,0); i++)
 if(ChartIndicatorName(0,0,i) == "Pulse Fibonacci+Pivot")
  {
   found=true;
   break;
  }
if(found && block!=1)
  {
    block=1;
      //здесь код, если индикатор не "присутствует", а ПОЯВИЛСЯ на графике
  }
if(!found && block!=2)
  {
    block=2;
      //здесь код, если индикатор "отсутствует", а ПРОПАЛ на графике
  }
задача несколько другая, почувствуйте разницу между присутствует и появился
 
Igor Zakharov:

Было бы проще, если б знать, какое конкретно действие должно быть в блоках... Универсально как-то так:

задача несколько другая, почувствуйте разницу между присутствует и появился
Спасибо большое Игорь. Теперь всё работает, как требовалось. Если вам интересно получилось так:
void PivFibcheck(){
   if(pivfib){
      bool found = false;
      for(int i=0; i<ChartIndicatorsTotal(0,0); i++){
          if(ChartIndicatorName(0,0,i) == "Pulse Fibonacci+Pivot")
           {
            found=true;
            break;
           }
      }
   if(found && block!=1)
     {
     Pivot();
     for (int i=0; i<ObjectsTotal(); i++){
         MyObjectCreate(ObjectName(i));
         }
     block=1;
     }
   if(!found && block!=2)
     {
     string pivotline[7] = {"Horizontal Line c1","Horizontal Line c2","Horizontal Line c3","Horizontal Line piviot",
                              "Horizontal Line p1","Horizontal Line p2","Horizontal Line p3"};
     for(int i=0; i<ArraySize(pivotline); i++){
         ObjectDelete(pivotline[i]);
         ObjectDelete(prefix+pivotline[i]);
         }
     block=2;
     }
   }
}
Причина обращения: