ObjectSetString

函数建立类似于物件属性的值,物件属性必须是 字符串 类型。有2个变量函数可以使用。

设置属性值,无修饰符

bool  ObjectSetString(
   long                            chart_id,          // 图表标识符
   string                          name,              // 物件名称
   ENUM_OBJECT_PROPERTY_STRING     prop_id,           // 属性
   string                          prop_value         // 值
   );

设置表明修饰符属性值

bool  ObjectSetString(
   long                            chart_id,          // 图表标识符
   string                          name,              // 物件名称
   ENUM_OBJECT_PROPERTY_STRING     prop_id,           // 属性
   int                             prop_modifier,     // 修饰符
   string                          prop_value         // 值
   );

参量

chart_id

[in]  图表标识符。0代表当前图表。

name

[in]  物件名称。

prop_id

[in] 物件属性ID。值可以是 ENUM_OBJECT_PROPERTY_STRING 值中一个。

prop_modifier

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

prop_value

[in]  属性值。

返回值

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

注释

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

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

当物件重命名,两个事件同时形成。这些事件可以在EA交易或者 OnChartEvent() 函数指标中处理:

  • 旧名称物件删除事件;
  • 新名称物件新建事件。

 

示例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectSetString"   // 对象名称
 
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 当前图表 ID 和交易品种, 用于显示对象描述的标志
   long   chart_idChartID();
   string symbol  = ChartSymbol(chart_id);
   bool   descriptChartGetInteger(chart_idCHART_SHOW_OBJECT_DESCR); 
   
//--- 设置图表上显示对象描述
   ChartSetInteger(chart_idCHART_SHOW_OBJECT_DESCRtrue);
 
//--- 取得当前出价
   double bid=0;;
   ResetLastError();
   if(!SymbolInfoDouble(symbolSYMBOL_BIDbid))
     {
      Print("SymbolInfoDouble() failed. Error "GetLastError());
      return;
     }
     
//--- 在当前出价上创建"水平线"图形对象
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_HLINE00bid))
     {
      Print("ObjectCreate() failed. Error "GetLastError());
      return;
     }
//--- 在对象描述中输入对象名称+描述
   if(!ObjectSetString(chart_idOBJ_NAMEOBJPROP_TEXT"Bid: "+DoubleToString(bid, (int)SymbolInfoInteger(symbolSYMBOL_DIGITS))))
     {
      Print("ObjectSetString() failed. Error "GetLastError());
      return;
     }
//--- 更新图表以立即反映变化
   ChartRedraw(chart_id);
   
//--- 取得对象描述
   string string_var="";
   if(!ObjectGetString(chart_idOBJ_NAMEOBJPROP_TEXT0string_var))
     {
      Print("ObjectGetInteger() failed. Error "GetLastError());
      return;
     }
//--- 取得对象名称
   string obj_name=ObjectGetString(chart_idOBJ_NAMEOBJPROP_NAME);
   
//--- 取得对象类型
   ENUM_OBJECT object_type=(ENUM_OBJECT)ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_TYPE);
   
//--- 在日志中显示对象类型, 它的名称和描述
   PrintFormat("The %s object named \"%s\" has the description \"%s\"",EnumToString(object_type), obj_namestring_var);
   
//--- 等待两秒再删除所创建的对象
   Sleep(2000);
   ObjectDelete(chart_idOBJ_NAME);
   
//--- 返回在图表上显示对象描述的初始标志
   ChartSetInteger(chart_idCHART_SHOW_OBJECT_DESCRdescript);
   ChartRedraw(chart_id);
   /*
   结果:
   The OBJ_HLINE object named "TestObjectSetString" has the description "Bid: 0.62096"
   */
  }