9.2.3 start( )函数
在start( )函数里面插入一个表达式:
IndicatorCounted( )回传指标已经计算好的线图上的柱的数量。当EA被启动时,这个值将是"0"。该指标在每一个K线图上都会被计算。我们检查IndicatorCounted()函数以得知随后的柱体有多少已被计算,进而知道还需要计算多少新柱体。
该指标的计算将发生在for循环内。起始点是第一个没有被计算的K棒,终点是目前的K棒。我们将比较IndicatorCounted( )的值和事先定义的Bars变量,该变量回传目前K线图上的K棒数量,这将决定我们的起始点。以下是for循环的程序代码:
第一个if语法在计算新柱体时将对counted_bars递减1。我们会永远至少计算前两个柱体。这是由于有时候最后阶段的柱体可能不会被计算到。接着决定要计算的柱体数量,方法是用先定义的Bars变量减去counted_bars,该值会储存于变量CalculateBars中。
在for循环中,递增变量Count被设定为CalculateBars的值,当Count小于"0"时,计算结束,而Count变量在每次重复时递减,并且从左至右计算K线图中的每个柱体。
以下是计算Bollinger Bands的程序代码。档案开始处我们将执行外部变量BandsPeriod。For循环与我们上面创造的是同一个。
首先,我们使用iMA( )函数执行内建移动平均指标,并回传值到EMA[Count]。注意:数组指数和移动平均指标的Shift参数都使用目前的Count值。
接着,我们用iStdDev( )呼叫标准偏差指标。若要计算上方带,我们只需把标准偏差加到移动平均线即可,该值会储存于缓冲存储器UpperBand[ ]中。我们用移动平均减去标准偏差来计算LowerBand[ ]。
给指标全范围的设定以延展指标。我们设定调整向前位移,可用移动平均法、应用价格参数和标准偏差调整:
我们加入外部变数以调整iMA( )函数和iStdDev( )函数,也加入一个参数以调整标准偏差的数量。要计算本值,只需简单的把StdDev和Deviations相乘。现在有一个可调整Bollinger Bands的指标,其和标准的MetaTrader指标相比更具弹性。完整的程序代码请见本书附录E。
除了重算内建指标,你还可以让自制指标具有更多功能。依据投资者所具备的数学知识,可以编写出不包含在MetaTrader中的指标,甚至创造只属于你自己的指标,也可以标记要操作的对象。




