Custom 是一个英文单词,其作形容词时的中文意思:定做的,定制的等。在MQL4和MQL5语言中,iCustom()函数都是用来获取自定义技术指标数据的。
在MQL4语言下,iCustom()函数结构如下:
double iCustom
(
string symbol, //交易品种名称
int timeframe, //图表时间周期
string name, // 自定义技术指标名称
… // 自定义指标输入参数(如果需要)
int mode, // 自定义指标线索引。可以从0到7,并且必须与调用SetIndexBuffer()函数时指定的索引相对应。
int shift // 指标索引/序号
);
iCustom()函数各参数说明:
- symbol,交易品种名称,当前窗口货币对为 Symbol(),要自行定义参数,可以参考 input string symname = “XAUUSD “; 之类。
- timeframe,图表周期,指一分钟M1到月线MN1共9个图表周期。要单独定义参数,可以参考用 int 或者 ENUM_TIMEFRAMES,如:input ENUM_TIMEFRAMES Period_x = PERIOD_CURRENT; 0 和 PERIOD_CURRENT 都代表当前图表时间。
- name,自定义技术指标名称,默认指标是放在相对于根指标目录(MQL4/Indicators/)。如果指标位于子目录中,例如,在MQL4/Indicators/Examples中,其名称必须被指定为 “Examples/indicator_name”(必须指定双反斜杠”\\”作为分隔符,而不是单反斜杠)。
- …,自定义指标输入参数(如果需要),简单点说,就是将需要调用的技术指标的属性框中的“输入参数”里面的参数依次写入到这里。
- mode,指标线索引。可以从0到7,并且必须与调用SetIndexBuffer()函数时指定的索引相对应。简单的说,就是自定义指标的哪个指标线的数值,通常一个指标会有多个指标线。
- shift,获取指标线数据所对应的索引/序号,0指当前最新K线所对应的值,然后从右往左分别是1、2、3、4…..,这种规则排序。就拿MACD柱子来说,0就是获取最右侧的第一个柱子的值,1就是获取第二个柱子的值,类推。
如果是第一次使用iCustom()函数,那么看函数结构或参数说明,会觉得有点复杂,下面不凡以一个简单的列子结合图表来看下。
结合上图来演示用iCustom()函数获取一个名称为”BB_MACD”的自定义技术指标的数据,当然,首先这个指标对应的”BB_MACD.ex4″文件已经放置在MQL4/Indicators/目录下。
1、将 BB_MACD 指标拉到当前图表;
2、打开数据窗口,在上方“显示”菜单下点击“数据窗口”,即可看到如上图所示的图表数据窗口。在数据窗口中可以看到BB_MACD指标下方有四个指标数据,依次是bbMacd、Upperband、Lowerband、Value 4。这四个数据排序从上往下0、1、2、3。iCustom()函数 mode 参数指的就是这里,如果要获取 bbMacd 数值,那 mode 就是0,其它类推;
3、打开指标属性窗口,在指标窗口,指标线上面鼠标右键-属性,即可打开指标属性窗口,在“输入参数”下面可以看到BB_MACD所有参数,iCustom()函数 … 参数指的就是这里,依次填写,中间用英文逗号隔开。
4、用iCustom()函数获取“BB_MACD”指标的 bbMacd (0号指标线)的最新值,示范代码:
double BBMACD_0_0 = iCustom(Symbol(),0,"BB_MACD",12,26,9,1.0,0,0);
Comment(DoubleToStr(BBMACD_0_1,4));//输出值验证下是否有误
上面代码下方用注释的形式输出了所获取的值,当鼠标停放在对应鼠标线上的时候,即可看到获取的数值是正确的。iCustom()函数的用法其它也很简单,实际EA编程中根据需要演变其参数即可。
在用iCustom()函数获取自定义技术指标数据时,如果遇到一些带有很多输入参数的mt4指标,且其中一些输入参数和EA交易没有什么关系的时候,可以根据实际情况将指标代码中输入参数前面的 input 或 extern 去掉,让它不成为输入参数即可。通俗点说,为了用iCustom()函数获取数据的便捷性,可以适当的去简化指标,当然,这是在不改变指标核心算法的基础下。