Русский

Справочник MQL4 Графические объекты ObjectCreate

ObjectCreate

Создает объект с указанным именем, типом и начальными координатами в указанном подокне указанного графика. Существует два варианта функции:

bool  ObjectCreate(
   long          chart_id,      // идентификатор графика
   string        object_name,   // имя объекта
   ENUM_OBJECT   object_type,   // тип объекта
   int           sub_window,    // индекс окна
   datetime      time1,         // время первой точки привязки
   double        price1,        // цена первой точки привязки
   ...
   datetime      timeN=0,       // время N-точки привязки
   double        priceN=0       // цена N-точки привязки
   );

Создает объект с указанным именем, типом и начальными координатами в указанном подокне текущего графика:

bool  ObjectCreate(
   string        object_name,   // имя объекта
   ENUM_OBJECT   object_type,   // тип объекта
   int           sub_window,    // индекс окна
   datetime      time1,         // время первой точки привязки
   double        price1,        // цена первой точки привязки
   datetime      time2=0,       // время второй точки привязки
   double        price2=0,      // цена второй точки привязки
   datetime      time3=0,       // время третьей точки привязки
   double        price3=0       // цена третьей точки привязки
   );

Параметры

chart_id

[in]  Идентификатор графика.

object_name

[in]  Уникальное имя объекта.

object_type

[in]  Тип объекта. Может быть любым из типов объектов.

sub_window

[in]  Индекс окна, в которое будет добавлен объект. Окно должно существовать (индекс окна должен быть большим или равным 0 и меньшим, чем WindowsTotal()), иначе функция возвратит false.

time1

[in]  Временная координата первой точки привязки.

price1

[in]  Ценовая координата первой точки привязки.

time2=0

[in]  Временная координата второй точки привязки.

price2=0

[in]  Ценовая координата второй точки привязки.

time3=0

[in]  Временная координата третьей точки привязки.

price3=0

[in]  Ценовая координата третьей точки привязки.

timeN=0

[in]  Временная координата N-й точки привязки.

priceN=0

[in]  Ценовая координата N-й точки привязки.

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

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

Для создания объектов на чужом графике используется асинхронный вызов, поэтому ObjectCreate() возвращает только результат постановки команды в очередь графика. В этом случае true означает только то, что команда на создание объекта успешно поставлена в очередь, сам результат её выполнения неизвестен. Для проверки результата выполнения можно использовать функцию ObjectFind или любые функции, запрашивающие свойства объекта, например вида ObjectGetXXX. Но при этом следует иметь в виду, что такие функции ставятся в конец очереди команд чужого графика и дожидаются результата выполнения (так как являются синхронными вызовами), то есть могут быть затратными по времени.

Примечание

Число координат, связываемых с объектом, может быть от 1 до 3 в зависимости от типа.  Объекты с типом OBJ_LABEL игнорируют координаты. Используйте функцию ObjectSet() для установки свойств OBJPROP_XDISTANCE и OBJPROP_YDISTANCE. Нумерация подокон графика (если на графике есть подокна с индикаторами) начинается с 1. Главное окно графика есть всегда и имеет индекс 0. Координаты должны передаваться парами - время и цена. Для примера, объекту OBJ_VLINE требуется только время, но также нужно передать и цену (любое значение).

Имя графического объекта не должно превышать 63 символа. Не допускаются символы вне текущей кодовой страницы (символы, которые не могут быть переведены из Unicode в ANSI, заменяются на символ '?'). Если предполагается распространение программ среди пользователей, имеющих различные кодовые страницы, настоятельно рекомендуется использование латинских символов в именах объектов.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int i;
   string obj_name="label_object";
   long current_chart_id=ChartID();
//--- создаем объект типа label
   if(!ObjectCreate(current_chart_id,obj_name,OBJ_LABEL,0,0,0))
     {
      Print("Ошибка создания объекта: code #",GetLastError());
      return(0);
     }
//--- устанавливаем цвет Red
   ObjectSetInteger(current_chart_id,obj_name,OBJPROP_COLOR,clrRed);
//--- перемещение объекта label и изменение его текста
   for(i=0; i<200; i++)
     {
      //-- устанавливаем текст объекта
      ObjectSetString(current_chart_id,obj_name,OBJPROP_TEXT,StringFormat("Simple Label at y= %d",i));
      //-- устанавливаем значение координаты Y
      ObjectSet(obj_name,OBJPROP_YDISTANCE,i);
      //-- перерисовка графика
      ChartRedraw(current_chart_id);
      Sleep(10);
     }
//--- устанавливаем цвет Blue
   ObjectSetInteger(current_chart_id,obj_name,OBJPROP_COLOR,clrBlue);
//--- move object up and change its text
   for(i=200; i>0; i--)
     {
      //-- устанавливаем текст объекта
      ObjectSetString(current_chart_id,obj_name,OBJPROP_TEXT,StringFormat("Simple Label at y= %d",i));
      //-- устанавливаем значение координаты Y
      ObjectSet(obj_name,OBJPROP_YDISTANCE,i);
      //-- перерисовка графика
      ChartRedraw(current_chart_id);
      Sleep(10);
     }
//--- удаление объекта
   ObjectDelete(obj_name);
   return(0);
  }

Смотри также

Типы объектов