欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

MQL5 向导 - 基于价格与移动平均线交叉的交易信号,由 ADX 确认 - MetaTrader 5 专家

author emer | 106 人阅读 | 0 人评论 |

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

MQL5 向导允许自动创建 EA 交易代码。看在 MQL5 向导中创建现成的 EA 交易了解详情。

在这里,我们将考虑基于价格与移动平均线指标交叉的策略,并由 ADX 指标确认。该策略称为ADX 确认的基于价格与 MA 交叉的信号(在 MQL5 向导中自动创建 EA 时)。

贸易信号:

该策略在 CSignalADX_MA 类中实现(必须将其放置到terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh)。

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

图 1. 基于价格与移动平均线交叉的交易信号,经 ADX 确认

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

双倍的   加 ADX(整数工业)    // 返回柱线 DI+ 线的值
双倍的   主 ADX(整数工业)    //返回柱的主线值
双倍的   减去 ADX(整数工业)   //返回柱的 DI- 线值
双倍的   指数移动平均线(整数工业)        // 返回柱的移动平均线值
双倍的   关闭(整数工业)      // 返回柱的收盘价值
双倍的   状态 ADX(整数工业)   // 返回 DI+ 和 DI- 线之间的差异
双倍的   状态EMA(整数工业)   // 如果 EMA 增加则返回正值,如果减少则返回负值
双倍的   状态关闭(整数工业) // 返回收盘价与移动平均线之间的差值
此实现的特点是对趋势存在进行额外检查(使用方向运动指标)。它允许过滤错误信号并使用当前(未完成)柱的值检查交易条件。


1. 开多仓

开立多头头寸的条件:

//+------------------------------------------------------------------+
//|检查开立多头头寸的条件(买入)                    |
//+------------------------------------------------------------------+
布尔值CSignalADX_MA::CheckOpenLong(双倍的& 价格,双倍的&SL,双倍的&TP,日期时间及有效期)
  {//--- 条件 1:移动平均线在当前和最后完成的柱上增加  布尔值Buy_Condition_1=(StateEMA(0)>0&& 状态EMA(1)>0);//--- 条件 2:最后完成的柱的收盘价高于移动平均线  布尔值Buy_Condition_2=(状态关闭(1)>0);//--- 条件 3:当前柱的 ADX 值大于指定的最小值(趋势阈值)  布尔值Buy_Condition_3=(MainADX(0)>m_minimum_ADX);//--- 条件 4:当前柱的 DI+ 值大于 DI-  布尔值Buy_Condition_4=(StateADX(0)>0);//---   价格=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;//--- 检查所有条件  返回(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. 多头平仓

多头平仓条件:

//+------------------------------------------------------------------+
//|检查平仓条件 |//+------------------------------------------------------------------+
布尔值CSignalADX_MA::CheckCloseLong(双倍的& 价格)
  {//--- 条件 1:移动平均线在当前和最后完成的柱上下降  布尔值Sell_Condition_1=(StateEMA(0)<0&& 状态EMA(1)<0);//--- 条件 2:已完成柱的收盘价低于移动平均线  布尔值Sell_Condition_2=(状态关闭(1)<0);//--- 条件 3:当前柱的 ADX 值大于指定的最小值(趋势阈值)  布尔值Sell_Condition_3=(MainADX(0)>m_minimum_ADX);//--- 条件 4: DI- 的值大于当前柱的 DI-  布尔值Sell_Condition_4=(StateADX(0)<0);//---   价格=0.0;//--- 检查所有条件  返回(销售_条件_1 && 销售_条件_2 && 销售_条件_3 && 销售_条件_4);
  }


3. 开空仓

空头开仓条件与多头平仓条件相同。

//+------------------------------------------------------------------+
//|检查开空头寸(卖出)的条件                  |
//+------------------------------------------------------------------+
布尔值CSignalADX_MA::CheckOpenShort(双倍的& 价格,双倍的&SL,双倍的&TP,日期时间及有效期)
  {//--- 条件 1:移动平均线在当前和最后完成的柱上下降  布尔值Sell_Condition_1=(StateEMA(0)<0&& 状态EMA(1)<0);//--- 条件 2:已完成柱的收盘价低于移动平均线  布尔值Sell_Condition_2=(状态关闭(1)<0);//--- 条件 3:当前柱的 ADX 值大于指定的最小值(趋势阈值)  布尔值Sell_Condition_3=(MainADX(0)>m_minimum_ADX);//--- 条件 4: DI- 的值大于当前柱的 DI-  布尔值Sell_Condition_4=(StateADX(0)<0);//---   价格=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;//--- 检查所有条件  返回(销售_条件_1 && 销售_条件_2 && 销售_条件_3 && 销售_条件_4);
  }


4. 平仓

空头平仓条件与多头开仓条件相同。

//+------------------------------------------------------------------+
//|检查空头平仓条件 |//+------------------------------------------------------------------+
布尔值CSignalADX_MA::CheckCloseShort(双倍的& 价格)
  {//--- 条件 1:移动平均线在当前和最后完成的柱上增加  布尔值Buy_Condition_1=(StateEMA(0)>0&& 状态EMA(1)>0);//--- 条件 2:最后完成的柱的收盘价高于移动平均线  布尔值Buy_Condition_2=(状态关闭(1)>0);//--- 条件 3:当前柱的 ADX 值大于指定的最小值(趋势阈值)   布尔值Buy_Condition_3=(MainADX(0)>m_minimum_ADX);//--- 条件 4:当前柱的 DI+ 值大于 DI-  布尔值Buy_Condition_4=(StateADX(0)>0);//---   价格=0.0;//--- 检查所有条件
返回(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

使用 MQL5 向导创建 EA 交易

要根据策略创建交易机器人,您需要将信号属性选择为“ADX 确认的基于价格与 MA 交叉的信号” 在“创建现成的 EA 交易”选项中MQL5 向导:

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

图 2. 在 MQL5 向导中选择“信号基于与由 ADX 确认的 MA 的价格交叉”

接下来你必须指定需要的追踪止损算法和资金和风险管理系统。 Expert Advisor 的代码将自动创建,您可以对其进行编译和测试策略测试仪MetaTrader 5 客户端。

测试结果

让我们考虑根据历史数据对 EA 交易进行回溯测试(EURUSD H1,测试期:2010 年 1 月 1 日至 2011 年 1 月 5 日,PeriodADX=33,MinimumADX=22,PeriodMA=39,StopLoss=400,TakeProfit=900)。

在创建 EA 交易时,我们使用了固定交易量 (交易固定手数, 0.1), 未使用追踪止损算法 (未使用尾随)。

MQL5 Wizard - Trade Signals Based on Price Crossover with Moving Average, confirmed by ADX - expert for MetaTrader 5

图 3. EA 交易的历史回测结果,基于 ADX 确认的与 MA 的价格交叉

附件:具有 CSignalADX_MA 类的 SignalADX-MA.mqh 必须放置到terminal_data_folder\MQL5\Include\Expert\Signal\。

ma_crossover_adx.mq5 包含使用 MQL5 向导创建的 EA 交易的代码。


附件下载

📎 signaladx-ma.mqh (13.12 KB)

📎 ma_crossover_adx.mq5 (6.14 KB)

Source: MQL5 #258

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录