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