Русский

Справочник MQL4 Операции с графиками ChartWindowFind

ChartWindowFind

Возвращает номер подокна, в котором находится индикатор. Существует 2 варианта функции.

1. Функция ищет на указанном графике подокно с указанным "коротким именем" индикатора (короткое имя выводится слева вверху подокна) и в случае удачи возвращает номер подокна.

int  ChartWindowFind(
   long     chart_id,                  // идентификатор графика
   string   indicator_shortname        // короткое имя индикатора, см INDICATOR_SHORTNAME

2. Функция должна вызываться из пользовательского индикатора и возвращает номер подокна, в котором этот индикатор работает.

int  ChartWindowFind();

Параметры

chart_id

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

indicator_shortname

[in]  Короткое имя индикатора.

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

Номер подокна в случае удачи. Ноль означает главное окно графика. В случае неудачи возвращает -1.

Примечание

Если вызывается второй вариант функции (без параметров) из скрипта или эксперта, то она возвращает -1.

Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функцией iCustom(). Если короткое наименование индикатора не задается явным образом, то при компиляции в нем указывается имя файла с исходным кодом индикатора.

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

Пример:

#property script_show_inputs
//--- input parameters
input string   shortName="MACD(12,26,9)";
//+------------------------------------------------------------------+
//| Сообщает номер окна графика с указанным индикатором              |
//+------------------------------------------------------------------+
int GetIndicatorSubWindowNumber(long chartID=0,string short_name="")
  {
   int window=-1;
//--- 
   if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE)==PROGRAM_INDICATOR)
     {
      //--- функция вызвана из индикатора,имя не требуется
      window=ChartWindowFind();
     }
   else
     {
      //--- функция вызвана из эксперта или скрипта
      window=ChartWindowFind(0,short_name);
      if(window==-1) Print(__FUNCTION__+"(): Error = ",GetLastError());
     }
//---
   return(window);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   int window=GetIndicatorSubWindowNumber(0,shortName);
   if(window!=-1)
      Print("Индикатор "+shortName+" находится в окне №"+(string)window);
   else
      Print("Индикатор "+shortName+" не найден. window = "+(string)window);
  }

Смотри также

ObjectCreate(), ObjectFind()