Русский

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

Справка MQL4 одним файлом:

ObjectSetDouble

Задает значение соответствующего свойства объекта. Свойство объекта должно быть типа double. Существует 2 варианта функции.

Установка значения свойства, не имеющего модификатора

bool  ObjectSetDouble(
   long     chart_id,        // идентификатор графика
   string   object_name,     // имя
   int      prop_id,         // свойство
   double   prop_value       // значение
   );

Установка значения свойства с указанием модификатора

bool  ObjectSetDouble(
   long     chart_id,        // идентификатор графика
   string   object_name,     // имя
   int      prop_id,         // свойство
   int      prop_modifier,   // модификатор
   double   prop_value       // значение
   );

Параметры

chart_id

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

object_name

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

prop_id

[in]  Идентификатор свойства объекта. Значение может быть одним из значений перечисления ENUM_OBJECT_PROPERTY_DOUBLE.

prop_modifier

[in]  Модификатор указанного свойства. Означает номер уровня в инструментах Фибоначчи и в графическом объекте Вилы Эндрюса. Нумерация уровней начинается с нуля.

prop_value

[in]  Значение свойства.

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

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

Примечание

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

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

Пример создания Фибо-объекта и добавления нового уровня в нем

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- вспомогательные массивы
   double high[],low[],price1,price2;
   datetime time[],time1,time2;
//--- скопируем цены открытия - 100 последних баров хватит
   int copied=CopyHigh(Symbol(),0,0,100,high);
   if(copied<=0)
     {
      Print("Не удалось скопировать значения ценовой серии High");
      return;
     }
//--- скопируем цены закрытия - 100 последних баров хватит
   copied=CopyLow(Symbol(),0,0,100,low);
   if(copied<=0)
     {
      Print("Не удалось скопировать значения ценовой серии Low");
      return;
     }
//--- скопируем время открытия для 100 последних баров
   copied=CopyTime(Symbol(),0,0,100,time);
   if(copied<=0)
     {
      Print("Не удалось скопировать значения ценовой серии Time");
      return;
     }
//--- организуем доступ к скопированным данным как к таймсериям - задом наперед
   ArraySetAsSeries(high,true);
   ArraySetAsSeries(low,true);
   ArraySetAsSeries(time,true);
 
//--- координаты первой точки привязки Фибо-объекта
   price1=high[70];
   time1=time[70];
//--- координаты первой точки привязки Фибо-объекта
   price2=low[50];
   time2=time[50];
 
//--- пора создать и сам Фибо-объект
   bool created=ObjectCreate(0,"Fibo",OBJ_FIBO,0,time1,price1,time2,price2);
   if(created) // если объект создан удачно
     {
      //--- установим цвет Фибо0уровней
      ObjectSetInteger(0,"Fibo",OBJPROP_LEVELCOLOR,Blue);
      //--- кстати, а сколько у нас Фибо-уровней ?
      int levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
      Print("Fibo levels before = ",levels);
      //---выведем в Журнал=> номер уровня:значения описание_уровня
      for(int i=0;i<levels;i++)
        {
         Print(i,":",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
               "  ",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));
        }
      //--- попробуем увеличить количество уровней на единицу
      bool modified=ObjectSetInteger(0,"Fibo",OBJPROP_LEVELS,levels+1);
      if(!modified) // не удалось количество уровней изменить
        {
         Print("Не удалось изменить количество уровней в Фибо, ошибка ",GetLastError());
        }
      //--- просто сообщим 
      Print("Fibo levels after = ",ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS));
      //--- зададим значение для вновь созданного уровня
      bool added=ObjectSetDouble(0,"Fibo",OBJPROP_LEVELVALUE,levels,133);
      if(added) // удалось задать значение для уровня
        {
         Print("Удалось установить еще один уровень Fibo");
         //--- также не забыть задать описание уровня 
         ObjectSetString(0,"Fibo",OBJPROP_LEVELTEXT,levels,"my level");
         ChartRedraw(0);
         //--- получим актуальное значения количества уровней в Фибо-объекте
         levels=ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS);
         Print("Fibo levels after adding = ",levels);
         //--- еще раз выведем все уровни - просто чтобы убедиться
         for(int i=0;i<levels;i++)
           {
            Print(i,":",ObjectGetDouble(0,"Fibo",OBJPROP_LEVELVALUE,i),
                  "  ",ObjectGetString(0,"Fibo",OBJPROP_LEVELTEXT,i));
           }
 
        }
      else // неудача при попытке увеличить количество уровней в Фибо-объекте
        {
         Print("Не удалось установить ещеь один уровень Fibo. Ошибка ",GetLastError());
        }
     }
  }

Смотри также

Типы объектов, Свойства объектов