对象定位方法

图形对象文本,标签,位图和位图标签(OBJ_TEXT,OBJ_LABEL,OBJ_BITMAP 和 OBJ_BITMAP_LABEL)可以有9种不同的OBJPROP_ANCHOR属性定义的坐标绑定方法中的一种。

对象 ID X/Y 宽度/高度 日期/价格 OBJPROP_CORNER OBJPROP_ANCHOR OBJPROP_ANGLE
文本 OBJ_TEXT 是的 是的 是的
标签 OBJ_LABEL 是的 是的(只读) 是的 是的 是的
按键 OBJ_BUTTON 是的 是的 是的
位图 OBJ_BITMAP 是的(只读) 是的 是的
位图标签 OBJ_BITMAP_LABEL 是的 是的(只读) 是的 是的
编辑 OBJ_EDIT 是的 是的 是的
矩形标签 OBJ_RECTANGLE_LABEL 是的 是的 是的

以下命名使用在表格中:

  • X/Y – 相对于图表角落,以像素指定的定位点坐标;
  • 宽度/高度 – 对象有宽度和高度。对于“只读”,只有对象呈现在图表上时才会计算宽度和高度值;
  • 日期/价格 – 使用日期和价格值指定定位点坐标;
  • OBJPROP_CORNER – 定义了指定定位点坐标相对的图表角落。可以是4个ENUM_BASE_CORNER 枚举值中的一个;
  • OBJPROP_ANCHOR – 定义了对象本身的定位点,可以是9个 ENUM_ANCHOR_POINT 枚举值中的一个。从这个点到选定的图表角指定像素坐标;
  • OBJPROP_ANGLE – 定义逆时针对象旋转角度。

该必要的变量可以使用 ObjectSetInteger函数(chart_handle,object_name, OBJPROP_ANCHOR,anchor_point_mode)来指定,在这里anchor_point_mode是ENUM_ANCHOR_POINT值中的一个。

ENUM_ANCHOR_POINT

ID 描述
ANCHOR_LEFT_UPPER 左上角定位点
ANCHOR_LEFT 左侧定位点
ANCHOR_LEFT_LOWER 左下角定位点
ANCHOR_LOWER 下方定位点
ANCHOR_RIGHT_LOWER 右下方定位点
ANCHOR_RIGHT 右侧定位点
ANCHOR_RIGHT_UPPER 右上角定位点
ANCHOR_UPPER 上方定位点
ANCHOR_CENTER 对象中间严格定位点

OBJ_BUTTONOBJ_RECTANGLE_LABELOBJ_EDITOBJ_CHART 对象在左上角(ANCHOR_LEFT_UPPER)有一个修正的定位点。

示例:

   string text_name="my_OBJ_TEXT_object";

   if(ObjectFind(0,text_name)<0)

     {

      Print("Object ",text_name," not found. Error code = ",GetLastError());

      //--- 获得图表最大价格

      double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);

      //--- 创建物件标签

      ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);

      //--- 设置文本颜色

      ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);

      //--- 设置背景色 

      ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);

      //--- 设置标签物件文本

      ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));

      //--- 设置文本字体

      ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");

      //--- 设置字体大小

      ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);

      //--- 定位右上角

      ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);

      //--- 顺时针方向旋转90度

      ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);

      //--- 禁止鼠标选择物件

      ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);

      //--- 重画物件

      ChartRedraw(0);

     }

图解对象箭头(OBJ_ARROW)连接到坐标有两种方式,标识符连接到ENUM_ARROW_ANCHOR。

ENUM_ARROW_ANCHOR

标识符 描述
ANCHOR_TOP 上部定位点
ANCHOR_BOTTOM 下部定位点

示例:

void OnStart()

  {

//--- 辅助数组

   double Ups[],Downs[];

   datetime Time[];

//--- 设置数组为时间序列

   ArraySetAsSeries(Ups,true);

   ArraySetAsSeries(Downs,true);

   ArraySetAsSeries(Time,true);

//--- 创建指标iFractals句柄

   int FractalsHandle=iFractals(NULL,0);

   Print("FractalsHandle = ",FractalsHandle);

//--- 设置最近的错误值到零

   ResetLastError();

//--- 复制指标值

   int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);

   if(copied<=0)

     {

      Print("Unable to copy the upper fractals. Error = ",GetLastError());

      return;

     }



   ResetLastError();

//--- 复制指标值

   copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);

   if(copied<=0)

     {

      Print("Unable to copy the bottom fractals. Error = ",GetLastError());

      return;

     }



   ResetLastError();

//--- 复制包括最近1000开盘柱的时间序列

   copied=CopyTime(NULL,0,0,1000,Time);

   if(copied<=0)

     {

      Print("Unable to copy the Opening Time of the last 1000 bars");

      return;

     }



   int upcounter=0,downcounter=0; // 数箭头数

   bool created;// 接收尝试结果去创建物件

   for(int i=2;i<copied;i++)// 运行通过指标iFractals值 

     {

      if(Ups[i]!=EMPTY_VALUE)// 找到上面的分数据

        {

         if(upcounter<10)// 创建少于10个“向上”箭头

           {

            //--- 创建 "向上" 物件

            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);

            if(created)// 若设置 - 调节它

              {

               //--- 定位点在下面为了不覆盖柱

               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);

               //--- 最后接触-绘画

               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);

               upcounter++;

              }

           }

        }

      if(Downs[i]!=EMPTY_VALUE)// 发现较低的分数据

        {

         if(downcounter<10)// 创建少于10个“向下”箭头

           {

            //--- 创建 "向下" 物件

            created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);

            if(created)// 若设置 - 调节它

              {

               //--- 定位点在上面为了不覆盖柱

               ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);

               //--- 最后接触-绘画

               ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);

               downcounter++;

              }

           }

        }

     }

  }

在脚本执行完毕后,图表看起来像这样。