6.2.3 自定义指标
数以百计的供MetaTrader使用的自定义指标可上线取得。若决定在EA中使用自制指标,有一些烦琐的工作是必须要做的。当使用自定义指标时,最好备有.mq4源代码档案。虽然没有的话或许也能使用,但是备有源代码能更容易理解Mode参数中的记忆指数。
MQL有内建函数以处理自定义指标——iCustom(),源代码如下:

在本章稍前,我们已熟悉了Symbol、Timeframe、Mode和Shift。在此我们从IndicatorName开始。
Indicator Name指标档案的名字出现在Navigator窗口的Custom Indicators名目中,如“Slope Direction Line”或“super_signal”。
Indicator Parameters是我们插入参数予自制指标之处。Custom Indicator Properties窗口中的Inputs表将展示自制指标的参数。每个参数左边的图像意指数据类別。若你没有指标的.mq4档案,将必须从这个对话框中决定指标参数。

一个更简易的寻找参数的方法是在指标源代码档案的开始部分检查extern变量。所有指标参数及数据类型、默认值将在这里列出来,你可以简单地复制这些程序代码到你的EA的外部变数一节。
在自制指标中,每一个外部变量必须在iCustom()函数中有一对应参数,且它们必须和在指标中出现的顺序一致。若该参数无需被改变,你可以使用一个常数值(诸如信息化字符串,或非关键设定)。
这里是一个范例:热门的自制指标Slope Direction Line在源代码中列出这些外部变数。我们将在EA中创造这些设定的外部变量:

我们在EA的外部变量中使用识符号SlopePeriod、SlopeMethod和SlopePrice。

以下是iCustom()函数将如何沿着外部变量寻找这个特殊指标的程序代码:

NULL表示我们正在使用的当前K线图记号,而“0”是目前K线图的周期。Slope Direction Line是指标档案的名字。SlopePeriod、SlopeMethod和SlopePrice是三个指标参数。我们使用默认模式指数“0”,而位移值则是目前的K棒。
虽然Slope Direction Line指标被画成一条线,但实际上是由两个不同的缓冲存储器所组成。监视指标价格是往上还是往下,颜色(和缓冲存储器)也因此而改变。
若在K线图上附上指标,然后观看MetaTrader中的数据窗口(Data Window),将会看到给Slope Direction Line的两个值:第一个值是当指标值增加时显示的价格,这条线预设为蓝色;第二个值是当指标值减少时显示的价格,这条线预设为红色。
我们需要为这两条线决定模式指数,最简单的方法是查看源代码。在init()函数中,你将看到多条程序代码用以执行和设定指标缓冲存储器的预定义参量:

第一个SetIndexBuffer()函数设定一个指标缓冲存储器搭配“0”的指数,并使用数组Uptrend。我们可以借由数组名猜出这适用于蓝色的指标线。第二个类似函数则搭配着数组DnTrend。注意最底下的SetIndexStyle()函数,设定缓冲存储器为“0”和“1”,以便画出一条实线。
第三个缓冲存储器,搭配指数2和数组ExtMapBuffer,是用来单纯计算的。因此,我们可以推论出“0”和“1”是包含在我们指标价格数据中的缓冲存储器指数。根据数组识别符号,“0”是指上扬的趋势线,“1”则是指下滑的趋势线。这里告诉我们如何执行指标:

注意Mode参数,倒数第二个,已被设定成合适的指标缓冲存储器指数——“0”是SlopeUp,“1”是SlopeDown。Shift参数,倒数第一个,被设定为“1”,以检査最后K棒的收盘值。
重复检查是否使用正确的Mode参数是个好主意。加上一个Print()函数到你的EA中,然后在Strategy Tester中使用Open PriceOnly作为测试模型,以执行一个回头测试。确认在iCustom()函数中Shift参数设为“1”。

Print()函数会沿着先前K棒的时间和日期,打印出我们的指标缓冲存储器到记录中。你可以在Strategy Tester窗口的Journal表中看到记录。这里是纪录中print()函数的输出值:

SlopeUp的值,2147483647用以表示一个自制指标的状态EMPTY_VALUE,是一个非常大的整数值。你可以用它作为交易条件。SlopeDown回传了前一个K棒的指标值。Time表示我们想在线图中所找的K棒。
点选Strategy Tester窗口中的Open Chart按钮,已开启一个你的指标适用的K线图。用Time来找记录中的K棒,并确认在数据窗口中的指标值与记录中打印的相符。若不符合,调整iCustom()函数中的Mode参数,你便可以发现正确的缓冲存储器。
这里告诉我们如何在我们的EA中使用Slope Direction Line指标。若坡度趋势向上,SlopeUp会回传一个价格值,而SlopeDown会回传EMPTY_VALUE或2147483647。相反的情况则应用于当坡度趋势向下时。

这些条件是简易的检查区分EMPTY_VALUE的线。