利用移动平均线开发的均线类的ea,可以说是多的数不胜数的。均线最基础的交易思路是以均线交叉为交易触发信号。比如均线金叉信号做多,死叉信号做空。那么在ea编程中,如何来表达均线交叉呢?
作为均线交叉,最少是需要采用两条不同周期的均线,也可以说是长短期均线吧。比如说在欧元兑美元EURUSD四小时图表中采用10和33两条均线的交叉信号作为EA交易信号。
由于实际编程中,均线的周期参数可能会有所调整,所以先将两条均线的周期参数定义为输入变量,如下:
input int ma1_Period = 10;//均线一周期
input int ma2_Period = 33;//均线二周期
为了获取均线数值的方便,也为了编程中调用的方便,我们可以造个最简单的均线函数来获取均线的值,如下:
double Custom_Ma(int MPeriod,int cnt)
{
return(iMA(Symbol(),0, MPeriod, 0, MODE_SMA, PRICE_CLOSE, cnt));
}
对于iMA函数,其括号中参量分别是货币名称、图表周期、均线周期、平移、均线类型、价格应用于和对应序号。如果这些参量有需要自行设置的,那也可以根据需要将它们自行定义。这里只是简单举例。
要定义均线交叉,其实就是比较均线大小的一个变化,比如小周期均线从小于大周期均线转变成大于大周期均线,就形成了金叉。反之,就形成了死叉。为了确认交叉变化的过程,通常取三个单位的均线值来比较。那接下来,我们就通过调用自定义函数来分别获取两条均线的三个单位的具体数值。代码如下:
double ma1_0 = Custom_Ma(ma1_Period,0);
double ma1_1 = Custom_Ma(ma1_Period,1);
double ma1_2 = Custom_Ma(ma1_Period,2);
double ma2_0 = Custom_Ma(ma2_Period,0);
double ma2_1 = Custom_Ma(ma2_Period,1);
double ma2_2 = Custom_Ma(ma2_Period,2);
均线对应的序号是和图表中K线的序号是一致的,当前为0,接下来从右往左就是1、2、3….,定义金叉的逻辑就是当前均线一大于均线二,上一个单位均线一小于均线二;同理,定义死叉的逻辑是当前均线一小于均线二,上一个单位均线一大于均线二。为了确认交叉,通常以K线收盘确认,所以比较的重点是第一根K线和第二根K线对应的均线值。代码如下:
if(ma1_0 > ma2_0 && ma1_1 > ma2_1 && ma1_2 < ma2_2)//金叉信号
if(ma1_0 < ma2_0 && ma1_1 < ma2_1 && ma1_2 > ma2_2)//死叉信号
当然,本文只是说说均线交叉的表达方式。对于具体的均线ea类的编程还是因不同策略需求而定的。