- 显示:
- 3641
- 等级:
- 已发布:
- 2013.10.01 13:15
- 已更新:
- 2016.11.22 07:33
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
MQL5 向导 允许自动创建EA 交易代码。详细信息参考 使用MQL5 向导快速创建EA交易。
这里将考虑基于3个移动平均数的趋势策略。这个策略叫做 "基于三条指数移动平均线的信号". 为了确定趋势,要使用三条指数平滑移动平均线:快速EMA,中速EMA和慢速EMA。
交易信号:
- 买入信号:快速EMA>中速EMA>慢速EMA(向上趋势)。
- 卖出信号:快速EMA<中速EMA<慢速EMA(向下趋势)。
图1. 基于三条移动平均线的交易信号
交易信号
这个交易策略实施在CSignal3EMA类中,它有一些受保护的方法可简化对三条移动均线值的访问(快速,中速,慢速):
double FastEMA(int ind) // 返回柱子的快速EMA值 double MediumEMA(int ind) // 返回柱子的中速EMA值 double SlowEMA(int ind) // 返回柱子的慢速EMA值
1. 多头开仓
向上的趋势由以下条件决定:FastEMA>MediumEMA>SlowEMA:
- FastEMA(1)>MediumEMA(1): 快速EMA高于中速EMA(在刚结束的前一柱子上);
- MediumEMA(2)>SlowEMA(1): 中速EMA高于慢速EMA(在刚结束的前一柱子上);
//+------------------------------------------------------------------+ //| 检查多头开仓的条件 (买入) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Ask()-m_stop_loss*m_adjusted_point; tp =m_symbol.Ask()+m_take_profit*m_adjusted_point; //--- 检查向上趋势(在刚结束的前一柱子上): FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
2. 多头平仓
向下的趋势由以下条件决定:FastEMA<MediumEMA<SlowEMA:
- FastEMA(1)<MediumEMA(1): 快速EMA低于中速EMA(在刚结束的前一柱子上);
- MediumEMA(2)<SlowEMA(1): 中速EMA低于慢速EMA(在刚结束的前一柱子上);
//+------------------------------------------------------------------+ //| 检查多头平仓条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseLong(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- 检查向下趋势(在刚结束的前一柱子上): FastEMA(1)<MediumEMA(1)<SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
3. 空头开仓
//+------------------------------------------------------------------+ //| 检查空头开仓条件(卖出) | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { double medium=MediumEMA(1); //--- price=0.0; sl =m_symbol.Bid()+m_stop_loss*m_adjusted_point; tp =m_symbol.Bid()-m_take_profit*m_adjusted_point; //--- 检查向下趋势(在刚结束的前一柱子上):FastEMA(1)<MediumEMA(1)<SlowEMA(1) return(FastEMA(1)<medium && medium<SlowEMA(1)); }
4. 空头平仓
//+------------------------------------------------------------------+ //| 检查空头平仓条件 | //+------------------------------------------------------------------+ bool CSignal3EMA::CheckCloseShort(double& price) { double medium=MediumEMA(1); //--- price=0.0; //--- 检查向上趋势(在刚结束的前一柱子上):FastEMA(1)>MediumEMA(1)>SlowEMA(1) return(FastEMA(1)>medium && medium>SlowEMA(1)); }
可以改进空头平仓:没有必要等待上升趋势,可在震荡时平仓,这可由以下条件决定:快速:FastEMA>MediumEMA<SlowEMA.
使用MQL5向导创造EA 交易
要基于该策略创造交易程序,你需要在 MQL5向导的 "快速创建EA交易" 选项 "中选择信号属性为" Signals based on three EMA":
图2. 在MQL5 向导中选择“Signals based on three EMA”
接下来你必须指定所需要的 移动止损 算法和 货币风险管理系统。EA 交易代码将被自动创建,你可以对它编译然后在MetaTrader 5客户端的策略测试中对其测试。
测试结果
让我们来考察EA交易在历史数据(EURUSD H1,自定义时段:1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900)上的回归测试。
在创建EA 交易时,我们使用了固定交易量 (固定交易手数, 0.1),未使用移动止损算法 (不使用移动)。
图3. 基于三条指数移动平均线的EA交易的历史回归测试结果
附件:定义CSignal3EMA 类( 的Signal3EMA.mqh文件位于terminal_data_folder\MQL5\Include\Expert\Signal文件夹中.
文件 threeema.mq5 包含了通过MQL5 Wizard 创建的EA交易代码。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/250

基于价格交叉移动平均线指标的交易信号(CSignalMA来自MQL5标准库)被考虑. 基于该策略的EA交易的代码可以被MQL5向导自动生成

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

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

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