ChartIndicatorGet

Возвращает хэндл индикатора с указанным коротким именем на указанном окне графика.

int  ChartIndicatorGet(
   long           chart_id,              // идентификатор графика
   int            sub_window             // номер подокна
   const string   indicator_shortname    // короткое имя индикатора
   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

sub_window

[in]  Номер подокна графика. 0 означает главное окно графика.

const indicator_shortname

[in]  Короткое имя индикатора, которое задается в свойстве INDICATOR_SHORTNAME функцией IndicatorSetString(). Получить короткое имя индикатора можно функцией ChartIndicatorName().

Возвращаемое значение

Возвращает хэндл индикатора в случае успешного выполнения, иначе INVALID_HANDLE. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Примечание

Полученный с помощью функции ChartIndicatorGet() хендл индикатора увеличивает внутренний счетчик использования данного индикатора. Исполняющая система терминала держит загруженными все индикаторы, чей счетчик больше нуля. Поэтому ненужный больше хендл индикатора необходимо сразу и явно освобождать с помощью IndicatorRelease() в той же программе, которая его получила, как это показано в примере ниже. В противном случае найти "брошенный" хендл и освободить его корректно из другой программы не получится.

Необходимо правильно формировать короткое имя индикатора при его создании, которое с помощью функции IndicatorSetString() записывается в свойство INDICATOR_SHORTNAME. Рекомендуется, чтобы короткое имя содержало значения входных параметров индикатора, так как идентификация индикатора в функции ChartIndicatorGet() производится именно по короткому имени.

Другой способ идентификации индикатора – получить список его параметров по заданному хэндлу с помощью функции IndicatorParameters() и затем провести анализ полученных значений.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   //--- количество окон на графике (всегда есть хотя бы одно главное окно)
   int windows=(int)ChartGetInteger(0,CHART_WINDOWS_TOTAL);
   //--- про ходим по окнам
   for(int w=0;w<windows;w++)
     {
      //--- сколько индикаторов в данном окне/подокне
      int total=ChartIndicatorsTotal(0,w);
      //--- переберем все индикаторы в окне
      for(int i=0;i<total;i++)
        {
         //--- получим короткое имя индикатора
         string name=ChartIndicatorName(0,w,i);
         //--- получим хэндл индикатора
         int handle=ChartIndicatorGet(0,w,name);
         //--- выведем в журнал
         PrintFormat("Window=%d,  index=%d,  Name=%s,  handle=%d",w,i,name,handle);
         //--- обязательно освобождаем хендл индикатора, как только он становится ненужным
         IndicatorRelease(handle);
        }
     }
  }

Смотри также

ChartIndicatorAdd(), ChartIndicatorName(), ChartIndicatorsTotal(), IndicatorParameters()