ObjectSetDouble

函数建立类似物件属性的值。物件数据应该是 双精度 类型,有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]  物件属性ID。值可以是 ENUM_OBJECT_PROPERTY_DOUBLE 值中一个。

prop_modifier

[in]  指定属性修饰语,表示 斐波纳契工具 水平线数量和安德鲁分叉图解物件,水平线编号从0开始。

prop_value

[in]  属性值。

返回值

如果改变图解物件属性的命令成功发送到图表该函数返回true。否则返回false。调用函数GetLastError() 读取更多关于错误信息。

注意

这个函数使用非同步调用,这意味着这个函数不等待执行已入列图表的命令。相反,而是立即返回控制。

若要检查命令执行结果,您可以使用请求对象属性的函数。但是,您需要牢记的是这类函数将被加入到图表的队尾,需要等待执行结果,因此,可能会耗费大量时间。当处理图表上的大量对象时应该考虑这个特性。

新建斐波纳契物件和添加新水平线示例

//+------------------------------------------------------------------+
//| 脚本程序启动函数                                                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 辅助数组
   double high[],low[],price1,price2;
   datetime time[],time1,time2;
//--- 复制开盘价 - 最新的100柱就足够
   int copied=CopyHigh(Symbol(),0,0,100,high);
   if(copied<=0)
     {
      Print("Failed to copy the values of the High price series");
      return;
     }
//--- 复制收盘价 - 最新100柱就足够
   copied=CopyLow(Symbol(),0,0,100,low);
   if(copied<=0)
     {
      Print("Failed to copy the values of the Low price series");
      return;
     }
//--- 复制最新100柱的开盘时间
   copied=CopyTime(Symbol(),0,0,100,time);
   if(copied<=0)
     {
      Print("Failed to copy the values of the price series of 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) // 如果物件成功创建
     {
      //--- 设置斐波纳契色阶调整颜色
      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("Failed to change the number of levels of Fibo, error ",GetLastError());
        }
      //--- 只是通知
      Print("Fibo levels after = ",ObjectGetInteger(0,"Fibo",OBJPROP_LEVELS));
      //--- 为新创建的水平面设置一个值
      bool added=ObjectSetDouble(0,"Fibo",OBJPROP_LEVELVALUE,levels,133);
      if(added) // 为水平面管理并设置一个值
        {
         Print("Successfully set one more Fibo level");
         //--- 还不要忘记设置水平面描述
         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("Failed to set one more Fibo level. Error ",GetLastError());
        }
     }
  }

另见

物件类型物件属性