Русский

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

ObjectMove

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

bool  ObjectMove(
   long       chart_id,      // идентификатор графика
   string     object_name,   // имя объекта
   int        point_index,   // номер привязки
   datetime   time,          // время
   double     price          // цена
   );

Изменение координат указанной точки привязки объекта:

bool  ObjectMove(
   string     object_name,   // имя объекта
   int        point_index,   // номер привязки
   datetime   time,          // время
   double     price          // цена
   );

Параметры

chart_id

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

object_name

[in]  Имя объекта.

point_index

[in]  Номер точки привязки. Количество точек привязки зависит от типа объекта (0-2).

time

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

price

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

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

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

Примечание

Нумерация координат объекта начинается с 0. Объекты могут иметь от одной до трех точек привязки в зависимости от типа объекта.

При использовании варианта функции без указания идентификатора графика подразумевается работа с собственным графиком и осуществляется прямой доступ к нему. В этом случае возвращаемое значение означает именно результат выполнения функции.

Если же при вызове указывается идентификатор графика, и указанный идентификатор принадлежит чужому графику, то возвращаемое значение сообщает только об успешности постановки команды в очередь чужого графика. В этом случае используется асинхронный вызов – это означает, что функция не дожидается выполнения команды, успешно поставленной в очередь чужого графика, а сразу же возвращает управление.

Для проверки результата выполнения на чужом графике можно использовать функцию, запрашивающую указанное свойство объекта. Но при этом следует иметь в виду, что такие функции ставятся в конец очереди команд чужого графика и дожидаются результата выполнения, то есть могут быть затратными по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   string obj_name="trend_line";
   long current_chart_id=ChartID();
//---
   datetime t1=Time[0];
   double p1=Close[0];
//---
   datetime t2=Time[1];
   double p2=Close[1];
//--- создаем объект trend line
   if(!ObjectCreate(obj_name,OBJ_TREND,0,t1,p1,t2,p2))
     {
      Print("Ошибка создания объекта trend line! Код #",GetLastError());
      return(0);
     }
//--- устанавливаем цвет линии
   ObjectSetInteger(current_chart_id,obj_name,OBJPROP_COLOR,clrRed);
//--- передвижение трендовой линии
   for(int i=1; i<200; i++)
     {     
      t2=Time[i];
      p2=Close[i];
      //--- передвижение 2-й точки привязки трендовой линии
      ObjectMove(obj_name,1,t2,p2);
      //--- перерисовка графика
      ChartRedraw(current_chart_id);
      Sleep(100);
     }
//--- пауза 3 секунды
   Sleep(3000);
//--- удаление объекта
   ObjectDelete(obj_name);
   return(0);
  }