下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2013.10.01 13:12
EA

MQL5向导 - 基于价格交叉移动平均线指标的交易信号 - MetaTrader 5EA

| Chinese English Русский Español Deutsch 日本語 Português

显示:
696
等级:
投票: 18

MQL5 向导 允许自动创建EA 交易代码。详细信息参考 使用MQL5 向导快速创建EA交易

这里我们考察基于价格交叉移动平均线指标的策略。该策略名称为“Signals based on price crossover with MA” (当使用MQL5 向导自动创建EA 交易时可看到)。

交易信号:

  • •买入:价格向上交叉移动平均线。
  • •卖出:价格向下交叉移动平均线。
  • 检查移动平均线的上升/下降以过滤虚假信号。

这个策略已在CSignalMA类中实现,CSignalMA类是MQL5 标准库的众多交易策略类中的一个(位于MQL5\Include\Expert\Signal\SignalMA.mqh)。

图1. 基于价格交叉移动平均线的交易信号

图1. 基于价格交叉移动平均线的交易信号

交易信号

交易策略在CSignalMA类实现, 它有一些受保护的方法可简化对指标和价格的访问:

double  MA(int ind)          //返回柱子的移动平均线值
double  Open(int ind)        //返回柱子的开盘价
double  Close(int ind)       //返回柱子的收盘价
double  StateMA(int ind)     //如果均线上升返回正数;均线下降则返回负数
double  StateOpen(int ind)   //返回开盘价和移动平均线的差值
double  StateClose(int ind)  //返回收盘价和移动平均线的差值
(未完成的)柱子的价格和指标值可能会改变,所以必需通过完成的(成形的)柱子的数据去检查交易条件。

1. 多头开仓

多头开仓的条件(价格交叉移动平均线并且检查移动平均线上升):

  • Open(1)<MA(1):开盘价低于移动平均线;
  • Close(1)>MA(1): 收盘价高于移动平均线;
  • MA(1)>MA(2): 检查移动平均线上升(以过滤虚假信号)。
//+------------------------------------------------------------------+
//| 检查多头开仓的条件 (买入)                    |
//+------------------------------------------------------------------+
bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//--- 价格向上交叉移动平均线,并且移动平均线上升
   return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0);
  }

2. 多头平仓

多头平仓的条件(价格交叉移动平均线并且检查移动平均线下降)

  • Open(1)>MA(1): 开盘价高于移动平均线;
  • Close(1)<MA(1):收盘价低于移动平均线;
  • MA(1)<MA(2): 检查移动平均线下降(以过滤虚假信号)
//+------------------------------------------------------------------+
//| 检查多头平仓的条件                        |
//+------------------------------------------------------------------+
bool CSignalMA::CheckCloseLong(double& price)
  {
   price=0.0;
//--- 价格向下交叉移动平均线,并且移动平均线下降
  return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0);
  }


3. 空头开仓

空头开仓的条件和多头平仓的条件一样。

//+------------------------------------------------------------------+
//| 检查空头开仓的条件 (卖出)                  |
//+------------------------------------------------------------------+
bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//--- 价格向下交叉移动平均线,并且移动平均线下降 
   return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0);
  }


4. 空头平仓

空头平仓的条件和多头开仓的条件一样。

//+------------------------------------------------------------------+
//| 检查空头平仓的条件                         |
//+------------------------------------------------------------------+
bool CSignalMA::CheckCloseShort(double& price)
  {
   price=0.0;
//--- 价格向上交叉移动平均线,并且移动平均线上升
   return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0);
  }
//+------------------------------------------------------------------+

使用MQL5向导创造EA 交易

要基于该策略创建交易程序,你需要在 MQL5向导的 "快速创建EA交易" 选项 "中选择信号属性为" Signals based on price crossover with MA":

图2. 在MQL5 向导中选择“Signals based on price crossover with MA”

图2. 在MQL5 向导中选择“Signals based on price crossover with MA”

接下来你必须指定所需要的 移动止损 算法和 货币风险管理系统。EA 交易代码将被自动创建,你可以对它编译然后在MetaTrader 5客户端的策略测试中对其测试。


测试结果

让我们来考察EA交易在历史数据(EURUSD H1,自定义时段:1.1.2010-05.01.2011,MA_period=12,MA_Shift=0)上的回归测试。

在创建EA 交易时,我们使用了固定交易量 (固定交易手数, 0.1),未使用移动止损算法 (不使用移动)。

交叉移动平均线

图3. 基于价格交叉移动平均线的EA交易的历史回归测试结果

附件:定义CSignalMA 类(包含在 MQL5 标准库)的SignalMA.mqh文件位于MQL5\Include\Expert\Signal文件夹中. 文件 crossoverma.mq5 包含了由MQL5向导创建的EA交易代码。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/248

一个EA交易模板 一个EA交易模板

该代码是一个EA交易的模板,由Valery Mazurenko (notused) 编写用于2010年自动交易锦标赛。

即时价格 即时价格

即时价格图表的例子

MQL5向导 - 基于三条移动平均线的交易信号 MQL5向导 - 基于三条移动平均线的交易信号

基于三条移动平均线的交易信号 被考虑. 基于该策略的EA交易的代码可以被MQL5向导自动生成

MQL5向导 - 基于价格交叉移动平均线并由ADX确认的交易信号 MQL5向导 - 基于价格交叉移动平均线并由ADX确认的交易信号

基于价格交叉移动平均线指标并由ADX确认的交易信号 被考虑. 基于该策略的EA交易的代码可以被MQL5向导自动生成