ObjectSetDouble

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

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

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

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

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

Параметры

chart_id

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

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());
        }
     }
  }

Смотри также

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