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

MQL5 向导 - 基于两个 EMA 交叉和日内时间过滤器的交易信号 - MetaTrader 5 专家

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

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

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

在这里,我们将考虑基于两个指数平滑移动平均线(快速 EMA 和慢速 EMA)与日内时间过滤器交叉的策略。该策略称为“基于两个 EMA 与日内时间过滤器交叉的信号”(在 MQL5 向导中自动创建 EA 时)。

该策略在 CSignal2EMA_ITF 类中实现。

交易系统基于挂单,价格水平根据移动平均线的值计算,使用 ATR 单位(平均真实范围)。

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

图 1. 交易信号,基于两个 EMA 与日内时间过滤器的交叉

交易策略的实施是在CSignal2EMA_ITF,它有一些受保护的方法来简化对指标值的访问:

 双倍的  快速EMA(整数工业)      // 返回柱的快速 EMA 值
 双倍的  慢速EMA(整数工业)      // 返回柱的慢速 EMA 值
 双倍的  StateFastEMA(整数工业)// 如果 EMA 快速增加/减少,则返回正值/负值
 双倍的  状态SlowEMA(整数工业)// 如果慢速 EMA 增加/减少,则返回正值/负值
 双倍的  状态EMA(整数工业)    // 返回快速 EMA 和慢速 EMA 之间的差异
 双倍的  ATR(整数工业)          // 返回柱的 ATR 值


1. 开多仓

它检查开多仓的条件:最后完成的柱上的快速和慢速 EMA 之间的差异是否已将其符号从“-”更改为“+”(StateEMA(1)>0 && StateEMA(2)<0)。

接下来,它通过调用 CSignalITF 类的 CheckOpenLong() 方法来检查日内时间过滤条件。如果交易允许,它将计算基础价格水平(移动平均线的值)和最后完成的柱的 ATR 范围值。

根据 Limit 输入参数的符号,它将下达买入挂单。订单价格、止盈和止损水平是相对于基本价格水平(以 ATR 单位)计算的。订单到期时间由 Expiration 输入参数定义(以柱为单位)。

//+------------------------------------------------------------------+
//|检查开立多头头寸的条件(买入)                    |
//+------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckOpenLong(双倍的& 价格,双倍的&SL,双倍的& tp、日期时间和到期日)
  {
  如果(!(状态EMA(1)>0&& 状态EMA(2)<0))                    返回错误的);
  如果(!m_time_filter.CheckOpenLong(价格,sl,tp,到期))返回错误的);//---  双倍的EMA=慢EMA(1);
  双倍的atr=ATR(1);
  双倍的点差=m_symbol.Ask()-m_symbol.Bid();//---   价格=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
   sl   =m_symbol.NormalizePrice(价格+m_stop_loss*atr);
   tp   =m_symbol.NormalizePrice(价格-m_take_profit*atr);
   过期+=m_expiration*PeriodSeconds(m_period);//---  返回真的);
  }

2. 多头平仓

在我们的例子中,检查平仓条件的函数总是返回 false,即假设多头仓位将通过止盈或止损平仓。如果需要,您可以编写自己的代码来实现此方法。

//+------------------------------------------------------------------+
//|检查平仓条件 |//+------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckCloseLong(双倍的& 价格)
  {
  返回错误的);
  }


3. 开空仓

它检查开空头寸的条件:最后完成的柱上的快速和慢速 EMA 之间的差异是否已将其符号从“+”更改为“-”(StateEMA(1)<0 && StateEMA(2)>0)。

接下来,它通过调用 CSignalITF 类的 CheckOpenLong() 方法来检查日内时间过滤条件。如果交易允许,它将计算基础价格水平(移动平均线的值)和最后完成的柱的 ATR 范围值。

根据 Limit 输入参数的符号,它将下达卖出挂单。订单价格、止盈和止损水平是相对于基本价格水平(以 ATR 单位)计算的。订单到期时间由 Expiration 输入参数定义(以柱为单位)。

//+------------------------------------------------------------------+
//|检查开空头寸(卖出)的条件                  |
//+------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckOpenShort(双倍的& 价格,双倍的&SL,双倍的& tp、日期时间和到期日)
  {
  如果(!(状态EMA(1)<0&& 状态EMA(2)>0))                    返回错误的);
  如果(!m_time_filter.CheckOpenShort(价格,sl,tp,到期))返回错误的);//---  双倍的EMA=慢EMA(1);
  双倍的atr=ATR(1);//---   价格      =m_symbol.NormalizePrice(ema+m_limit*atr);
   sl         =m_symbol.NormalizePrice(价格+m_stop_loss*atr);
   tp         =m_symbol.NormalizePrice(价格-m_take_profit*atr);
   过期+=m_expiration*PeriodSeconds(m_period);//---  返回真的);
  }

4. 平仓

在我们的例子中,检查空头平仓条件的函数总是返回 false,即假设仓位将通过止盈或止损平仓。如果需要,您可以编写自己的代码来实现此方法。

//+------------------------------------------------------------------+
//|检查空头平仓条件 |//+------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckCloseShort(双倍的& 价格)
  {
  返回错误的);
  }


5. 买入挂单追踪止损

EA 交易将根据移动平均线和 ATR 的当前值跟踪挂单。

//+--------------------------------------------------------------------------------+
//|检查修改挂单买单的条件 |//+--------------------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* 订单,双倍的& 价格)
  {// - - 查看  如果(订单==NULL)返回错误的);//---  双倍的EMA=慢EMA(1);
  双倍的atr=ATR(1);
  双倍的点差=m_symbol.Ask()-m_symbol.Bid();//---   价格=m_symbol.NormalizePrice(ema-m_limit*atr+spread);//---  返回真的);
  }


6. 卖出挂单追踪止损

EA 交易将根据移动平均线和 ATR 的当前值跟踪挂单。

如果市场价格达到订单价格,订单就会被执行。

//+--------------------------------------------------------------------------------+
//|检查修改挂单买单的条件 |//+--------------------------------------------------------------------------------+
布尔值CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* 订单,双倍的& 价格)
  {// - - 查看  如果(订单==NULL)返回错误的);//---  双倍的EMA=慢EMA(1);
  双倍的atr=ATR(1);//---   价格=m_symbol.NormalizePrice(ema+m_limit*atr);//---  返回真的);
  }

使用 MQL5 向导创建 EA 交易

要根据策略创建交易机器人,您需要将信号属性选择为“基于两个 EMA 与日内时间过滤器交叉的信号” 在“创建现成的 EA 交易”选项中MQL5 向导:

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

图 2. 在 MQL5 向导中选择“基于两个 EMA 与日内时间过滤器交叉的信号”

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

测试结果

让我们考虑对历史数据进行 EA 交易的回测(EUenSD H1,测试期:1.1.2010-05.01.2011,PeriodFastEMA=5,PeriodSlowEMA=30,PeriodATR=7,Limit=1.2,StopLoss=5,TakeProfit=8,Expiration=4,GoodMinuteOfHour=-1,BadMinutesOfHour=0, GoodHourOfDay=-1,BadHoursOfDay=0,GoodDayOfWeek=-1,BadDaysOfWeek=0)。

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

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

在我们的案例中,我们发现两个 EMA 的交叉从 6:00 到 23:59 提供了许多错误信号。我们可以通过设置过滤器参数来指定日内时间过滤器。

例如,我们可以指定时间过滤器,仅允许在 0:00 到 5:59 之间建仓。可以通过设置BadHoursOfDay=16777152=111111111111111111000000b的值来完成。所有其他交易时间都“不好”,因此最好从 6:00 到当天结束期间禁止开立新仓位。

如果我们设置 BadHoursOfDay=16777152 的值,我们将过滤掉许多错误信号:

MQL5 Wizard - Trade Signals Based on Crossover of Two EMA with intraday time filter - expert for MetaTrader 5

CSignalITF 提供了许多其他时间过滤功能(只需指定一小时内的“好”和“坏”分钟、一天中的小时、一周内的天)。

附件:Signal2EMA-ITF.mqh 具有CSignal2EMA_ITF类必须放置在terminal_data_folder\MQL5\Include\Expert\Signal 文件夹中。

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


附件下载

📎 signal2ema-itf.mqh (16.53 KB)

📎 expert_2ema_itf.mq5 (7.29 KB)

Source: MQL5 #264

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