6.5 比较K棒之间的指标值

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和SellTicket检查,因为这个方法对于检查已储存的订单票号更为可靠。我们也无须担心当穿越发生时订单是否开启得宜。