澳汇EA编程图表函数详解:从入门到精通

2026-06-03 10:45
澳汇
阅读
行业动态

澳汇等平台的自动化交易过程中,与当前图表相关的物件函数是一组基础而重要的工具。

ObjectCreate

ObjectDelete

ObjectDescription

ObjectFind

ObjectGet

ObjectGetFiboDescription

ObjectGetShiftByValue

ObjectGetValueByShift

ObjectMove

ObjectName

ObjectsDeleteAll

ObjectSet

ObjectSetFiboDescription

ObjectSetText

ObjectsTotal

ObjectType

bool ObjectCreate( string name, int type, int window, datetime time1, double price1, void time2, void price2, void time3, void price3)

该函数用于在指定窗口中创建物件,需提供名称、类型以及初始坐标。坐标数量与物件类型相关联,可包含1到3个坐标点。

如果函数执行成功,返回值是 TRUE,否则返回 FALSE。要获取详细的错误信息,请调用 GetLastError() 函数。OBJ_LABEL 类型的物件会忽略坐标,需使用 ObjectSet() 设定 OBJPROP_XDISTANCE 和 OBJPROP_YDISTANCE 属性。

注:子窗口图表(如果子窗口带有指标)编号从1开始。主窗口的索引为0。

必须传参的坐标包括时间和价格。例如,OBJ_VLINE 类型的物件只需要时间,但必须在价格参数中传入任意值。

参数说明:

name - 物件的唯一名称。

type - 物件类型,可取物件类型枚举中的任意值。

window - 物件将添加到的窗口索引。该索引必须大于等于0且小于 WindowsTotal()。

time1 - 第一点的时间部分。

price1 - 第一点的价格部分。

time2 - 第二点的时间部分。

price2 - 第二点的价格部分。

time3 - 第三点的时间部分。

price3 - 第三点的价格部分。

示例:

// 新建文本物件

if(!ObjectCreate("text_object", OBJ_TEXT, 0, D'2004.02.20 12:30', 1.0045))

{

Print("错误:不能创建文本!错误代码 #",GetLastError());

return(0);

}

// 新建文本标签

if(!ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0))

{

Print("错误:不能创建文本!错误代码 #",GetLastError());

return(0);

}

ObjectSet("label_object", OBJPROP_XDISTANCE, 200);

ObjectSet("label_object", OBJPROP_YDISTANCE, 100);

bool ObjectDelete( string name)

删除指定名称的已有物件。如果函数成功返回 TRUE,否则返回 FALSE。需要获取详细错误信息时,可调用 GetLastError() 函数。

参数:

name - 要删除的物件名称。

示例:

ObjectDelete("text_object");

string ObjectDescription( string name)

返回物件的描述信息。对于 OBJ_TEXT 和 OBJ_LABEL 类型的物件,会返回这些物件的文本内容。

可参考 GetLastError() 函数获取详细错误信息。

另见 ObjectSetText() 函数。

参数:

name - 物件名称。

示例:

// 将图表物件写入文件

int handle, total;

string obj_name,fname;

// 文件名称

fname="objlist_"+Symbol();

handle=FileOpen(fname,FILE_CSV|FILE_WRITE);

if(handle!=false)

{

total=ObjectsTotal();

for(int i=0;i

{

obj_name=ObjectName(i);

FileWrite(handle,"Object "+obj_name+" description= "+ObjectDescription(obj_name));

}

FileClose(handle);

}

int ObjectFind( string name)

查找指定名称的物件,返回包含该物件的窗口索引。如果查找失败,返回 -1。详细错误信息可通过 GetLastError() 获取。子窗口图表(若子窗口带有指标)编号从1开始,主窗口索引为0。

参数:

name - 需要查找的物件名称。

示例:

if(ObjectFind("line_object2")!=win_idx) return(0);

double ObjectGet( string name, int index)

返回指定物件的属性值。错误检查可查看 GetLastError() 函数。

另见 ObjectSet() 函数。

参数:

name - 物件名称。

index - 物件属性索引,可取物件属性枚举中的任意值。

示例:

color oldColor=ObjectGet("hline12", OBJPROP_COLOR);

string ObjectGetFiboDescription( string name, int index)

返回斐波纳契物件的层级描述。斐波纳契水平的数量取决于物件类型,最大为32条水平线。

详细错误信息可查看 GetLastError() 函数。

另见 ObjectSetFiboDescription() 函数。

参数:

name - 斐波纳契物件名称。

index - 斐波纳契水平索引(0-31)。

示例:

#include

...

string text;

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

{

text=ObjectGetFiboDescription(MyObjectName,i);

//---- 检查物件是否少于32条水平线

if(GetLastError()!=ERR_NO_ERROR) break;

Print(MyObjectName,"水平: ",i," description: ",text);

}

int ObjectGetShiftByValue( string name, double value)

根据给定的价格值计算并返回对应的柱索引(相对于当前柱的偏移)。该计算基于第一和第二坐标应用线性方程,适用于趋势线及类似物件。详细错误信息可查看 GetLastError() 函数。

另见 ObjectGetValueByShift() 函数。

参数:

name - 物件名称。

value - 价格数值。

示例:

int shift=ObjectGetShiftByValue("MyTrendLine#123", 1.34);

double ObjectGetValueByShift( string name, int shift)

根据指定的柱索引(相对于当前柱的偏移)计算并返回对应的价格值。计算同样基于第一和第二坐标的线性方程,适用于趋势线及类似物件。详细错误信息可查看 GetLastError() 函数。

另见 ObjectGetShiftByValue() 函数。

参数:

name - 物件名称。

shift - 柱索引。

示例:

double price=ObjectGetValueByShift("MyTrendLine#123", 11);

bool ObjectMove( string name, int point, datetime time1, double price1)

在图表中移动物件的某个坐标点。物件根据类型可有1到3个坐标点。如果成功返回 TRUE,否则返回 FALSE。详细错误信息可查看 GetLastError() 函数。坐标点的起始编号为0。

参数:

name - 物件名称。

point - 坐标索引(0-2)。

time1 - 新的时间值。

price1 - 新的价格值。

示例:

ObjectMove("MyTrend", 1, D'2005.02.25 12:30', 1.2345);

string ObjectName( int index)

通过物件列表中的索引返回对应物件的名称。详细错误信息可查看 GetLastError() 函数。

参数:

index - 物件列表中的索引,必须大于等于0且小于 ObjectsTotal()。

示例:

int obj_total=ObjectsTotal();

string name;

for(int i=0;i

{

name=ObjectName(i);

Print(i,"物件名称为 " + name);

}

int ObjectsDeleteAll( void window, void type)

删除图表子窗口中指定类型的所有物件,返回被删除的物件数量。详细错误信息可查看 GetLastError() 函数。

注:子窗口图表(若子窗口带有指标)编号从1开始。主窗口索引为0。如果窗口索引错误或值为-1,会从当前图表中删除所有物件。

如果 type 值等于 -1 或该参数有误,则删除指定子窗口内的全部物件。

参数:

window - 可选参数,指定要删除物件的窗口索引。必须大于等于 -1(EMPTY为默认值)且小于 WindowsTotal()。

type - 可选参数,要删除的物件类型。可取物件类型枚举中的任意值,或使用 EMPTY 常数删除所有类型。

示例:

ObjectsDeleteAll(2, OBJ_HLINE); // 从第二个子窗口移除所有水平线

ObjectsDeleteAll(2); // 从第二个子窗口移除所有物件

ObjectsDeleteAll(); // 从图表中移除所有物件

bool ObjectSet( string name, int index, double value)

修改指定物件的属性值。如果函数成功返回 TRUE,否则返回 FALSE。详细错误信息可查看 GetLastError() 函数。

另见 ObjectGet() 函数。

参数:

name - 物件名称。

index - 物件属性索引,可取物件属性枚举中的任意值。

value - 新的属性值。

示例:

// 将第一个坐标移动到最后一根K线的时间

ObjectSet("MyTrend", OBJPROP_TIME1, Time[0]);

// 设置第二个斐波纳契水平

ObjectSet("MyFibo", OBJPROP_FIRSTLEVEL+1, 1.234);

// 设置物件的可见性,该物件仅在15分钟和1小时图表上显示

ObjectSet("MyObject", OBJPROP_TIMEFRAMES, OBJ_PERIOD_M15 | OBJ_PERIOD_H1);

bool ObjectSetFiboDescription( string name, int index, string text)

为斐波纳契物件的某个水平分配新的描述文字。斐波纳契水平的数量取决于物件类型,最大为32条水平线。

详细错误信息可查看 GetLastError() 函数。

参数:

name - 物件名称。

index - 斐波纳契水平索引(0-31)。

text - 新的水平描述文字。

示例:

ObjectSetFiboDescription("MyFiboObject",2,"Second line");

bool ObjectSetText( string name, string text, int font_size, void font, void text_color)

修改物件的描述文字。对于 OBJ_TEXT 和 OBJ_LABEL 类型的物件,描述文字将作为图表上的文本显示。如果成功返回 TRUE,否则返回 FALSE。详细错误信息可查看 GetLastError() 函数。

只有文本类物件会使用 font_size、font_name 和 text_color 参数,其他类型的物件会忽略这些参数。

另见 ObjectDescription() 函数。

参数:

name - 物件名称。

text - 物件的描述文本。

font_size - 字体大小(磅值)。

font - 字体名称。

text_color - 文本颜色。

示例:

ObjectSetText("text_object", "Hello world!", 10, "Times New Roman", Green);

int ObjectsTotal( void type)

返回图表中指定类型的物件总数。

参数:

type - 可选参数,指定要计数的物件类型。可取物件类型枚举中的任意值,或使用 EMPTY 常数计算所有类型。

示例:

int obj_total=ObjectsTotal();

string name;

for(int i=0;i

{

name=ObjectName(i);

Print(i,"对于 #的物件名称",i," is " + name);

}

int ObjectType( string name)

返回物件的类型值。详细错误信息可查看 GetLastError() 函数。

参数:

name - 物件名称。

示例:

if(ObjectType("line_object2")!=OBJ_HLINE) return(0);

点击咨询交易开户相关问题

免责声明:本文内容仅供参考,不构成投资建议。投资有风险,入市需谨慎。