EA编程图表函数详解 xm官网学习手册

在EA编程中,图表函数是一组用于操作图表中图形对象的核心工具集,xm官网提供的教程对此有系统讲解。

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)

此函数根据给定的价格值计算并返回对应的K线偏移量(相对于当前K线)。偏移量通过第一和第二坐标应用线性方程计算得出,适用于趋势线及类似物件。详细错误信息可查看GetLastError()函数。另可参考ObjectGetValueByShift()函数。

参数说明:

name — 物件名称。

value — 价格数值。

示例:

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

double ObjectGetValueByShift( string name, int shift)

此函数根据指定的K线偏移量(相对于当前K线)计算并返回对应的价格值。偏移量通过第一和第二坐标应用线性方程计算得出,适用于趋势线及类似物件。详细错误信息可查看GetLastError()函数。另可参考ObjectGetShiftByValue()函数。

参数说明:

name — 物件名称。

shift — K线索引。

示例:

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,则会从当前图表中删除所有物件。若类型值等于-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和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,"对应的物件名称为 " + name);

}

int ObjectType( string name)

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

参数说明:

name — 物件名称。

示例:

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

熟练运用这些图表函数,并结合xm官网的学习资料,能够帮助开发者更高效地完成EA程序的编写与调试工作。