OBJ_EVENT

事件对象。

注意

当鼠标悬挂在事件上时,会显示其文本。

示例

下面的脚本创建和移动图表上的事件对象。已开发的特别函数用于创建和改变图形对象的属性。您可以在您的个人应用中使用这些函数"as is" 。

//--- 描述

#property description "Script draws \"Event\" graphical object."

#property description "Anchor point date is set in percentage of"

#property description "the chart window width in bars."

//--- 启动脚本期间显示输入参数的窗口

#property script_show_inputs

//--- 脚本的输入参数

input string          InpName="Event";    // 事件名称

input int             InpDate=25;         // 事件日期,%

input string          InpText="Text";     // 事件文本

input color           InpColor=clrRed;    // 事件颜色

input int             InpWidth=1;         // 高亮显示时的点大小

input bool            InpBack=false;      // 背景事件

input bool            InpSelection=false; // 突出移动

input bool            InpHidden=true;     // 隐藏在对象列表

input long            InpZOrder=0;        // 鼠标单击优先

//+------------------------------------------------------------------+

//| 在图表上创建事件对象                                                |

//+------------------------------------------------------------------+

bool EventCreate(const long            chart_ID=0,      // 图表 ID

                 const string          name="Event",    // 事件名称

                 const int             sub_window=0,    // 子窗口指数

                 const string          text="Text",     // 事件文本

                 datetime              time=0,          // 时间

                 const color           clr=clrRed,      // 颜色

                 const int             width=1,         // 高亮显示时的点宽度

                 const bool            back=false,      // 在背景中

                 const bool            selection=false, // 突出移动

                 const bool            hidden=true,     // 隐藏在对象列表

                 const long            z_order=0)       // 鼠标单击优先

  {

//--- 如果没有设置时间,请在最近的柱创建对象。

   if(!time)

      time=TimeCurrent();

//--- 重置错误的值

   ResetLastError();

//--- 创建事件对象

   if(!ObjectCreate(chart_ID,name,OBJ_EVENT,sub_window,time,0))

     {

      Print(__FUNCTION__,

            ": failed to create \"Event\" object! Error code = ",GetLastError());

      return(false);

     }

//--- 设置事件文本

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- 设置颜色

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- 如果对象突出显示则设置定位点宽度

   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);

//--- 显示前景 (false) 或背景 (true)

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 启用 (true) 或禁用 (false) 通过鼠标移动事件的模式

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- 在对象列表隐藏(true) 或显示 (false) 图形对象名称

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- 设置在图表中优先接收鼠标点击事件

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- 成功执行

   return(true);

  }

//+------------------------------------------------------------------+

//| 改变事件对象文本                                                   |

//+------------------------------------------------------------------+

bool EventTextChange(const long   chart_ID=0,   // 图表 ID

                     const string name="Event", // 事件名称

                     const string text="Text")  // 文本

  {

//--- 重置错误的值

   ResetLastError();

//--- 改变对象文本

   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))

     {

      Print(__FUNCTION__,

            ": failed to change the text! Error code = ",GetLastError());

      return(false);

     }

//--- 成功执行

   return(true);

  }

//+------------------------------------------------------------------+

//| 移动事件对象                                                       |

//+------------------------------------------------------------------+

bool EventMove(const long   chart_ID=0,   // 图表 ID

               const string name="Event", // 事件名称

               datetime     time=0)       // 时间

  {

//--- 如果没有设置线的时间,将事件移动到收盘柱

   if(!time)

      time=TimeCurrent();

//--- 重置错误的值

   ResetLastError();

//--- 移动对象

   if(!ObjectMove(chart_ID,name,0,time,0))

     {

      Print(__FUNCTION__,

            ": failed to move \"Event\" object! Error code = ",GetLastError());

      return(false);

     }

//--- 成功执行

   return(true);

  }

//+------------------------------------------------------------------+

//| 删除事件对象                                                       |

//+------------------------------------------------------------------+

bool EventDelete(const long   chart_ID=0,   // 图表 ID

                 const string name="Event") // 事件名称

  {

//--- 重置错误的值

   ResetLastError();

//--- 删除对象

   if(!ObjectDelete(chart_ID,name))

     {

      Print(__FUNCTION__,

            ": failed to delete \"Event\" object! Error code = ",GetLastError());

      return(false);

     }

//--- 成功执行

   return(true);

  }

//+------------------------------------------------------------------+

//| 脚本程序起始函数                                                   |

//+------------------------------------------------------------------+

void OnStart()

  {

//--- 检查输入参数的正确性

   if(InpDate<0 || InpDate>100)

     {

      Print("Error! Incorrect values of input parameters!");

      return;

     }

//--- 图表窗口的可见柱的数量

   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);

//--- 存储要使用的日期值的数组

//--- 设置和改变事件定位点的坐标

   datetime date[];

//--- 内存分配

   ArrayResize(date,bars);

//--- 填写日期数组

   ResetLastError();

   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)

     {

      Print("Failed to copy time values! Error code = ",GetLastError());

      return;

     }

//--- 定义创建对象的点

   int d=InpDate*(bars-1)/100;

//--- 创建事件对象

   if(!EventCreate(0,InpName,0,InpText,date[d],InpColor,InpWidth,

      InpBack,InpSelection,InpHidden,InpZOrder))

     {

      return;

     }

//--- 重画图表并等待1秒

   ChartRedraw();

   Sleep(1000);

//--- 现在,移动对象

//--- 循环计数器

   int h_steps=bars/2;

//--- 移动对象

   for(int i=0;i<h_steps;i++)

     {

      //--- 使用下面的值

      if(d<bars-1)

         d+=1;

      //--- 移动点

      if(!EventMove(0,InpName,date[d]))

         return;

      //--- 检查脚本操作是否已经强制禁用

      if(IsStopped())

         return;

      //--- 重画图表

      ChartRedraw();

      // 0.05 秒延迟

      Sleep(50);

     }

//--- 1 秒延迟

   Sleep(1000);

//--- 删除图表通道

   EventDelete(0,InpName);

   ChartRedraw();

//--- 1 秒延迟

   Sleep(1000);

//---

  }