Как использовать счетчик индикаторов и как превратить ключевое событие в код на MQL4

Я только учусь программировать и у меня есть несколько вопросов. Может кто-нибудь сказать мне, пожалуйста, как это сделать;

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

как-то так: но работает :)

int OnInit()  
{   
    int indicators_total = ChartIndicatorsTotal(0,0);
    for(int i = 0; ndicators_total > i; i++)
      {
        if(ChartIndicatorName(0,0,i)==IndicatorName)
        return(INIT_FAILED); (AND THEN EXIT)
      }
}

2 - Как определить, есть ли на графике более одного индикатора с одинаковым названием?

3 - Как написать оператор if, чтобы что-то сделать, если индикатор x отсутствует (=0) на графике?

Как-то так: но работает :)

 if(IndicatorName==0)
    {
     Print("INDI ",IndicatorName, " NOT DETECTED");
    }

4 - И есть ли способ поместить в код событие клавиатуры (F11 - полноэкранный режим)? Чтобы мой пользовательский индикатор мог определять, когда включен полноэкранный режим, как с масштабом графика ChartGetInteger(0,CHART_SCALEFIX); ?


person RobertFT    schedule 07.07.2020    source источник


Ответы (1)


Добро пожаловать в СОФ. Посмотрите на counter ниже. Идея состоит в том, чтобы подсчитать количество индикаторов на графике. Тот, который вы добавляете, будет в этом списке либо один раз (эта копия), либо несколько раз (вы пытаетесь добавить новую копию к существующей). Этот пример для основного графика (подокно = 0).

  int OnInit()
    {
     const string indName = WindowExpertName(); // name of your indicator
     int counter=0; 
     for(int i=ChartIndicatorsTotal(0,0)-1;i>=0;i--)
       {
        //printf("%i %s: i=%d/%d, %s",__LINE__,__FILE__,i,ChartIndicatorsTotal(0,0),ChartIndicatorName(0,0,i));
        if(ChartIndicatorName(0,0,i)==indName)
           counter++;
       }
     if(counter>1)
       {
        Print("already exist!");
        return INIT_FAILED;
       }
  //--- indicator buffers mapping
     // do all other indicator preparation work here
  //---
     return(INIT_SUCCEEDED);
    }
person Daniel Kniaz    schedule 13.07.2020