下载MetaTrader 5

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

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

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

2013.10.01 13:24
EA

MQL5向导 - 基于MACD指标主线和信号线交叉的交易信号 - MetaTrader 5EA

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

显示:
1287
等级:
投票: 19

MQL5向导 提供EA 交易的自动创建 (参考MQL5向导:无需编程创建EA交易).

这里我们将考察基于MACD指标线交叉的交易信号。该策略名称为“Signals based on crossover of main and signal MACD lines” (当使用MQL5 向导自动创建EA 时可看到)

MACD 指标的主线由快速EMA和慢速EMA之间的差值计算而得。MACD 的信号线由对主线进行PeriodSignal 周期的平滑计算而得。

交易信号:

  • 买入:MACD指标的主线和信号线向上交叉。
  • 卖出:MACD指标的主线和信号线向下交叉。

这个策略实现在MQL5标准库的交易策略类CSignalMACD类中(位于MQL5\Include\Expert\Signal\SignalMACD.mqh)。

图1. 基于MACD指标主线和信号线交叉的交易信号

图1. 基于MACD指标主线和信号线交叉的交易信号


交易信号

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

double  MainMACD(int ind)      // 返回某柱上MACD主线的值
double  SignalMACD(int ind)    // 返回某柱上MACD信号线的值
double  StateMACD(int ind)     // 返回MACD主线和信号线的差值
int     ExtStateMACD(int ind); // 返回主线和信号线差值的符号变化的数字 


1. 多头开仓

多头开仓的条件:

  • ExtStateMACD(1)==1; 意味着主线向上交叉MACD 信号线
//+------------------------------------------------------------------+
//| 检查多头开仓的条件 (买入)                     |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==1);
  }


2. 多头平仓

多头平仓的条件:

  • ExtStateMACD(1)==1; 意味着主线向下交叉MACD 信号线
//+------------------------------------------------------------------+
//| 检查多头平仓的条件                         |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==-1);
  }


3. 空头开仓

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

//+------------------------------------------------------------------+
//| 检查空头开仓条件(卖出)                  |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==-1);
  }


4. 空头平仓

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

//+------------------------------------------------------------------+
//| 检查空头平仓的条件                        |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==1);
  }

使用MQL5向导创造EA 交易

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

图2. 在MQL5 向导中选择“Signals based on crossover of main and signal MACD lines”

图2. 在MQL5 向导中选择“Signals based on crossover of main and signal MACD lines”

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


测试结果

让我们来考察EA交易在历史数据(EURUSD H1,自定义时段:1.1.2010-05.01.2011, PeriodFast=12, PeriodSlow=24, PeriodSignal=9, StopLoss=20, TakeProfit=80)上的回归测试。

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

图3. 以基于MACD指标线交叉为交易信号的EA交易的历史回归测试结果

图3. 以基于MACD指标线交叉为交易信号的EA交易的历史回归测试结果


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

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

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

基于两条指数平滑移动平均线交叉的交易信号 被考虑。基于该策略的EA交易的代码可以被MQL5向导自动生成

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

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

MQL5向导 - 基于两条移动平均线带日内时间过滤的交易信号 MQL5向导 - 基于两条移动平均线带日内时间过滤的交易信号

基于两条指数平滑移动平均线交叉带日内过滤的交易信号 被考虑。基于该策略的EA交易的代码可以被MQL5向导自动生成

MQL5 向导 - 基于 锤头 / 上吊线形态的交易信号 + CCI MQL5 向导 - 基于 锤头 / 上吊线形态的交易信号 + CCI

基于 锤头 / 上吊线形态的交易信号,由 CCI (商品通道指数)指标确认.基于此交易策略的交易程序代码可使用 MQL5 向导自动生成。