对象定位方法

图形对象文本,标签,位图和位图标签(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++;
              }
           }
        }
     }
  }

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

通过分形值做标记