EA编程图表函数详解与实用教程

在EA编程中,图表函数是处理当前图表中图形对象的一组重要工具。本文将为各位开发者系统梳理这些函数的基本用法与参数说明,帮助您更高效地完成图表交互设计。

常用图表对象函数包括: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为新的属性值。

示例:

// 将第一个坐标移动到最后一个柱的时间点

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);