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