对象定位方法
对象定位方法
图形对象文本,标签,位图和位图标签(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_BUTTON,OBJ_RECTANGLE_LABEL,OBJ_EDIT 和 OBJ_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++;
}
}
}
}
}在脚本执行完毕后,图表看起来像这样。
