6.5 比较K 棒之间的指标值
有时需要比较目前或最近的K 棒和之前的K 棒之间的指标值。例如,若想知道一个移动平均是上扬还是下降,我们要读取目前的K 棒和先前的K 棒指标做比较。
我们使用指标函数中的Shift参数来决定是哪一个K 棒要回传指标值。Shift参数永远是指标函数的最后一个参数: 目前的K 棒有位移值用"0" 表示,前一个K棒有位移值用"1" 表示,以此类推。下列的移动平均函数将为目前及前一个K 棒回传一个移动平均值:

在这个范例中, MA 是包括目前K 棒指标值的变量,Last MA 则是包括前一个K 棒的指标值。注意:Shift 参数值为"0" 表示目前K 棒, "1" 表示前一个K 棒。
以下是判断一个移动平均线上升或下降的程序源代码:

如果目前K 棒的指标值(MA) 大于前一个K 棒的值(lastMA) ,我们可以推论出指标在上扬。相反,当目前K 棒的指标值小于前一个K 棒的指标值时,指标在下降。
透过比较前一个K 棒和目前K 棒的指标值,我们可以决定指标近期是否超越或低于某一特定值,诸如振荡指标的超买超卖水平,或另一个指标线。
例如,假设当随机指标高于30 或低于70 ,你的交易系统会提供一个交易信号。以下是该程序的源代码:

Stoch 是目前K 棒的指标值,LastStoch 是前一个K 棒的指标值。若是Stoch 大于30 及LastStoch 小于30 ,我们可以推论:在前一个K 棒时,指标升越了超卖水平。运用相反的比较操作数,我们可以检查一个近期的常数值是否被降越,例如70 的超买水平。
这是另一个使用移动平均的范例。我们将创造一个条件,唯有当FastMA 和SlowMA 在上一个K 棒有穿越时,开启一个订单:
double FastMA = iMA ( NULL, 0 , FastMAPeriod , 0 ,0 ,0 ,0) ;


在这个范例中,我们比较了两个指标的关系。LastFastMA 和LastSlowMA 为前一个K 棒回传了移动平均值。若LastFastMA 小于(或等于) LastSlowMA ,而FastMA目前大于SlowMA ,则我们知道:上一个K 棒快速移动平均线已爬升越过了慢速移动平均线。
这提供了一个可靠的交易讯号,因为我们可以限制唯有当穿越发生时才配置我们的交易。若你想增加K 棒数量以回看何时可找到一个指标超越时,你可以为LastFastMA 和LastSlowMa 函数改变Shift 值。
我们已加上LastFastMa 和LastSlowMa 比较式到我们的EA 里的买卖交易条件中。现在我们可以移除BuyTicket 和SellTìcket 检查,因为这个方法对于检查已储存的订单票号更为可靠。我们也无须担心当穿越发生时订单是否开启得宜。详情请见本书附录C 。