ObjectGetString

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

1.即时返回属性值。

string  ObjectGetString(
   long                            chart_id,          // 图表标识符
   string                          name,              // 物件名称
   ENUM_OBJECT_PROPERTY_STRING     prop_id,           // 属性标识符
   int                             prop_modifier=0    // 属性修饰符, 如果需要的话
   );

2. 返回 true 或者 false, 取决于函数是否成功。 如果成功,属性值通过上一参量以引用的方式传递安置接收变量。

bool  ObjectGetString(
   long                            chart_id,          // 图表标识符
   string                          name,              // 物件名称
   ENUM_OBJECT_PROPERTY_STRING     prop_id,           // 属性标识符
   int                             prop_modifier,     // 属性修饰符
   string&                         string_var         // 这里接受属性值
   );

参量

chart_id

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

name

[in]  物件名称。

prop_id

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

prop_modifier

[in] 指定属性修饰语,第一变体,默认修饰语的值是0,大多属性不要求修饰语。表示斐波纳契工具 水平线数量和Andrew's pitchfork图解物件,水平线编号从0开始。

string_var

[out]  字符串类型变量接收要求属性值。

返回值

第一次调用版本的字符串值。

第二变体的函数返回真值,如果该属性是被维护的并且值可以放置到string_var 中,否则返回错误值。为了阅读更多关于 错误 ,调用 GetLastError()

注释

该函数使用同步调用,这意味着这个函数等待执行在调用之前已入列图表的所有命令,这就是该函数耗费时间的原因。当处理图表上的大量对象时应该考虑这个特性。

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

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

 

示例:

#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   OBJ_NAME   "TestObjectGetInteger"  // 对象名称
 
//+------------------------------------------------------------------+
//| 脚本程序起始函数                                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 当前图表 ID
   long chart_id=ChartID();
 
//--- 在当前已知的服务器时间创建“垂直线”图形对象
   if(!ObjectCreate(chart_idOBJ_NAMEOBJ_VLINE0TimeCurrent(), 0))
     {
      Print("ObjectCreate() failed. Error "GetLastError());
      return;
     }
//--- 更新图表以立即反映变化
   ChartRedraw(chart_id);
   
//--- 获取对象创建时间
   long long_var=0;
   if(!ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_CREATETIME0long_var))
     {
      Print("ObjectGetInteger() failed. Error "GetLastError());
      return;
     }
//--- 对象创建时间的字符串表示
   string create_time=TimeToString((datetime)long_varTIME_DATE|TIME_MINUTES|TIME_SECONDS);
   
//--- 获取对象中设置的时间
   if(!ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_TIME0long_var))
     {
      Print("ObjectGetInteger() failed. Error "GetLastError());
      return;
     }
//--- 对象位置时间的字符串表示
   string obj_time=TimeToString((datetime)long_varTIME_DATE|TIME_MINUTES|TIME_SECONDS);
   
//--- 取得对象类型
   ENUM_OBJECT object_type=(ENUM_OBJECT)ObjectGetInteger(chart_idOBJ_NAMEOBJPROP_TYPE);
   
//--- 向日志输出对象的类型、创建时间以及图形对象所在的图表上的时间
   PrintFormat("%s object created at %s at chart point with time %s",EnumToString(object_type), create_timeobj_time);
   
//--- 等待两秒再删除所创建的对象
   Sleep(2000);
   ObjectDelete(chart_idOBJ_NAME);
   ChartRedraw(chart_id);
   /*
   结果:
   OBJ_VLINE object created at 2025.02.01 12:15:37 at chart point with time 2025.01.31 23:54:59
   */
  }