诚信为本
量力而为
当前位置:峰汇在线 ea编程知识 正文

一条移动平均线的EA策略及编程探讨

当往mt4图表上插入一条移动平均线(Moving Average)后,整个图表就含有两个主要对象,一是插入的这条移动平均线,二是蜡烛图(或者K线图)。这时候整个图表看起来比较简洁,当然,也可以说简单。

如果就以这一条均线结合k线价格来开发EA,看起来是有些单纯,可能盈利的概率也不是很大,但作为一种爱好,也不凡研究研究,折腾折腾。

一条移动平均线的EA策略

要根据这种图表信号开发EA,首先要获取价格及K线的相关数据,假设插入的是一条200SMA,那就先用iMA()函数获取几个单位均线的值,如:

  double MA_200_0 = iMA(Symbol(),0, 200, 0, MODE_SMA, PRICE_CLOSE, 0);
  double MA_200_1 = iMA(Symbol(),0, 200, 0, MODE_SMA, PRICE_CLOSE, 1);
  double MA_200_2 = iMA(Symbol(),0, 200, 0, MODE_SMA, PRICE_CLOSE, 2);

当然,也可以定义一个数组,然后结合for循环来获取所需的均线值。iMA()函数中的参量,根据策略的不同来变更参数类型。

要比较价格和均线的变化,那还需要获取K线相关的价格,主要是四个:开盘价iOpen、收盘价iClose、最低价iLow、最高价iHigh。如:

double Open_0  = iOpen(Symbol(),0, 0);
double Open_1  = iOpen(Symbol(),0, 1);
double Open_2  = iOpen(Symbol(),0, 2);
double Close_0 = iClose(Symbol(),0, 0);
double Close_1 = iClose(Symbol(),0, 1);
double Close_2 = iClose(Symbol(),0, 2);
double Low_0   = iLow(Symbol(),0, 0);
double Low_1   = iLow(Symbol(),0, 1);
double Low_2   = iLow(Symbol(),0, 2);
double High_0  = iHigh(Symbol(),0, 0);
double High_1  = iHigh(Symbol(),0, 1);
double High_2  = iHigh(Symbol(),0, 2);

上面函数中的0、1、2分别是指从图表右侧开始第一、第二、第三个K线所对应的数据值,包括均线也是如此排序。

作为一条均线,其最简单的交易思路是价格站稳均线上方买入,站稳下方卖出。如:

if(Close_0 > MA_0 && Close_1 > MA_1)//简单定义两个单位价格站稳均线上方
if(Close_0 < MA_0 && Close_1 < MA_1)//简单定义两个单位价格站稳均线下方

进一步控制买卖条件,可以定义均线处于上升状态买入,下降状态卖出。如:

if(MA_0 > MA_1 && MA_1 > MA_2)//简单定义两个单位均线在上升
if(MA_0 < MA_1 && MA_1 < MA_2)//简单定义两个单位均线在下降

有些策略可以要求定义均线由下往上突破均线为买入信号,由上往下突破为卖出信号,那就定义突破的概念。如:

if(Close_0 > MA_0 && Close_1 > MA_1 && Open_1 < MA_1 && High_2 < MA_2)//简单定义价格由下往上突破均线
if(Close_0 < MA_0 && Close_1 < MA_1 && Open_1 > MA_1 && Low_2 > MA_2)//简单定义价格由上往下突破均线

当然,这种定义有些简单,如果有需要可以进一步定义之前若干个单位K线价格和均线的位置来实现是在一段涨跌过后才出现的突破信号。

一些严谨的策略,可能需要限制开仓时价格离均线的距离,太远了入场容易止损。这点也不难理解,也很好定义。用输入变量定义一个距离参数,然后比较价格和均线加减这个距离。如:

input int Max_Point = 200;//开仓价格离均线的最大距离
Ask <= MA_0 + (Max_Point*Point)//限制买单价格必须小于设定的距离
Bid >= MA_0 - (Max_Point*Point)//限制卖单价格必须在设定的距离上方

对于单一的顺信号止损止盈的策略,它有个难以避免的结果,那就是资金会在市场无常的波动中慢慢被止损掉。于是,很多纠错类的策略就出来了。如马丁、倍投等等。

在用一条均线研发马丁类的EA时,可以根据均线的突破信号作为第一单开仓信号,开仓后可以根据某些特定的限制条件来进行加仓。

如果是顺势加仓,那么入场后,可以定义均线在上升,价格在均线上方来持续加仓。

当然,不管是顺势加仓还是逆势加仓,都要合理的控制风险。加仓类的策略,大部分时候容易获利出场。

对于利用一条均线倍投类的策略,不多见,但也不能说没有研究的价值,以严谨的突破信号开仓,错了下个信号加倍投注,总会有对的时候,前提依然是要研究能容忍多少次连错。

版权所有转载请注明标题及链接:峰汇在线 » 一条移动平均线的EA策略及编程探讨