MQL5 向导 - 基于乌云盖顶/刺穿线 + RSI 的交易信号 - MetaTrader 5 专家











有本书“最佳交易者的策略“(俄语),那里考虑了许多交易策略,我们将重点关注反转烛台模式,由随机,CCI,微型金融机构和相对强弱指数振荡器。
最好的方法是创建单独的类,派生自专家信号用于检查烛台图案的形成。对于由烛台模式生成的交易信号的确认,编写从 CCandlePattern 派生的类并在其中添加必要的功能(例如,通过振荡器确认)就足够了。
在这里,我们将考虑基于“乌云盖顶/刺穿线”反转烛台模式的信号,并通过以下方式确认相对强弱指数指标。交易信号模块基于CC蜡烛形态类,这是使用烛台模式创建交易信号的简单示例。
1.“乌云盖顶”和“刺穿线”反转烛台形态
1.1.乌云盖顶
这是在上升趋势结束时发生的看跌烛台反转。第一天形成长阳烛,第二天形成跳空缺口。然而,第二天的收盘价低于第一天的中点。

图 1.“乌云盖顶”烛台形态
“Dark Cloud Cover”模式的识别是在 CheckPatternDarkCloudCover() 方法中实现的CC蜡烛形态班级:
//+------------------------------------------------------------------+ //|检查“乌云盖顶”烛台形态的形成 | //+------------------------------------------------------------------+ 布尔值CCandlePattern::CheckPatternDarkCloudCover() {//--- 乌云盖顶 如果((关闭(2)-打开(2)>平均体(1)) &&//(长白) (关闭(1)<关闭(2)) &&// (关闭(1)>打开(2)) &&//(在前一个主体内关闭) (中开收盘(2)>平仓平均(1)) &&//(上升趋势) (打开(1)>高(2))) //(开盘新高) 返回(真的);//--- 返回(错误的); }
CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 方法CC蜡烛形态类用于检查“乌云盖顶”烛台形态的形成。
1.2.穿孔线
第二天的下跌差距延续了下跌趋势。然而,第二天的收盘价高于第一天实体的中点。这向空头表明底部可能正在形成。使用条形图无法像使用烛台图那样清晰地辨别这种价格走势。第二天收盘对第一天烛身的穿透越多,反转信号成功的可能性就越大。

图 2.“刺穿线”烛台形态
“刺穿线”模式的识别是在 CheckPatternPiercingLine() 方法中实现的CC蜡烛形态班级:
//+------------------------------------------------------------------+ //|检查“刺穿线”烛台形态的形成 | //+------------------------------------------------------------------+ 布尔值CCandlePattern::CheckPatternPiercingLine() {//--- 穿刺线 如果((关闭(1)-打开(1)>平均体(1)) &&//(长白) (打开(2)-关闭(2)>平均体(1)) &&//(长黑) (关闭(1)>关闭(2)) &&// (关闭(1)<打开(2)) &&//(在前一个主体内部关闭) (中开收盘(2)<收盘平均(2)) &&//(下降趋势) (打开(1)<低(2))) //(开盘价低于前一个低点) 返回(真的);//--- 返回(错误的); }
CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 方法CC蜡烛形态类用于检查“刺穿线”烛台模式的形成。
2. 交易信号,由 RSI 指标确认
已开仓位的平仓取决于以下值相对强弱指数。可以分两种情况进行:

图 3. 由 RSI 指标确认的“乌云盖顶”形态
2.1.开多仓/平空仓
“刺穿线”形态的形成必须通过相对强弱指数指标:RSI(1)<40(最后完成柱的 RSI 值必须小于 40)。
空头头寸必须平仓,如果相对强弱指数指标已向上突破关键水平70或30。
//+------------------------------------------------------------------+ //|检查进入和退出市场的条件 | //| 1) 进入市场(开仓多头,结果=80) | //| 2) 市场退出(平仓,结果=40) | //+------------------------------------------------------------------+ 整数CDC_PL_RSI::长条件() { 整数结果=0;//--- idx 可用于确定 Expert Advisor 工作模式 //--- idx=0 - 在这种情况下 EA 在每个价格变动时检查交易条件 //--- idx=1 - 在这种情况下 EA 仅检查新闻柱的交易状况 整数idx =StartIndex();//--- 检查开立多头头寸的条件 //--- 刺穿线形态的形成且 RSI<30 如果(检查烛台图案(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40)) 结果=80;//--- 检查平仓条件 //--- 超买/超卖水平的信号线交叉(向上 30,向上 70) 如果(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) 结果=40;//--- 返回结果 返回(结果); }
2.2.开空头仓位/平仓多头仓位
“乌云盖顶”形态的形成必须由相对强弱指数指标:RSI(1)>60(最后完成柱的 RSI 指标值必须大于 60)。
多头头寸必须平仓,如果相对强弱指数指标已向下穿越关键水平 70 或 30。
//+------------------------------------------------------------------+ //|检查进入和退出市场的条件 | //| 1) 进入市场(空头持仓,结果=80) | //| 2) 市场退出(平仓,结果=40) | //+------------------------------------------------------------------+ 整数CDC_PL_RSI::ShortCondition() { 整数结果=0;//--- idx 可用于确定 Expert Advisor 工作模式 //--- idx=0 - 在这种情况下 EA 在每个价格变动时检查交易条件 //--- idx=1 - 在这种情况下 EA 仅检查新闻柱的交易状况 整数idx =StartIndex();//--- 检查开空头寸的条件 //--- 形成乌云盖顶形态且 RSI>60 如果(检查烛台模式(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60)) 结果=80;//--- 检查平仓条件 //--- 超买/超卖水平的信号线交叉(向下 70,向下 30) 如果(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) 结果=40;//--- 返回结果 返回(结果); }
2.3.使用 MQL5 向导创建 EA 交易
CDC_PL_RSI 类不包含在标准库类中,要使用它,需要下载 adc_pl_rsi.mqh 文件(参见附件)并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对 acandlepatterns.mqh 文件也应执行相同的操作。重新启动 MetaEditor 后,您可以在 MQL5 向导中使用它。
创建 Expert Advisor 启动MQL5 向导:

图 4. 使用 MQL5 向导创建 EA 交易
让我们指定 EA 交易的名称:

图 5. EA 交易的一般属性
之后我们需要选择所使用的交易信号模块。

图 6. EA 交易的信号属性
在我们的例子中,我们仅使用一个交易信号模块。

图 7. EA 交易的信号属性
添加了交易信号模块:

图 8. EA 交易的信号属性
您可以选择任何追踪属性,但我们将使用“未使用追踪止损”:

图 9. EA 交易的追踪属性
关于资金管理属性,我们将使用“固定交易量交易”:

图 10. EA 交易的资金管理属性
按“完成”按钮,我们将获得生成的 EA 交易的代码,位于 Expert_ADC_PL_RSI.mq5 中,它将保存在terminal_data_folder\MQL5\Experts\ 中。
生成的 EA 交易的默认输入参数:
//--- 主信号输入 输入 整数 Signal_ThresholdOpen =10; // 打开信号阈值 [0...100] 输入 整数 Signal_ThresholdClose =10; // 关闭信号阈值 [0...100] 输入 双倍的 Signal_PriceLevel =0.0; // 执行交易的价格水平 输入 双倍的 Signal_StopLevel =50.0; // 止损水平(以点为单位) 输入 双倍的 Signal_TakeLevel =50.0; // 止盈水平(以点为单位)
必须更换为:
//--- 主信号输入 输入 整数 Signal_ThresholdOpen =40; // 打开信号阈值 [0...100] 输入 整数 Signal_ThresholdClose =20; // 关闭信号阈值 [0...100] 输入 双倍的 Signal_PriceLevel =0.0; // 执行交易的价格水平 输入 双倍的 Signal_StopLevel =0.0; // 止损水平(以点为单位) 输入 双倍的 Signal_TakeLevel =0.0; // 止盈水平(以点为单位)
Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许指定开仓和平仓的阈值水平。
在交易信号类的 LongCondition() 和 ShortCondition() 方法的代码中,我们指定了 阈值的固定值:
该 Expert Advisor 由 MQL5 向导使用交易信号模块中的“投票”生成开仓和平仓。还使用主模块(作为容器,由所有添加的模块组成)的投票,但其 LongCondition() 和 ShortCondition() 方法始终返回 0。
主模块的投票结果也用于“投票”平均。在我们的例子中,我们有:主模块 + 1 个交易信号模块,因此我们在设置阈值时需要考虑这一事实。因此,ThresholdOpen 和 ThresholdClose 必须设置为 40=(0+80)/2 和 20=(0+40)/2。
Signal_StopLevel 和 Signal_TakeLevel 输入参数的值设置为 0,这意味着仅当平仓条件成立时才会平仓。
2.4.历史回测结果
让我们考虑一下 Expert Advisor 对历史数据的回测(EURUSD H1,测试期:2010.01.01-2011.02.23,PeriodRSI=20,MA_period=14)。
在创建 EA 交易时,我们使用了固定交易量 (交易固定手数, 0.1), 未使用追踪止损算法 (未使用尾随)。

图 11. EA 交易的测试结果,基于乌云盖顶/刺穿线 + RSI
可以使用以下命令找到最佳的输入参数集策略测试仪MetaTrader 5 客户端。
由 MQL5 向导创建的 EA 交易代码附在 Expert_ad_pl_rsi.mq5 中。
附件下载
📎 acandlepatterns.mqh (20.34 KB)
📎 acdc_pl_rsi.mqh (7.97 KB)
📎 expert_adc_pl_rsi.mq5 (6.63 KB)
Source: MQL5 #300
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
