系统交易

利用MQL5 Wizard 创建基于锤形线和吊人线的交易信号 + RSI 指标的专家顾问
MetaTrader5
利用MQL5 Wizard 创建基于锤形线和吊人线的交易信号 + RSI 指标的专家顾问

使用MQL5 Wizard 创建专家顾问 大家好,今天我们来聊聊如何利用 MQL5 Wizard 来创建基于锤形线和吊人线的交易信号专家顾问,这个方法非常适合想快速验证交易策略的朋友。 锤形线与吊人线的基本概念 锤形线(Hammer)是指在价格下跌后形成的一种蜡烛图形,其特征是小的实体和较长的下影线,这通常表示熊市的结束。而吊人线(Hanging Man)则是在价格上涨后形成,显示出牛市可能结束的信号。了解这两种形态,对于捕捉市场反转机会非常重要。 1. 锤形线 锤形线的实体较小,下影线较长,表明价格在下跌后有反转的可能。锤形线的颜色不重要,但如果是阳线,则更能增强看涨信号。锤形线通常出现在前一根蜡烛的最低点附近,较长的下影线和较短的上影线预示着反转潜力更大。 锤形线图形 1.1. 吊人线 吊人线的特征与锤形线相似,但它出现在价格上涨后,通常暗示着牛市的结束。和锤形线一样,吊人线的颜色也不是关键因素,但如果是阴线,则可能预示着更强的看空信号。 吊人线图形 基于RSI的交易信号 在根据锤形线和吊人线生成的交易信号中,我们需要使用相对强弱指标(RSI)来进行确认。具体来说,RSI值需要低于40(看涨信号)或高于60(看跌信号)。 开多单时,RSI需要低于40; 平空单时,RSI需要高于70; 平多单时,RSI需要低于30。 RSI确认图表 创建专家顾问的步骤 首先,我们需要下载 ach_hm_rsi.mqh 文件并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 文件夹中。接着,启动 MQL5 Wizard,按照步骤设置好专家顾问的名称和信号模块。 创建专家顾问 最后,我们可以通过回测来检验专家顾问的表现,确保它在历史数据中能稳定获利。回测结果将提供给我们进一步优化的依据。 回测结果 希望这些信息对你们有所帮助,赶快动手实践吧!如果有任何问题,欢迎留言交流。

2011.03.21
使用 MQL5 Wizard 创建基于锤形线与吊人线的交易信号
MetaTrader5
使用 MQL5 Wizard 创建基于锤形线与吊人线的交易信号

大家好!今天我们来聊聊如何使用 MQL5 Wizard 创建交易信号,具体是基于锤形线(Hammer)和吊人线(Hanging Man)的反转形态,结合 MFI 指标来确认交易信号。 MQL5 Wizard 允许我们快速生成专家顾问(EA),通过标准库类来实现交易信号的创建。您只需构建自己的交易信号类,就可以方便地验证您的交易想法,具体的结构和示例可以参考 MQL5 Wizard: 如何创建交易信号模块。 这里有一个基本思路:交易信号类需要继承自 CExpertSignal,接着我们需要重写 LongCondition() 和 ShortCondition() 方法,来实现自己的逻辑。 有一本书 《最佳交易者策略》(俄文),书中提到了许多交易策略,我们将重点关注由 随机指标(Stochastic)、CCI、MFI 和 RSI 等指标确认的反转蜡烛形态。 最佳实践是创建一个单独的类,继承自 CExpertSignal,用于检查蜡烛形态的形成。为了确认由蜡烛形态生成的交易信号,我们只需编写一个继承自 CCandlePattern 的类,并添加必要的功能(例如,使用指标来确认信号)。 接下来,我们将关注基于锤形线和吊人线反转形态的信号,并用 MFI 指标进行确认。交易信号模块基于 CCandlePattern 类,下面是其使用的简单示例。 1. 锤形线与吊人线反转蜡烛形态 1.1 锤形线 锤形线是一根小实体、长下影线的蜡烛,通常在下跌趋势后形成。锤形线表明看跌趋势的结束。 蜡烛的颜色并不重要,但如果是看涨锤形线则表明更高的看涨潜力。锤形线的实体通常形成在前一根蜡烛的最低点附近。长下影线和短上影线的组合使反转形态的潜力更高。 图 1. 锤形线蜡烛图 锤形线的识别通过 CCandlePattern 类中的 CheckPatternHammer() 方法实现: //+------------------------------------------------------------------+ //| 检查锤形线蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- 锤形线 if((MidPoint(1)<CloseAvg(2)) && // 下跌趋势 (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // 实体在上1/3 (Close(1)

2011.03.21
基于锤形线与吊人线的CCI交易信号生成- MQL5专家顾问
MetaTrader5
基于锤形线与吊人线的CCI交易信号生成- MQL5专家顾问

大家好!今天我们来聊聊如何使用 MQL5 Wizard 来生成基于锤形线(Hammer)和吊人线(Hanging Man)的交易信号。这个工具让我们能够快速创建适合自己交易策略的专家顾问(EA)。 在开始之前,首先我们需要了解什么是锤形线和吊人线。这两种形态都是反转信号图形,分别出现在市场下跌和上涨趋势的末尾,能够帮助我们判断潜在的市场反转。 1. 锤形线和吊人线 1.1 锤形线 锤形线是一根具有小实体和长下影线的K线,通常是在下跌趋势后形成,预示着市场可能反转向上。锤形线的颜色并不是关键,但若是阳线,则反转的潜力更大。 图1. 锤形线 K线模式 锤形线的识别可以通过 CheckPatternHammer() 方法来实现。 //+------------------------------------------------------------------+ //| 检查锤形线的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- 锤形线 if((MidPoint(1) < CloseAvg(2)) && // 下跌趋势 (MathMin(Open(1), Close(1) > (High(1) - (High(1) - Low(1)) / 3.0)) && // 实体位于上1/3 (Close(1) < Close(2)) && (Open(1) < Open(2))) return(true); //--- return(false); } 通过 CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 方法可以检查锤形线的形成。 1.2 吊人线 吊人线同样是一根小实体和长下影线的K线,但它是在上涨趋势后形成,表明可能会反转向下。吊人线的颜色也不重要,但若是阴线,会增强其反转的可能性。 图2. 吊人线 K线模式 吊人线的识别可以通过 CheckPatternHangingMan() 方法来实现。 //+------------------------------------------------------------------+ //| 检查吊人线的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- 吊人线 if((MidPoint(1) > CloseAvg(2)) && // 上涨趋势 (MathMin(Open(1), Close(1) > (High(1) - (High(1) - Low(1)) / 3.0)) && // 实体位于上1/3 (Close(1) > Close(2)) && (Open(1) > Open(2))) return(true); //--- return(false); } 通过 CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 方法可以检查吊人线的形成。 2. CCI指标确认的交易信号 在开仓或平仓之前,必须确认CCI指标的信号。CCI的值需高于50(开空)或低于-50(开多)。 平仓条件有两种: 当CCI线达到相反的临界水平(多单为80,空单为-80); 当相反信号未得到确认时(例如CCI达到-80时平多,达到80时平空)。 图3. 锤形线模式与CCI指标确认 2.1 开多单/平空单 锤形线的形成需得到CCI指标的确认:CCI(1) < -50(最后一根K线的CCI值必须小于-50)。 若CCI指标上穿-80或下穿80,则平空单。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多单,返回80) | //| 2) 市场出场(平空单,返回40) | //+------------------------------------------------------------------+ int CH_HM_CCI::LongCondition() { int result = 0; //--- 检查开多单条件 //--- 锤形线与CCI < -50 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1) < -50)) result = 80; //--- 检查平空单条件 if(((CCI(1) > -80) && (CCI(2) < -80)) || ((CCI(1) < -80) && (CCI(2) > -80))) result = 40; //--- 返回结果 return(result); } 2.2 开空单/平多单 吊人线的形成需得到CCI指标的确认:CCI(1) > 50(最后一根K线的CCI值必须大于50)。 若CCI指标下穿-80或上穿80,则平多单。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空单,返回80) | //| 2) 市场出场(平多单,返回40) | //+------------------------------------------------------------------+ int CH_HM_CCI::ShortCondition() { int result = 0; //--- 检查开空单条件 //--- 吊人线与CCI > 50 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1) > 50)) result = 80; //--- 检查平多单条件 if(((CCI(1) < 80) && (CCI(2) > 80)) || ((CCI(1) < -80) && (CCI(2) > -80))) result = 40; //--- 返回结果 return(result); } 2.3 使用MQL5 Wizard创建专家顾问 CH_HM_CCI类不包含在标准库中,使用前需下载ach_hm_cci.mqh文件并保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals目录下。相同操作对candlepatterns.mqh文件也要进行。重启MetaEditor后,便可以在MQL5 Wizard中使用这些文件。 创建专家顾问的步骤如下: 图4. MQL5 Wizard创建专家顾问 输入专家顾问的名称: 图5. 专家顾问基本属性 接下来选择所使用的交易信号模块。 图6. 专家顾问信号属性 在我们的案例中,只使用一个信号模块。添加“基于锤形线/吊人线的CCI信号”交易信号模块: 图7. 专家顾问信号模块 信号模块已添加: 图8. 专家顾问信号模块 接下来,可以选择任何跟踪属性,但我们将选择“不使用跟踪止损”: 图9. 专家顾问跟踪属性 关于资金管理的属性,我们将使用“固定交易量交易”: 图10. 专家顾问资金管理属性 点击“完成”按钮后,我们将获得生成的专家顾问代码,位于Expert_AH_HM_CCI.mq5文件中,保存于terminal_data_folder\MQL5\Experts\。 生成的专家顾问的默认输入参数: //--- 主要信号的输入 input int Signal_ThresholdOpen = 10; // 开仓信号阈值 [0...100] input int Signal_ThresholdClose = 10; // 平仓信号阈值 [0...100] input double Signal_PriceLevel = 0.0; // 执行交易的价格水平 input double Signal_StopLevel = 50.0; // 止损水平(点数) input double Signal_TakeLevel = 50.0; // 止盈水平(点数) 需要改成: //--- 主要信号的输入 input int Signal_ThresholdOpen = 40; // 开仓信号阈值 [0...100] input int Signal_ThresholdClose = 20; // 平仓信号阈值 [0...100] input double Signal_PriceLevel = 0.0; // 执行交易的价格水平 input double Signal_StopLevel = 0.0; // 止损水平(点数) input double Signal_TakeLevel = 0.0; // 止盈水平(点数) Signal_ThresholdOpen和Signal_ThresholdClose输入参数允许指定开仓和平仓的阈值水平。 在交易信号类的LongCondition()和ShortCondition()方法的代码中,我们已指定固定的阈值: 开仓:80; 平仓:40; 通过MQL5 Wizard生成的专家顾问会根据交易信号模块的“投票”来开平仓。主模块的投票(作为容器,包含所有添加的模块)也会被使用,但其LongCondition()和ShortCondition()方法总是返回0。 主模块的投票结果也会在“投票”平均中使用。在我们的案例中,主模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose应设为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设为0,意味着平仓将仅在平仓条件满足时进行。 2.4 历史回测结果 我们来看一下在历史数据(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodCCI=25,MA_period=5)上的回测结果。 在创建专家顾问时,我们使用了固定交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。 图11. 基于锤形线/吊人线 + CCI的专家顾问测试结果 最佳的输入参数组合可以通过 MetaTrader 5的策略测试器 找到。 由MQL5 Wizard生成的专家顾问代码已附在expert_ah_hm_cci.mq5中。

2011.03.21
使用MQL5向导创建基于锤子/悬挂人形态与随机指标的交易信号
MetaTrader5
使用MQL5向导创建基于锤子/悬挂人形态与随机指标的交易信号

MQL5向导允许我们创建基于 标准库 类的现成专家顾问(EA)。这一工具能快速验证我们的交易思路,只需要创建自己的交易信号类即可。关于这个类的结构和示例,可以参考 MQL5向导:如何创建交易信号模块。 基本思路是:交易信号类继承自 CExpertSignal,然后重写 LongCondition() 和 ShortCondition() 这两个虚方法,使用我们自己的方法。 有一本书 《最佳交易者策略》(俄文),书中讨论了很多交易策略,我们将重点关注由 随机指标 确认的反转蜡烛图形态,例如锤子和悬挂人形态,此外还有 CCI、MFI 和 RSI 等振荡器。 最佳方式是创建一个单独的类,继承自 CExpertSignal,用于检查蜡烛图形态的形成。为了确认由蜡烛图模式生成的交易信号,只需编写一个继承自 CCandlePattern 的类,并在其中添加必要的确认特性(例如通过振荡器的确认)。 接下来,我们将讨论基于“锤子/悬挂人”反转蜡烛图形态的信号,并通过 随机指标 进行确认。该交易信号模块基于 CCandlePattern 类,这是一个使用蜡烛图模式创建交易信号的简单示例。 1. “锤子”和“悬挂人”反转蜡烛图形态 1.1. 锤子 “锤子”是一个小身体和长下影线的蜡烛图形态,通常在价格下跌后形成。锤子形态通常表示空头趋势的结束。 蜡烛图身体的颜色并不重要,但看涨的锤子表明了更强的看涨潜力。锤子形态的身体通常在前一根蜡烛的最低点附近形成。较长的下影线和较短的上影线会提高反转形态的潜力。 图1. 锤子蜡烛图形态 “锤子”形态的识别通过 CheckPatternHammer() 方法在 CCandlePattern 类中实现: //+------------------------------------------------------------------+ //| 检查“锤子”蜡烛图形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- 锤子    if((MidPoint(1)<CloseAvg(2))                                && // 下跌趋势       (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // 身体在上1/3       (Close(1)

2011.03.21
利用MQL5 Wizard创建基于牛市与熊市哈拉米形态的交易信号与RSI策略
MetaTrader5
利用MQL5 Wizard创建基于牛市与熊市哈拉米形态的交易信号与RSI策略

今天,我们来聊聊如何利用MQL5 Wizard创建基于牛市与熊市哈拉米形态的交易信号,同时结合RSI指标进行确认。这种方法可以帮助我们快速验证交易理念,构建属于自己的交易信号类。 要实现这一点,我们的交易信号类需要继承自CExpertSignal。接下来,我们需要重写LongCondition()和ShortCondition()这两个虚拟方法,以便实现自己的交易逻辑。 参考一本关于交易策略的书籍《最佳交易者的策略》,其中讨论了许多交易策略。我们将重点关注反转蜡烛形态,并通过RSI等指标进行确认。 1. 牛市与熊市哈拉米反转蜡烛形态 1.1 牛市哈拉米 牛市哈拉米反转形态通常出现在下跌趋势中,由一根大蜡烛后跟随一根小蜡烛,且小蜡烛的实体位于大蜡烛的实体范围内。这种形态提示我们下跌趋势可能会反转,是进入多头仓位的好时机。第二根蜡烛通常是向上跳空开盘的。 第二根(白色)蜡烛越小,反转的可能性越大。 图1. 牛市哈拉米蜡烛形态 “牛市哈拉米”形态的识别方法实现于CCandlePattern类中的CheckPatternBullishHarami()方法。 //+------------------------------------------------------------------+ //| 检查"牛市哈拉米"蜡烛形态的形成         | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- 牛市哈拉米    if((Close(1)>Open(1))              && // 最后一根蜡烛是上涨的(白天)      ((Open(2)-Close(2)>AvgBody(1))  && // 前一根蜡烛是下跌的,且其实体大于平均值(长黑)      ((Close(1)<Open(2))              && // 牛市蜡烛的收盘价低于熊市蜡烛的开盘价       (Open(1)>Close(2)))              && // 牛市蜡烛的开盘价高于熊市蜡烛的收盘价       (MidPoint(2)<CloseAvg(2)))         // 下跌趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)方法用于检查“牛市哈拉米”蜡烛形态的形成。 1.2 熊市哈拉米 熊市哈拉米反转形态出现在上涨趋势中,由一根大蜡烛后跟随一根小蜡烛,且小蜡烛的实体位于大蜡烛的实体范围内。该形态提示我们上涨趋势可能会反转,是进入空头仓位的好时机。第二根蜡烛通常是向下跳空开盘的。 第二根(黑色)蜡烛越小,反转的可能性越大。 图2. 熊市哈拉米蜡烛形态 “熊市哈拉米”形态的识别方法实现于CCandlePattern类中的CheckPatternBearishHarami()方法。 //+------------------------------------------------------------------+ //| 检查"熊市哈拉米"蜡烛形态的形成         | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- 熊市哈拉米    if((Close(1)<Open(1))              && // 最后一根蜡烛是下跌的(黑天)      ((Close(2)-Open(2)>AvgBody(1))  && // 前一根蜡烛是上涨的,且其实体大于平均值(长白)      ((Close(1)>Open(2))              && // 熊市蜡烛的收盘价高于牛市蜡烛的开盘价       (Open(1)<Close(2)))              && // 熊市蜡烛的开盘价低于牛市蜡烛的收盘价       (MidPoint(2)>CloseAvg(2)))         // 上涨趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)方法用于检查“熊市哈拉米”蜡烛形态的形成。 2. 通过RSI指标确认的交易信号 打开多头或空头仓位的交易信号必须得到RSI指标的确认。RSI值需低于40(开多头)或高于60(开空头)。 平仓时机取决于RSI的值,主要有以下两种情况: 当RSI到达相反的临界水平(多头仓位70,空头仓位30) 当反转信号未能确认(RSI达到30(多头)或70(空头)) 图3. 通过RSI确认的“牛市哈拉米”形态 int CBH_BH_RSI::LongCondition() - 检查打开多头仓位的条件(返回80)和平空头仓位的条件(返回40); int CBH_BH_RSI::ShortCondition() - 检查打开空头仓位的条件(返回80)和平多头仓位的条件(返回40)。 2.1. 打开多头仓位/平空头仓位 “牛市哈拉米”形态必须得到RSI指标的确认:RSI(1)<40(最后一根蜡烛的RSI值必须低于40)。 如果RSI指标向上穿越临界水平70或30,则必需平空头仓位。 //+------------------------------------------------------------------+ //| 检查市场的入场与出场条件                 | //| 1) 市场入场(打开多头仓位,结果=80)                  | //| 2) 市场出场(平空头仓位,结果=40)                 | //+------------------------------------------------------------------+ int CBH_BH_RSI::LongCondition()   {    int result=0; //--- idx可以用于确定EA的工作模式 //--- idx=0 - EA在每个tick上检查交易条件 //--- idx=1 - EA仅在新闻蜡烛上检查交易条件    int idx   =StartIndex(); //--- 检查打开多头仓位的条件 //--- 牛市哈拉米形态和RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))      result=80; //--- 检查平空头仓位的条件 //--- 信号线穿越超买/超卖水平(上穿30,上穿70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40; //--- 返回结果    return(result);   } 2.2. 打开空头仓位/平多头仓位 “熊市哈拉米”形态必须得到RSI指标的确认:RSI(1)>60(最后一根蜡烛的RSI值必须大于60)。 如果RSI指标向下穿越临界水平70或30,则必需平多头仓位。 //+------------------------------------------------------------------+ //| 检查市场的入场与出场条件                 | //| 1) 市场入场(打开空头仓位,结果=80)                 | //| 2) 市场出场(平多头仓位,结果=40)                  | //+------------------------------------------------------------------+ int CBH_BH_RSI::ShortCondition()   {    int result=0; //--- idx可以用于确定EA的工作模式 //--- idx=0 - EA在每个tick上检查交易条件 //--- idx=1 - EA仅在新闻蜡烛上检查交易条件    int idx   =StartIndex(); //--- 检查打开空头仓位的条件 //--- 熊市哈拉米形态和RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))      result=80; //--- 检查平多头仓位的条件 //--- 信号线穿越超买/超卖水平(下穿70,下穿30)    if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40; //--- 返回结果    return(result);   } 2.3. 使用MQL5 Wizard创建专家顾问 CBH_BH_RSI类不包含在标准库中,要使用它,需要下载acml_rsi.mqh文件(见附件),并将其保存在client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals文件夹中。acandlepatterns.mqh文件也应如此处理。在重启MetaEditor后,可以在MQL5 Wizard中使用。 要创建一个专家顾问,启动MQL5 Wizard: 图4. 创建专家顾问 接下来,指定专家顾问的名称: 图5. 专家顾问的一般属性 然后选择要使用的交易信号模块。 图6. 专家顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。添加“基于牛市与熊市哈拉米形态确认的信号”交易信号模块: 图7. 专家顾问的信号属性 交易信号模块已添加: 图8. 专家顾问的信号属性 您可以选择任何移动属性,但我们将使用“未使用移动止损”: 图9. 专家顾问的止损属性 关于资金管理属性,我们将使用“固定交易量交易”: 图10. 专家顾问的资金管理属性 按下“完成”按钮后,我们将获取生成的专家顾问代码,该代码位于Expert_ABH_BH_RSI.mq5文件中,保存于terminal_data_folder\MQL5\Experts\目录下。 生成的专家顾问的默认输入参数: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值[0...100] input int            Signal_ThresholdClose  =10;     // 平仓信号阈值[0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0;   // 止损水平(点数) input double         Signal_TakeLevel       =50.0;  // 盈利水平(点数) 需要替换为: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值[0...100] input int            Signal_ThresholdClose  =20;     // 平仓信号阈值[0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0;    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 盈利水平(点数) Signal_ThresholdOpen和Signal_ThresholdClose输入参数允许指定开仓与平仓的阈值。 在交易信号类的LongCondition()和ShortCondition()方法中,我们指定了阈值的固定值: 开仓条件:80; 平仓条件:40。 MQL5 Wizard生成的专家顾问利用交易信号模块的“投票”来开平仓位。主要模块的投票(作为容器,包含所有添加的模块)也会被使用,但其LongCondition()和ShortCondition()方法始终返回0。 主要模块的投票结果也会在“投票”平均中被使用。在我们的案例中,主要模块加上1个交易信号模块,所以在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设为0,这意味着只有在平仓条件为真时才会平仓。 2.4. 历史回测结果 让我们来分析在历史数据(EURUSD H1,测试周期:2010.01.01-2011.03.11,PeriodRSI=37,MA_period=7)上的专家顾问回测。 在创建专家顾问时,我们使用了固定交易量(固定手数交易,0.1),未使用移动止损算法(未使用移动止损)。 图11. 基于牛市与熊市哈拉米形态的专家顾问测试结果 最佳输入参数集可以通过MetaTrader 5客户端的策略测试器找到。 使用MQL5 Wizard创建的专家顾问代码已附在expert_aml_rsi.mq5中。

2011.03.17
使用MQL5 Wizard创建基于牛市/熊市吞没形态与MFI的交易信号
MetaTrader5
使用MQL5 Wizard创建基于牛市/熊市吞没形态与MFI的交易信号

大家好!今天我们来聊聊如何借助MQL5 Wizard创建基于牛市和熊市吞没形态的交易信号。这是一个很方便的工具,可以让我们快速生成交易系统,适合那些希望快速实现交易策略的朋友们。 首先,MQL5 Wizard允许我们基于标准库的类来创建现成的专家顾问(EA)。我们只需要创建一个自己的交易信号类,具体的结构和示例可以参考这篇文章:MQL5 Wizard:如何创建交易信号模块。 1. 牛市吞没与熊市吞没形态 1.1. 牛市吞没 牛市吞没形态通常在下跌趋势中出现,即一个大阳烛后面跟着一个小阳烛,且小阳烛的实体完全在大阳烛的范围内。这一形态表明下跌趋势可能会反转,适合我们考虑开多单。第二根蜡烛是以跳空高开的。 第二根(白色)蜡烛越小,反转的可能性就越大。 图 1. 牛市吞没蜡烛形态 牛市吞没形态的识别是在CCandlePattern类中的CheckPatternBullishHarami()方法中实现的。 //+------------------------------------------------------------------+ //| 检查牛市吞没蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- 牛市吞没    if((Close(1)>Open(1))&& // 最近的蜡烛是阳线      ((Open(2)-Close(2)>AvgBody(1))&& // 前一根蜡烛是阴线,且实体大于平均值      ((Close(1)<Open(2))&& // 阳线收盘价低于阴线开盘价       (Open(1)>Close(2)))&& // 阳线开盘价高于阴线收盘价       (MidPoint(2)<CloseAvg(2))) // 下跌趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)方法用于检查牛市吞没蜡烛形态的形成。 1.2. 熊市吞没 熊市吞没形态通常在上涨趋势中出现,即一个大阴烛后面跟着一个小阴烛,且小阴烛的实体完全在大阴烛的范围内。这一形态表明上涨趋势可能会反转,适合我们考虑开空单。第二根蜡烛是以跳空低开的。 第二根(黑色)蜡烛越小,反转的可能性就越大。 图 2. 熊市吞没蜡烛形态 熊市吞没形态的识别是在CCandlePattern类中的CheckPatternBearishHarami()方法中实现的。 //+------------------------------------------------------------------+ //| 检查熊市吞没蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- 熊市吞没    if((Close(1)<Open(1))&& // 最近的蜡烛是阴线      ((Close(2)-Open(2)>AvgBody(1))&& // 前一根蜡烛是阳线,且实体大于平均值      ((Close(1)>Open(2))&& // 阴线收盘价高于阳线开盘价       (Open(1)<Close(2)))&& // 阴线开盘价低于阳线收盘价       (MidPoint(2)>CloseAvg(2))) // 上涨趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)方法用于检查熊市吞没蜡烛形态的形成。 2. 通过MFI指标确认交易信号 在打开多单或空单之前,我们必须通过市场便利指数(MFI)指标进行确认。MFI指标的值必须低于40(开多单)或高于60(开空单)。 关闭已开仓位则取决于MFI指标的值,主要有以下两种情况: 当MFI达到相反的临界水平(多单70,空单30)时。 当反转信号未确认时(当MFI指标到达以下水平:多单30,空单70)。 图 3. 牛市吞没形态,确认通过MFI指标 int CBH_BH_MFI::LongCondition() - 检查开多单的条件(返回80)和关闭空单的条件(返回40); int CBH_BH_MFI::ShortCondition() - 检查开空单的条件(返回80)和关闭多单的条件(返回40)。 2.1. 开多单/关闭空单 “牛市吞没”形态的形成必须通过MFI指标确认:MFI(1)<40(最近完成的蜡烛的MFI值必须小于40)。 当MFI指标突破临界水平(70或30)时,必须关闭空单。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进入(开多单,结果=80) | //| 2) 市场退出(关闭空单,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::LongCondition()   {    int result=0; //--- idx可以用来确定专家顾问的工作模式 //--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻柱上检查交易条件    int idx   =StartIndex(); //--- 检查开多单的条件 //--- 牛市吞没形态和MFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))      result=80; //--- 检查关闭空单的条件 //--- 信号线穿越超买/超卖水平(上升30,上升70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- 返回结果    return(result);   } 2.2. 开空单/关闭多单 “熊市吞没”形态的形成必须通过MFI指标确认:MFI(1)>60(最近完成的蜡烛的MFI值必须大于60)。 当MFI指标突破临界水平(70或30)时,必须关闭多单。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进入(开空单,结果=80) | //| 2) 市场退出(关闭多单,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::ShortCondition()   {    int result=0; //--- idx可以用来确定专家顾问的工作模式 //--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻柱上检查交易条件    int idx   =StartIndex(); //--- 检查开空单的条件 //--- 熊市吞没形态和MFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))      result=80; //--- 检查关闭多单的条件 //--- 信号线穿越超买/超卖水平(上升70,下降30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- 返回结果    return(result);   } 2.3. 使用MQL5 Wizard创建专家顾问 CBH_BH_MFI类不包含在标准库中,要使用它,必须下载abh_bh_mfi.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对acandlepatterns.mqh文件也进行同样的操作。完成后重新启动MetaEditor,便可在MQL5 Wizard中使用它。 要创建一个专家顾问,启动MQL5 Wizard: 图 4. 使用MQL5 Wizard创建专家顾问 接下来,输入专家顾问的名称: 图 5. 专家顾问的一般属性 然后选择要使用的交易信号模块。 图 6. 专家顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。 添加“基于牛市吞没/熊市吞没的信号,确认通过MFI”交易信号模块: 图 7. 专家顾问的信号属性 交易信号模块添加完成: 图 8. 专家顾问的信号属性 可以选择任何跟踪属性,不过我们将选择“不使用跟踪止损”: 图 9. 专家顾问的跟踪属性 关于资金管理属性,我们将使用“以固定交易量交易”: 图 10. 专家顾问的资金管理属性 点击“完成”按钮后,我们将得到生成的专家顾问代码,存储在terminal_data_folder\MQL5\Experts\下的Expert_ABH_BH_MFI.mq5文件中。 生成的专家顾问的默认输入参数: //--- 主要信号的输入 input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值[0...100] input int            Signal_ThresholdClose  =10     // 平仓信号阈值[0...100] input double         Signal_PriceLevel      =0.0    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0   // 止损水平(点数) input double         Signal_TakeLevel       =50.0  // 止盈水平(点数) 应替换为: //--- 主要信号的输入 input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值[0...100] input int            Signal_ThresholdClose  =20     // 平仓信号阈值[0...100] input double         Signal_PriceLevel      =0.0    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 止盈水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许我们指定开仓和关仓的阈值。 在交易信号类的LongCondition()和ShortCondition()方法的代码中,我们指定了固定的阈值: 开仓信号:80; 平仓信号:40。 通过MQL5 Wizard生成的专家顾问使用“模块投票”来开仓和平仓。主模块(作为容器,包含所有添加的模块)的投票结果也会被使用,但其LongCondition()和ShortCondition()方法始终返回0。 主模块的投票结果也会在“投票”平均中被使用。在我们的案例中,主模块 + 1个交易信号模块,因此在设定阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose应设定为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设为0,意味着只有在关闭条件为真时才会平仓。 2.4. 历史回测结果 让我们看看在历史数据上(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodMFI=37,MA_period=11)对专家顾问的回测结果。 在创建专家顾问时,我们使用了固定的交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪止损)。 图 11. 基于牛市吞没/熊市吞没与MFI的专家顾问测试结果 最佳输入参数集可以通过MetaTrader 5客户端终端的策略测试器找到。 生成的专家顾问代码附在expert_abh_bh_mfi.mq5中。

2011.03.17
使用 MQL5 Wizard 创建基于 Bullish Harami/Bearish Harami 和 CCI 的交易信号
MetaTrader5
使用 MQL5 Wizard 创建基于 Bullish Harami/Bearish Harami 和 CCI 的交易信号

大家好!今天我们要聊聊如何使用 MQL5 Wizard 创建交易信号,尤其是基于 Bullish Harami 和 Bearish Harami 的反转蜡烛图模式,并结合 CCI 指标 的信号确认。 MQL5 Wizard 允许我们快速创建基于标准库类的现成交易顾问(Expert Advisors)。你只需要创建自己的交易信号类,就能迅速验证你的交易想法。详细的结构和示例可以参考文章 MQL5 Wizard: 如何创建交易信号模块。 我们首先需要了解 Bullish Harami 和 Bearish Harami 这两个反转蜡烛图模式。 1. Bullish Harami 和 Bearish Harami 反转蜡烛图模式 1.1. Bullish Harami Bullish Harami 反转模式出现在下跌趋势中,通常是一个大蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明下跌趋势可能会反转,是时候考虑入场做多了。第二根蜡烛在开盘时会出现向上跳空。第二根蜡烛越小,反转的可能性越大。 图 1. Bullish Harami 蜡烛图模式 “Bullish Harami”模式的识别在 CheckPatternBullishHarami() 方法中实现,具体代码如下: //+------------------------------------------------------------------+ //| 检查 Bullish Harami 蜡烛图模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- Bullish Harami    if((Close(1)>Open(1))              && // 最近的蜡烛是看涨的      ((Open(2)-Close(2))>AvgBody(1))  && // 前一根蜡烛是看跌的,实体大于平均值      ((Close(1)<Open(2))              && // 看涨蜡烛的收盘价低于看跌蜡烛的开盘价       (Open(1)>Close(2)))             && // 看涨蜡烛的开盘价高于看跌蜡烛的收盘价       (MidPoint(2)<CloseAvg(2)))         // 处于下跌趋势       return(true); //---    return(false);   } 在 CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) 方法中检查 Bullish Harami 蜡烛图模式的形成。 1.2. Bearish Harami Bearish Harami 反转模式出现在上涨趋势中,表现为一个大的蜡烛后面跟随一个小蜡烛,且其实体位于大蜡烛的垂直范围内。这表明上涨趋势可能会反转,是时候考虑入场做空了。第二根蜡烛在开盘时会出现向下跳空。 第二根(黑色)蜡烛越小,反转的可能性越大。 图 2. Bearish Harami 蜡烛图模式 “Bearish Harami”模式的识别在 CheckPatternBearishHarami() 方法中实现,具体代码如下: //+------------------------------------------------------------------+ //| 检查 Bearish Harami 蜡烛图模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- Bearish Harami    if((Close(1)<Open(1))              && // 最近的蜡烛是看跌的      ((Close(2)-Open(2))>AvgBody(1))  && // 前一根蜡烛是看涨的,实体大于平均值      ((Close(1)>Open(2))              && // 看跌蜡烛的收盘价高于看涨蜡烛的开盘价       (Open(1)<Close(2)))             && // 看跌蜡烛的开盘价低于看涨蜡烛的收盘价       (MidPoint(2)>CloseAvg(2)))         // 处于上涨趋势       return(true); //---    return(false);   } 在 CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) 方法中检查 Bearish Harami 蜡烛图模式的形成。 2. CCI 指标确认的交易信号 为了开多仓或空仓,交易信号必须由 CCI 指标确认。CCI 值必须高于/低于关键水平(长仓的 -50 和短仓的 50)。 关闭开仓的条件取决于 CCI 的值,可以在以下两种情况下进行: 如果 CCI 线达到了相反的关键水平(长仓 80,短仓 -80) 如果反转信号未得到确认(当 CCI 达到以下水平时:长仓 -80,短仓 80) 图 3. Bullish Harami 模式,CCI 指标确认 int CBH_BH_CCI::LongCondition() - 检查开多仓的条件(返回 80)和关闭短仓的条件(返回 40); int CBH_BH_CCI::ShortCondition() - 检查开短仓的条件(返回 80)和关闭多仓的条件(返回 40)。 2.1. 开多仓/关闭短仓 Bullish Harami 模式的形成必须由 CCI 指标确认:CCI(1)<-50(最近完成的蜡烛的 CCI 值必须小于 -50)。 当 CCI 指标向上穿越关键水平 -80 或向下穿越关键水平 80 时,必须关闭短仓。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进场(开多仓,结果=80) | //| 2) 市场出场(关闭短仓,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition()   {    int result=0;    //--- idx 用于确定 EA 的工作模式    //--- idx=0 - 在这种情况下 EA 每次更新时检查交易条件    //--- idx=1 - 在这种情况下 EA 只在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开多仓的条件    //--- Bullish Harami 模式和 CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50))      result=80;    //--- 检查关闭短仓的条件    //--- 超买/超卖水平的信号线交叉(向下 -80,向下 -80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40;    //--- 返回结果    return(result);   } 2.2. 开短仓/关闭多仓 Bearish Harami 模式的形成必须由 CCI 指标确认:CCI(1)>50(最近完成的蜡烛的 CCI 值必须大于 50)。 当 CCI 指标向下穿越 -80 或 80 水平时,必须关闭多仓。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进场(开短仓,结果=80) | //| 2) 市场出场(关闭多仓,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::ShortCondition()   {    int result=0;    //--- idx 用于确定 EA 的工作模式    //--- idx=0 - 在这种情况下 EA 每次更新时检查交易条件    //--- idx=1 - 在这种情况下 EA 只在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开短仓的条件    //--- Bearish Harami 模式和 CCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50))      result=80;    //--- 检查关闭多仓的条件    //--- 超买/超卖水平的信号线交叉(向下 -80,向下 80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40;    //--- 返回结果    return(result);   } 2.3. 使用 MQL5 Wizard 创建 Expert Advisor 需要注意的是,CBH_BH_CCI 类不包含在标准库类中,因此我们需要下载 acbh_bh_cci.mqh 文件(见附件)并将其保存到 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 目录下。对于 candlepatterns.mqh 文件也要进行同样的操作。重启 MetaEditor 后,可以在 MQL5 Wizard 中使用它。 要创建 Expert Advisor,请启动 MQL5 Wizard: 图 4. 使用 MQL5 Wizard 创建 Expert Advisor 接下来,请指定 Expert Advisor 的名称: 图 5. Expert Advisor 的一般属性 然后,我们需要选择所使用的交易信号模块。 图 6. Expert Advisor 的信号属性 在我们的案例中,我们只使用一个交易信号模块。添加“基于 Bullish Harami/Bearish Harami 并由 CCI 确认的信号”交易信号模块: 图 7. Expert Advisor 的信号属性 信号模块已添加: 图 8. Expert Advisor 的信号属性 您可以选择任何跟随特性,但我们将使用“未使用跟随止损”: 图 9. Expert Advisor 的跟随属性 关于资金管理属性,我们将使用“固定交易量交易”: 图 10. Expert Advisor 的资金管理属性 点击“完成”按钮后,我们将获得生成的 Expert Advisor 的代码,位于 Expert_ABH_BH_CCI.mq5 中,将保存在 terminal_data_folder\MQL5\Experts\ 中。 生成的 Expert Advisor 的默认输入参数: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开盘的信号阈值 [0...100] input int            Signal_ThresholdClose  =10;     // 关闭的信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0;   // 止损水平(点数) input double         Signal_TakeLevel       =50.0;  // 盈利水平(点数) 需替换为: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开盘的信号阈值 [0...100] input int            Signal_ThresholdClose  =20;     // 关闭的信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0;    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 盈利水平(点数) 这些 Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许指定开仓和闭仓的阈值水平。 在交易信号类的 LongCondition() 和 ShortCondition() 方法代码中,我们指定了阈值的固定值: 开仓:80; 闭仓:40。 由 MQL5 Wizard 生成的 Expert Advisor 使用交易信号模块的“投票”来开仓和闭仓。主模块的投票(作为容器,包含所有添加的模块)也被使用,但其 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.03.16,PeriodCCI=11,MA_period=5)。 在创建 Expert Advisor 时,我们使用了固定的交易量(固定手数交易,0.1),未使用跟随止损算法(未使用跟随)。 图 11. 基于 Bullish Harami/Bearish Harami + CCI 的 Expert Advisor 测试结果 最佳输入参数组合可以通过 MetaTrader 5 客户端终端的 策略测试器 找到。 通过 MQL5 Wizard 创建的 Expert Advisor 代码已附在 expert_abh_bh_cci.mq5 中。

2011.03.17
使用MQL5向导创建基于牛市和熊市哈拉米形态及随机指标的交易信号
MetaTrader5
使用MQL5向导创建基于牛市和熊市哈拉米形态及随机指标的交易信号

在交易中,识别有效的交易信号至关重要。今天,我们将探讨如何使用MQL5向导创建基于牛市和熊市哈拉米形态以及随机指标的交易策略。 MQL5向导为我们提供了一个简单的方法来创建现成的专家顾问(EA),我们可以利用内置的标准库类快速验证交易想法。你只需创建自己的交易信号类,具体结构和示例可以参考MQL5向导:如何创建交易信号模块。 在交易信号类的基础上,我们将使用CExpertSignal进行扩展。接下来,需要重写LongCondition()和ShortCondition()这两个虚拟方法,以实现自己的逻辑。 在此过程中,我们会关注一些反转蜡烛图形态,尤其是牛市和熊市哈拉米形态,并结合随机指标来确认这些信号。 1. 牛市和熊市哈拉米反转蜡烛图形态 1.1. 牛市哈拉米 牛市哈拉米反转形态出现在下跌趋势中,较大的蜡烛之后跟随一个较小的蜡烛,其实体位于较大蜡烛的范围内。这一形态表明下跌趋势可能反转,是进场做多的好时机。第二根蜡烛开盘时会有向上的缺口。 第二根(白色)蜡烛越小,反转的可能性越大。 图1. 牛市哈拉米蜡烛图形态 识别“牛市哈拉米”形态的逻辑实现于CCandlePattern类中的CheckPatternBullishHarami()方法。 //+------------------------------------------------------------------+ //| 检查“牛市哈拉米”蜡烛图形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami()   { //--- 牛市哈拉米    if((Close(1)>Open(1))              && // 最近的蜡烛是牛市(白天)      ((Open(2)-Close(2)>AvgBody(1))  && // 前一根蜡烛是熊市,其实体大于平均值(长黑蜡烛)      ((Close(1)<Open(2))              && // 牛市蜡烛的收盘价低于熊市蜡烛的开盘价       (Open(1)>Close(2)))              && // 牛市蜡烛的开盘价高于熊市蜡烛的收盘价       (MidPoint(2)<CloseAvg(2)))         // 下跌趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)方法用于检查“牛市哈拉米”蜡烛图形态的形成。 1.2. 熊市哈拉米 熊市哈拉米反转形态出现在上涨趋势中,较大的蜡烛之后跟随一个较小的蜡烛,其实体位于较大蜡烛的范围内。这一形态表明上涨趋势可能反转,是进场做空的好时机。第二根蜡烛开盘时会有向下的缺口。 第二根(黑色)蜡烛越小,反转的可能性越大。 图2. 熊市哈拉米蜡烛图形态 识别“熊市哈拉米”形态的逻辑实现于CCandlePattern类中的CheckPatternBearishHarami()方法。 //+------------------------------------------------------------------+ //| 检查“熊市哈拉米”蜡烛图形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami()   { //--- 熊市哈拉米    if((Close(1)<Open(1))              && // 最近的蜡烛是熊市(黑天)      ((Close(2)-Open(2)>AvgBody(1))  && // 前一根蜡烛是牛市,其实体大于平均值(长白蜡烛)      ((Close(1)>Open(2))              && // 熊市蜡烛的收盘价高于牛市蜡烛的开盘价      (Open(1)<Close(2)))              && // 熊市蜡烛的开盘价低于牛市蜡烛的收盘价       (MidPoint(2)>CloseAvg(2)))         // 上涨趋势       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)方法用于检查“熊市哈拉米”蜡烛图形态的形成。 2. 随机指标确认的交易信号 在决定开多或开空之前,交易信号必须得到随机指标的确认。%D线必须高于/低于相应的临界水平(30或70)。 平仓的条件取决于%D指标的值,可以在以下情况下完成: 如果%D线达到相反的临界水平(多头仓位为80,空头仓位为20) 如果反向信号未得到确认(当%D线达到以下水平:多头仓位为20,空头仓位为80) 图3. 熊市哈拉米蜡烛图形态,基于随机指标确认 交易条件的检查通过以下两个方法实现: int CBH_BH_Stoch::LongCondition() - 检查开多仓的条件(返回80)和关闭空仓的条件(返回40); int CBH_BH_Stoch::ShortCondition() - 检查开空仓的条件(返回80)和关闭多仓的条件(返回40)。 2.1. 开多仓/平空仓 “牛市哈拉米”形态的形成必须得到随机指标的确认:StochSignal(1)<30(最后一根蜡烛的随机指标信号线值必须小于30)。 如果随机指标的信号线向上穿越了20或80水平,则必须平空仓。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多仓,结果=80) | //| 2) 市场出场(平空仓,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::LongCondition()   {    int result=0; //--- idx可用于确定专家顾问的工作模式 //--- idx=0 - 在这种情况下,EA在每个报价上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件   int idx   =StartIndex(); //--- 检查开多仓的条件 //--- 牛市哈拉米形态与信号线<30   if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))      result=80; //--- 检查平空仓的条件 //--- 信号线穿越超买/超卖水平(向下20,向上80)    if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||        ((StochSignal(1)>80) && (StochSignal(2)<80))))      result=40; //--- 返回结果    return(result);   } 2.2. 开空仓/平多仓 “熊市哈拉米”形态的形成必须得到随机指标的确认:StochSignal(1)>70(最后一根蜡烛的随机指标信号线值必须大于70)。 如果随机指标的信号线向下穿越了80或20水平,则必须平多仓。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空仓,结果=80) | //| 2) 市场出场(平多仓,结果=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::ShortCondition()   {    int result=0; //--- idx可用于确定专家顾问的工作模式 //--- idx=0 - 在这种情况下,EA在每个报价上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件   int idx   =StartIndex(); //--- 检查开空仓的条件 //--- 熊市哈拉米形态与信号线>70   if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))      result=80; //--- 检查平多仓的条件 //--- 信号线穿越超买/超卖水平(向下80,向上20)    if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||        ((StochSignal(1)<20) && (StochSignal(2)>20))))      result=40; //--- 返回结果    return(result);   } 2.3. 使用MQL5向导创建专家顾问 CBH_BH_Stoch类并不包含在标准库类中,要使用它,需要下载acbh_bh_stoch.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也需如此。重启MetaEditor后,你可以在MQL5向导中使用它。 要创建专家顾问,启动MQL5向导: 图4. 使用MQL5向导创建专家顾问 接下来指定专家顾问的名称: 图5. 专家顾问的一般属性 接下来需要选择使用的交易信号模块。 图6. 专家顾问的信号属性 在我们的案例中,只使用一个交易信号模块。 添加“基于牛市和熊市哈拉米确认的随机信号”交易信号模块: 图7. 专家顾问的信号属性 交易信号模块已添加: 图8. 专家顾问的信号属性 可以选择任何跟随属性,但我们将使用“未使用跟随止损”: 图9. 专家顾问的跟随属性 关于资金管理属性,我们将使用“以固定交易量进行交易”: 图10. 专家顾问的资金管理属性 按下“完成”按钮后,我们将得到生成的专家顾问代码,位于Expert_ABH_BH_Stoch.mq5文件中,该文件将保存在terminal_data_folder\MQL5\Experts\中。 生成的专家顾问的默认输入参数: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开仓的信号阈值 [0...100] input int            Signal_ThresholdClose  =10     // 平仓的信号阈值 [0...100] input double         Signal_PriceLevel      =0.0    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0   // 止损水平(点数) input double         Signal_TakeLevel       =50.0   // 盈利水平(点数) 应更改为: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开仓的信号阈值 [0...100] input int            Signal_ThresholdClose  =20     // 平仓的信号阈值 [0...100] input double         Signal_PriceLevel      =0.0    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 盈利水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许我们为开仓和平仓指定阈值水平。 在交易信号类的LongCondition()和ShortCondition()方法中,我们指定了固定的阈值: 开仓:80; 平仓:40。 通过MQL5向导生成的专家顾问使用来自交易信号模块的“投票”来开仓和平仓。主模块的投票(作为容器,它包含所有添加的模块)也会被使用,但其LongCondition()和ShortCondition()方法总是返回0。 主模块的投票结果也用于“投票”平均。在我们的案例中,我们有:主模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。由于这个原因,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel的输入参数值设置为0,意味着平仓仅在平仓条件满足时进行。 2.4. 历史回测结果 让我们考虑专家顾问在历史数据上的回测(EURUSD H1,测试期间:2010.01.01-2011.03.04,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)。 在创建专家顾问时,我们使用了固定的交易量(以固定手数交易,0.1),未使用跟随止损算法(未使用跟随)。 图11. 基于牛市/熊市哈拉米和随机指标的专家顾问测试结果 最佳输入参数组合可以通过MetaTrader 5客户端的策略测试器找到。由MQL5向导创建的专家顾问代码附在expert_abh_bh_stoch.mq5中。

2011.03.16
使用MQL5 Wizard创建基于吞没形态和RSI的交易信号
MetaTrader5
使用MQL5 Wizard创建基于吞没形态和RSI的交易信号

大家好,今天我们来聊聊如何使用MQL5 Wizard来创建基于吞没形态和RSI指标的交易信号。这个工具可以帮助我们快速生成交易系统,尤其适合那些想要验证交易思路的朋友。在使用MQL5 Wizard之前,我们需要了解如何创建自己的交易信号类。关于这一点的详细信息可以参考MQL5 Wizard: 如何创建交易信号模块。基本思路是,我们的交易信号类需要继承自CExpertSignal。然后,我们需要重写LongCondition()和ShortCondition()这两个虚方法。我们将重点讨论“看涨吞没”和“看跌吞没”这两种反转蜡烛形态,并结合RSI指标进行确认。这里我们将利用CCandlePattern类来实现信号的生成。1. 吞没形态的识别1.1. 看涨吞没看涨吞没形态是在下跌趋势中形成的,当一根小黑蜡烛后面跟随一根大白蜡烛,且大蜡烛完全吞没了前一天的蜡烛。小蜡烛的影线较短,使得大蜡烛的实体能够覆盖前一天的蜡烛。图1. 看涨吞没蜡烛形态在CCandlePattern类中的CheckPatternBullishEngulfing()方法实现了看涨吞没形态的识别。//+------------------------------------------------------------------+ //| 检查“看涨吞没”蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- 看涨吞没    if((Open(2)>Close(2))             &&  // 前一根蜡烛是看跌       (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨蜡烛的实体大于平均实体       (Close(1)>Open(2))             &&  // 看涨蜡烛的收盘价高于看跌蜡烛的开盘价       (MidOpenClose(2)<CloseAvg(2))  &&  // 下跌趋势       (Open(1)<Close(2)))                // 看涨蜡烛的开盘价低于看跌蜡烛的收盘价       return(true); //---    return(false);   }CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)方法用于检查“看涨吞没”蜡烛形态的形成。1.2. 看跌吞没看跌吞没形态是在上涨趋势中形成的,当一根小白蜡烛后面跟随一根大黑蜡烛,且大蜡烛完全吞没了前一天的蜡烛。小蜡烛的影线较短,使得大蜡烛的实体能够覆盖前一天的蜡烛。图2. 看跌吞没蜡烛形态在CCandlePattern类中的CheckPatternBearishEngulfing()方法实现了看跌吞没形态的识别。//+------------------------------------------------------------------+ //| 检查“看跌吞没”蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- 看跌吞没    if((Open(2)<Close(2))            &&  // 前一根蜡烛是看涨       (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌蜡烛的实体大于平均实体       (Close(1)<Open(2))            &&  // 看跌蜡烛的收盘价低于看涨蜡烛的开盘价       (MidOpenClose(2)>CloseAvg(2)) &&  // 上涨趋势       (Open(1)>Close(2)))               // 看跌蜡烛的开盘价高于看涨蜡烛的收盘价       return(true); //---    return(false);   }CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)方法用于检查“看跌吞没”蜡烛形态的形成。2. 通过RSI指标确认交易信号要打开多头或空头头寸,交易信号必须经过RSI指标的确认。RSI值必须低于/高于关键水平(多头为40,空头为60)。已开头寸的平仓取决于RSI的值,平仓可以在以下两种情况下进行:如果RSI达到相反的关键水平(多头为70,空头为30)如果反转信号未确认(当RSI达到以下水平时:多头为30,空头为70)图3. 看涨吞没形态,RSI确认int CBE_BE_RSI::LongCondition() - 检查开多头条件(返回80)和平空头条件(返回40);int CBE_BE_RSI::ShortCondition() - 检查开空头条件(返回80)和平多头条件(返回40)。2.1. 开多头/平空头“看涨吞没”形态的形成必须经过RSI的确认:RSI(1)<40(最近完成的蜡烛的RSI值必须小于40)。当RSI指标向上突破关键水平70或30时,必须平空头头寸。//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多头,结果=80) | //| 2) 市场出场(平空头,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition()   {    int result=0;    //--- idx用于确定EA工作模式    //--- idx=0 - EA每个tick检查交易条件    //--- idx=1 - EA仅在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开多头条件    //--- 看涨吞没形态和RSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40))      result=80;    //--- 检查平空头条件    //--- 超买/超卖水平的信号线交叉(向上30,向上70)   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40;    //--- 返回结果    return(result);   }2.2. 开空头/平多头“看跌吞没”形态的形成必须经过RSI的确认:RSI(1)>60(最近完成的蜡烛的RSI值必须大于60)。当RSI指标向下突破关键水平70或30时,必须平多头头寸。//+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空头,结果=80) | //| 2) 市场出场(平多头,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition()   {    int result=0;    //--- idx用于确定EA工作模式    //--- idx=0 - EA每个tick检查交易条件    //--- idx=1 - EA仅在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开空头条件    //--- 看跌吞没形态和RSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60))      result=80;    //--- 检查平多头条件    //--- 超买/超卖水平的信号线交叉(向下70,向下30)   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40;    //--- 返回结果    return(result);   }2.3. 使用MQL5 Wizard创建专家顾问CBE_BE_RSI类不在标准库类中使用,要想使用它,需要下载acml_rsi.mqh文件(见附件)并将其保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals文件夹中。同样需要对acandlepatterns.mqh文件进行相同的操作。重启MetaEditor后即可在MQL5 Wizard中使用。创建专家顾问的步骤如下:启动MQL5 Wizard:图4. 使用MQL5 Wizard创建专家顾问接下来,指定专家顾问的名称:图5. 专家顾问的基本属性之后需要选择所用的交易信号模块。图6. 专家顾问的信号属性在我们的案例中,只使用一个交易信号模块。添加“基于RSI确认的看涨吞没/看跌吞没信号”交易信号模块:图7. 专家顾问的信号属性信号模块已添加:图8. 专家顾问的信号属性您可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”:图9. 专家顾问的跟踪属性关于资金管理属性,我们将使用“以固定交易量交易”:图10. 专家顾问的资金管理属性按下“完成”按钮后,我们将得到生成的专家顾问代码,保存在terminal_data_folder\MQL5\Experts\中。生成的专家顾问的默认输入参数://--- 主要信号的输入 input int  Signal_ThresholdOpen   =10;   // 开仓信号阈值[0...100] input int  Signal_ThresholdClose  =10;   // 平仓信号阈值[0...100] input double   Signal_PriceLevel    =0.0;    // 执行交易的价格水平 input double   Signal_StopLevel    =50.0;   // 止损水平(以点为单位) input double   Signal_TakeLevel    =50.0;   // 止盈水平(以点为单位)需替换为://--- 主要信号的输入 input int  Signal_ThresholdOpen   =40;   // 开仓信号阈值[0...100] input int  Signal_ThresholdClose  =20;   // 平仓信号阈值[0...100] input double   Signal_PriceLevel    =0.0;    // 执行交易的价格水平 input double   Signal_StopLevel    =0.0;   // 止损水平(以点为单位) input double   Signal_TakeLevel    =0.0   // 止盈水平(以点为单位)Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许指定开平仓的阈值水平。在交易信号类的LongCondition()和ShortCondition()方法的代码中,我们已指定了固定的阈值:开仓:80;平仓:40。由MQL5 Wizard生成的专家顾问通过模块的“投票”来开平仓。主模块的投票结果也参与“投票”平均,但其LongCondition()和ShortCondition()方法始终返回0。在我们的案例中,主模块+1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,这意味着只有在平仓条件满足时才会平仓。2.4. 历史回测结果我们来看看在历史数据上对专家顾问进行回测的结果(EURUSD H1,测试周期:2010.01.01-2011.03.04,PeriodRSI=11,MA_period=5)。在创建专家顾问时,我们使用了固定交易量(以固定手数交易,0.1),不使用跟踪止损算法(未使用跟踪)。图11. 基于看涨吞没/看跌吞没+RSI的专家顾问测试结果使用MetaTrader 5的策略测试器可以找到最佳的输入参数设置。由MQL5 Wizard创建的专家顾问代码附在expert_abe_be_rsi.mq5中。

2011.03.10
使用MQL5 Wizard创建基于吞没形态和MFI的交易信号
MetaTrader5
使用MQL5 Wizard创建基于吞没形态和MFI的交易信号

在交易中,快速验证你的交易想法是至关重要的,而 MQL5 Wizard 就是一个很好的工具。通过它,你可以根据 标准库 创建现成的交易系统(详见 在MQL5 Wizard中创建现成的交易系统)。只需创建自己的交易信号类,即可快速检查你的交易策略。 通用的思路是:交易信号类源自 CExpertSignal,接下来,你需要重写 LongCondition() 和 ShortCondition() 的虚方法。 在一本名为 “最佳交易者的策略”(俄文)的书中,讨论了许多交易策略,我们将重点关注吞没形态的反转烛台模式,并结合 随机指标、CCI、MFI 和 RSI 等振荡器确认信号。 最佳的方法是创建一个单独的类,该类派生自 CExpertSignal,用于检查烛台模式的形成。为了确认由烛台模式生成的交易信号,只需编写一个派生自 CCandlePattern 的类,并在其中添加必要的特性(例如,通过振荡器确认信号)。 1. 吞没形态的反转烛台模式 1.1. 看涨吞没形态 看涨吞没形态形成于下跌趋势中,当一根小的黑色烛台之后跟随一根大白色烛台,且完全吞没了前一日的烛台。小烛台的影线(尾巴)较短,使得大烛台的实体可以覆盖前一日的整个烛台。 图1. 看涨吞没烛台形态 “看涨吞没”形态的识别在 CCandlePattern 类的 CheckPatternBullishEngulfing() 方法中实现: //+------------------------------------------------------------------+ //| 检查看涨吞没烛台形态的形成       | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- 看涨吞没    if((Open(2)>Close(2))             &&  // 前一根烛台是看跌的       (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨烛台的实体高于平均值       (Close(1)>Open(2))             &&  // 看涨烛台的收盘价高于看跌烛台的开盘价       (MidOpenClose(2)<CloseAvg(2))  &&  // 下跌趋势       (Open(1)<Close(2)))                // 看涨烛台的开盘价低于看跌烛台的收盘价       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 方法用于检查“看涨吞没”烛台模式的形成。 1.2. 看跌吞没形态 看跌吞没形态形成于上涨趋势中,当一根小的白色烛台之后跟随一根大黑色烛台,且完全吞没了前一日的烛台。小烛台的影线(尾巴)较短,使得大烛台的实体可以覆盖前一日的整个烛台。 图2. 看跌吞没烛台形态 “看跌吞没”形态的识别在 CCandlePattern 类的 CheckPatternBearishEngulfing() 方法中实现: //+------------------------------------------------------------------+ //| 检查看跌吞没烛台形态的形成       | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- 看跌吞没    if((Open(2)<Close(2))            &&  // 前一根烛台是看涨的       (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌烛台的实体高于平均值       (Close(1)<Open(2))            &&  // 看跌烛台的收盘价低于看涨烛台的开盘价       (MidOpenClose(2)>CloseAvg(2)) &&  // 上涨趋势       (Open(1)>Close(2)))               // 看跌烛台的开盘价高于看涨烛台的收盘价       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 方法用于检查“看跌吞没”烛台模式的形成。 2. 由MFI指标确认的交易信号 交易信号的开启必须得到 MFI 指标的确认。对于开多单,MFI值需低于40;对于开空单,MFI值需高于60。 关闭已开仓位的条件取决于MFI指标的值,具体有两种情况: 如果MFI达到了相反的临界水平(多单为70,空单为30) 如果反向信号未被确认(当MFI指标达到以下水平时:多单为30,空单为70) 图3. 看涨吞没模式,经MFI指标确认 int CBE_BE_MFI::LongCondition() - 检查开启多单的条件(返回80)和关闭空单的条件(返回40); int CBE_BE_MFI::ShortCondition() - 检查开启空单的条件(返回80)和关闭多单的条件(返回40)。 2.1. 开多单/关闭空单 “看涨吞没”模式的形成必须得到 MFI 指标的确认:MFI(1)<40(最近完成的烛台的MFI指标值必须低于40)。 如果 MFI 指标上穿临界水平(70或30),则必须关闭空单。 //+------------------------------------------------------------------+ //| 检查进出市场的条件                 | //| 1) 进场(开多单,结果=80)                  | //| 2) 出场(关闭空单,结果=40)                 | //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition()   {    int result=0; //--- idx用于确定专家顾问工作模式 //--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件    int idx   =StartIndex(); //--- 检查开多单的条件 //--- 看涨吞没形态和MFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40))      result=80; //--- 检查关闭空单的条件 //--- 信号线交叉超买/超卖水平(上穿30,上穿70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- 返回结果    return(result);   } 2.2. 开空单/关闭多单 “看跌吞没”模式的形成必须得到 MFI 指标的确认:MFI(1)>60(最近完成的烛台的MFI指标值必须大于60)。 如果 MFI 指标上穿临界水平(70或30),则必须关闭多单。 //+------------------------------------------------------------------+ //| 检查进出市场的条件                 | //| 1) 进场(开空单,结果=80)                 | //| 2) 出场(关闭多单,结果=40)                  | //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition()   {    int result=0; //--- idx用于确定专家顾问工作模式 //--- idx=0 - 在这种情况下,EA在每个tick上检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件    int idx   =StartIndex(); //--- 检查开空单的条件 //--- 看跌吞没形态和MFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60))      result=80; //--- 检查关闭多单的条件 //--- 信号线交叉超买/超卖水平(上穿70,下穿30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- 返回结果    return(result);   } 2.3. 使用MQL5 Wizard创建专家顾问 CBE_BE_MFI类未包含在标准库中,使用前需要下载 abe_be_mfi.mqh 文件(见附件),并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对于 acandlepatterns.mqh 文件也需如此。重启MetaEditor后,你可以在MQL5 Wizard中使用它。 要创建一个专家顾问,请启动 MQL5 Wizard: 图4. 使用MQL5 Wizard创建专家顾问 接下来,请指定专家顾问的名称: 图5. 专家顾问的一般属性 然后选择所使用的交易信号模块。 图6. 专家顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。添加“基于看涨吞没/看跌吞没且由MFI确认”的交易信号模块: 图7. 专家顾问的信号属性 交易信号模块已添加: 图8. 专家顾问的信号属性 你可以选择任何跟随属性,但我们将使用“未使用跟随止损”: 图9. 专家顾问的跟随属性 关于资金管理属性,我们将使用“固定交易量交易”: 图10. 专家顾问的资金管理属性 通过按下“完成”按钮,我们将得到生成的专家顾问代码,位于 Expert_ABE_BE_MFI.mq5,将保存在 terminal_data_folder\MQL5\Experts\ 中。 生成的专家顾问的默认输入参数: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值 [0...100] input int            Signal_ThresholdClose  =10;     // 平仓信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0;   // 止损水平(以点为单位) input double         Signal_TakeLevel       =50.0  // 止盈水平(以点为单位) 需要替换为: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值 [0...100] input int            Signal_ThresholdClose  =20;     // 平仓信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0    // 止损水平(以点为单位) input double         Signal_TakeLevel       =0.0    // 止盈水平(以点为单位) Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许指定开仓和平仓的阈值水平。 在交易信号类的 LongCondition() 和 ShortCondition() 方法的代码中,我们指定了固定的阈值: 开仓:80; 平仓:40。 通过MQL5 Wizard生成的专家顾问使用来自交易信号模块的“投票”来开仓和平仓。主模块的投票(作为容器,包含所有添加的模块)也会被使用,但其 LongCondition() 和 ShortCondition() 方法始终返回0。 主模块的投票结果也用于“投票”的平均。在我们的案例中,我们有:主模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen 和 ThresholdClose 应设置为 40=(0+80)/2 和 20=(0+40)/2。 Signal_StopLevel 和 Signal_TakeLevel 输入参数的值设为0,意味着只有在平仓条件为真时才会平仓。 2.4. 历史回测结果 让我们考虑在历史数据上对专家顾问进行回测(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodMFI=37,MA_period=5)。 在创建专家顾问时,我们使用了固定的交易量(固定交易量交易,0.1),未使用跟随止损算法(未使用跟随)。 图11. 基于看涨吞没/看跌吞没 + MFI的专家顾问测试结果 使用MetaTrader 5客户端的策略测试器可以找到最佳的输入参数设置。 由MQL5 Wizard创建的专家顾问代码附在 expert_abe_be_mfi.mq5 中。

2011.03.10
使用MQL5 Wizard创建基于吞没形态与CCI指标的交易信号
MetaTrader5
使用MQL5 Wizard创建基于吞没形态与CCI指标的交易信号

大家好!今天我们来聊聊如何利用MQL5 Wizard创建一个基于吞没形态和CCI指标的交易信号的智能交易系统(EA)。这个工具可以帮助我们快速验证交易想法,下面我将为大家详细介绍如何操作。 这个过程主要是通过创建一个交易信号类来实现的。这个类需要从CExpertSignal派生,并重写其中的LongCondition()和ShortCondition()方法,以满足我们自己的需求。 1. 吞没形态(Bullish Engulfing 和 Bearish Engulfing) 1.1. Bullish Engulfing Bullish Engulfing模式通常出现在下跌趋势中,形态由一个小的黑色蜡烛跟随一个完全吞没它的白色蜡烛形成。小蜡烛的影线(尾巴)较短,使得大蜡烛的实体能够完全覆盖前一日的蜡烛。 图1. Bullish Engulfing蜡烛图形态 在CCandlePattern类中,我们通过CheckPatternBullishEngulfing()方法来识别Bullish Engulfing模式。 //+------------------------------------------------------------------+ //| 检查Bullish Engulfing蜡烛图形态 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- Bullish Engulfing    if((Open(2)>Close(2))             &&  // 前一根蜡烛是看跌       (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨蜡烛的实体大于平均值       (Close(1)>Open(2))             &&  // 看涨蜡烛的收盘价高于看跌蜡烛的开盘价       (MidOpenClose(2)<CloseAvg(2))  &&  // 确保处于下跌趋势       (Open(1)<Close(2)))                // 看涨蜡烛的开盘价低于看跌蜡烛的收盘价       return(true); //---    return(false);   } 在CCandlePattern类中,我们使用CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)方法来检查Bullish Engulfing形态的形成。 1.2. Bearish Engulfing Bearish Engulfing模式出现在上涨趋势中,形态由一个小的白色蜡烛跟随一个完全吞没它的大黑蜡烛形成。小蜡烛的影线(尾巴)较短,使得大蜡烛的实体能够完全覆盖前一日的蜡烛。 图2. Bearish Engulfing蜡烛图形态 在CCandlePattern类中,通过CheckPatternBearishEngulfing()方法识别Bearish Engulfing模式。 //+------------------------------------------------------------------+ //| 检查Bearish Engulfing蜡烛图形态 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- Bearish Engulfing    if((Open(2)<Close(2))            &&  // 前一根蜡烛是看涨       (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌蜡烛的实体大于平均值       (Close(1)<Open(2))            &&  // 看跌蜡烛的收盘价低于看涨蜡烛的开盘价       (MidOpenClose(2)>CloseAvg(2)) &&  // 确保处于上涨趋势       (Open(1)>Close(2)))               // 看跌蜡烛的开盘价高于看涨蜡烛的收盘价       return(true); //---    return(false);   } 在CCandlePattern类中,我们使用CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)方法来检查Bearish Engulfing形态的形成。 2. 交易信号确认与CCI指标 在开仓或者平仓时,我们需要用到CCI指标来确认交易信号。当CCI的值高于50时,我们可以开短仓;低于-50时,可以开多仓。 平仓的条件有两个: 当CCI到达相反的临界水平时(多仓为80,空仓为-80) 如果反向信号没有得到确认(当CCI到达-80或80时) 图3. 通过CCI指标确认Bullish Engulfing模式的交易信号 int CBE_BE_CCI::LongCondition() - 检查开多仓的条件(返回80)和关闭空仓的条件(返回40); int CBE_BE_CCI::ShortCondition() - 检查开空仓的条件(返回80)和关闭多仓的条件(返回40)。 2.1. 开多仓/平空仓 Bullish Engulfing形态必须被CCI指标确认:CCI(1)<-50(最后一根完成的蜡烛的CCI值必须小于-50)。 如果CCI指标穿越了临界水平-80向上,或穿越了80向下,则平空仓。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进入(开多仓,结果=80) | //| 2) 市场退出(平空仓,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::LongCondition()   {    int result=0; //--- idx用于确定EA工作模式 //--- idx=0 - EA每次tick时检查交易条件 //--- idx=1 - EA仅在新闻蜡烛时检查交易条件    int idx   =StartIndex(); //--- 检查开多仓条件 //--- Bullish Engulfing形态和CCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))      result=80; //--- 检查平空仓条件 //--- 过买/过卖水平的信号线交叉(下穿-80,上穿80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40; //--- 返回结果    return(result);   } 2.2. 开空仓/平多仓 Bearish Engulfing形态必须被CCI指标确认:CCI(1)>50(最后一根完成的蜡烛的CCI值必须大于50)。 如果CCI指标穿越了-80或80水平向下,则平多仓。 //+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进入(开空仓,结果=80) | //| 2) 市场退出(平多仓,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::ShortCondition()   {    int result=0; //--- idx用于确定EA工作模式 //--- idx=0 - EA每次tick时检查交易条件 //--- idx=1 - EA仅在新闻蜡烛时检查交易条件    int idx   =StartIndex(); //--- 检查开空仓条件 //--- Bearish Engulfing形态和CCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))      result=80; //--- 检查平多仓条件 //--- 过买/过卖水平的信号线交叉(下穿-80,上穿80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40; //--- 返回结果    return(result);   } 2.3. 使用MQL5 Wizard创建智能交易系统 CBE_BE_CCI类不在标准库中,要使用它需要下载acbe_be_cci.mqh文件(见附件),并将其保存到client_terminal_data\MQL5\Include\Expert\Signal\MySignals文件夹中。candlepatterns.mqh文件也需同样处理。重启MetaEditor后即可在MQL5 Wizard中使用。 创建智能交易系统的步骤如下: 图4. 创建智能交易系统步骤 接下来,指定智能交易系统的名称: 图5. 智能交易系统的基本属性 接下来选择所用的交易信号模块。 图6. 智能交易系统的信号属性 在我们的案例中,我们只使用一个交易信号模块。 添加“基于吞没形态与CCI的交易信号”模块: 图7. 智能交易系统的信号属性 交易信号模块已添加: 图8. 智能交易系统的信号属性 可以选择任何跟踪属性,但我们将使用“不使用跟踪止损”: 图9. 智能交易系统的跟踪属性 关于资金管理属性,我们将使用“固定交易量交易”: 图10. 智能交易系统的资金管理属性 按下“完成”按钮后,我们将获得生成的智能交易系统代码,位置为Expert_ABE_BE_CCI.mq5,保存于terminal_data_folder\MQL5\Experts\。 生成的智能交易系统的默认输入参数: //--- 交易信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值 input int            Signal_ThresholdClose  =10;     // 平仓信号阈值 input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0;   // 止损水平(点数) input double         Signal_TakeLevel       =50.0;  // 盈利水平(点数) 需要替换为: //--- 交易信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值 input int            Signal_ThresholdClose  =20;     // 平仓信号阈值 input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0;    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 盈利水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许我们指定开仓和平仓的阈值。 在LongCondition()和ShortCondition()方法的代码中,我们指定了固定的阈值: 开仓:80; 平仓:40。 通过MQL5 Wizard生成的智能交易系统会根据交易信号模块的“投票”来开平仓。主模块的投票结果也会被用于“投票”平均化。在我们的案例中:主模块 + 1个交易信号模块,因此在设置阈值时需要考虑到这一点。因此,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,表示平仓仅在满足平仓条件时进行。 2.4. 历史回测结果 接下来,我们来看一下在历史数据上(EURUSD H1,测试期:2010.01.01-2011.03.16,PeriodCCI=49,MA_period=11)回测智能交易系统的结果。 在创建智能交易系统时,我们使用了固定的交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。 图11. 基于吞没形态与CCI的智能交易系统回测结果 最佳的输入参数组合可以通过MetaTrader 5策略测试器找到。 通过MQL5 Wizard创建的智能交易系统代码已附在expert_abe_be_cci.mq5中。

2011.03.10
利用MQL5 Wizard创建基于吞没形态与随机指标的交易信号
MetaTrader5
利用MQL5 Wizard创建基于吞没形态与随机指标的交易信号

大家好,今天我们来聊聊如何利用 MQL5 Wizard 创建交易信号,特别是基于吞没形态(Bullish Engulfing/Bearish Engulfing)和随机指标(Stochastic)的交易策略。这是一个非常实用的工具,能够帮助我们快速测试交易想法。 首先,你需要创建一个自己的交易信号类,具体结构和示例可以参考文章 MQL5 Wizard: 如何创建交易信号模块。简单来说,交易信号类是从 CExpertSignal 继承而来的,我们需要重写 LongCondition() 和 ShortCondition() 方法来适应我们的需求。 在创建交易策略时,我建议参考一些优秀的交易者的策略,比如书籍 《优秀交易者的策略》,其中包含了很多逆转蜡烛形态的策略,这些策略可通过随机指标(Stochastic)、CCI、MFI和RSI等指标进行确认。 我们将重点讨论基于吞没形态的交易信号,这种模式在市场反转时非常有效。我们需要创建一个独立的类,继承自 CExpertSignal 来检查蜡烛形态的形成,并在此基础上添加确认信号的功能(例如,通过随机指标确认)。 1. 吞没形态介绍 1.1. Bullish Engulfing(看涨吞没形态) 看涨吞没形态通常出现在下跌趋势中,形成时,前一个小的黑色蜡烛后面跟着一个完全吞没其的较大白色蜡烛。小蜡烛的影线较短,确保大蜡烛的实体能够覆盖前一日的蜡烛。 图1. 看涨吞没蜡烛形态 看涨吞没形态的识别可以通过 CheckPatternBullishEngulfing() 方法实现,以下是示例代码: //+------------------------------------------------------------------+ //| 检查看涨吞没形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing()   { //--- 看涨吞没形态    if((Open(2)>Close(2))             &&  // 前一个蜡烛为看跌       (Close(1)-Open(1)>AvgBody(1))  &&  // 看涨蜡烛的实体大于平均值       (Close(1)>Open(2))             &&  // 看涨蜡烛的收盘价高于看跌蜡烛的开盘价       (MidOpenClose(2)<CloseAvg(2))  &&  // 下跌趋势       (Open(1)<Close(2)))                // 看涨蜡烛的开盘价低于看跌蜡烛的收盘价       return(true); //---    return(false);   } 通过 CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 方法可以检查看涨吞没蜡烛形态的形成。 1.2. Bearish Engulfing(看跌吞没形态) 看跌吞没形态出现在上涨趋势中,前一个小的白色蜡烛后面跟着一个完全吞没其的较大黑色蜡烛,同样,小蜡烛的影线较短,确保大蜡烛的实体能够覆盖前一日的蜡烛。 图2. 看跌吞没蜡烛形态 看跌吞没形态的识别可以通过 CheckPatternBearishEngulfing() 方法实现,以下是示例代码: //+------------------------------------------------------------------+ //| 检查看跌吞没形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing()   { //--- 看跌吞没形态    if((Open(2)<Close(2))            &&  // 前一个蜡烛为看涨       (Open(1)-Close(1)>AvgBody(1)) &&  // 看跌蜡烛的实体大于平均值       (Close(1)<Open(2))            &&  // 看跌蜡烛的收盘价低于看涨蜡烛的开盘价       (MidOpenClose(2)>CloseAvg(2)) &&  // 上涨趋势       (Open(1)>Close(2)))               // 看跌蜡烛的开盘价高于看涨蜡烛的收盘价       return(true); //---    return(false);   } 通过 CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 方法可以检查看跌吞没蜡烛形态的形成。 2. 基于随机指标的交易信号 我们需要确保开多或开空的交易信号得到随机指标的确认。具体来说,%D线需要高于或低于相应的关键水平(30或70)。 当满足以下条件之一时,可以平掉当前持仓: 当%D线达到相反的关键水平(长仓时为80,短仓时为20); 当反转信号未得到确认(当%D线达到以下水平:长期为20,短期为80)。 图3. 看涨吞没形态,确认通过随机指标 我们将通过两个方法检查交易条件: int CBE_BE_Stoch::LongCondition() - 检查开多仓的条件(返回80)和关闭短仓的条件(返回40); int CBE_BE_Stoch::ShortCondition() - 检查开空仓的条件(返回80)和关闭多仓的条件(返回40)。 2.1. 开多仓 / 平空仓 形成看涨吞没形态必须得到随机指标的确认:StochSignal(1)<30(随机指标的信号线值必须小于30)。 如果随机指标的信号线向上突破20或80水平,短仓必须平掉。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进入(开多仓,结果=80) | //| 2) 市场退出(平空仓,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_Stoch::LongCondition()   {    int result=0;    //--- idx可以用来判断EA工作模式    //--- idx=0 - EA会在每个tick检查交易条件    //--- idx=1 - EA只会在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开多仓的条件    //--- 看涨吞没形态和信号线<30   if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))      result=80;    //--- 检查平空仓的条件    //--- 信号线突破超买/超卖水平(向下20,向上80)    if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||        ((StochSignal(1)>80) && (StochSignal(2)<80))))      result=40;    //--- 返回结果    return(result);   } 2.2. 开空仓 / 平多仓 形成看跌吞没形态必须得到随机指标的确认:StochSignal(1)>70(随机指标的信号线值必须大于70)。 如果随机指标的信号线向下突破80或20水平,多仓必须平掉。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进入(开空仓,结果=80) | //| 2) 市场退出(平多仓,结果=40) | //+------------------------------------------------------------------+ int CBE_BE_Stoch::ShortCondition()   {    int result=0;    //--- idx可以用来判断EA工作模式    //--- idx=0 - EA会在每个tick检查交易条件    //--- idx=1 - EA只会在新闻蜡烛时检查交易条件    int idx   =StartIndex();    //--- 检查开空仓的条件    //--- 看跌吞没形态和信号线>70   if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))      result=80;    //--- 检查平多仓的条件    //--- 信号线突破超买/超卖水平(向下80,向上20)    if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||        ((StochSignal(1)<20) && (StochSignal(2)>20))))      result=40;    //--- 返回结果    return(result);   } 2.3. 利用MQL5 Wizard创建专家顾问 CBE_BE_Stoch类不包含在标准库中,使用前需要下载 acbe_be_stoch.mqh 文件(详见附件),并将其保存到 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也需要进行同样的操作。在重启MetaEditor后,你就可以在MQL5 Wizard中使用这些文件了。 启动 MQL5 Wizard 创建专家顾问: 图4. 创建专家顾问 我们需要指定专家顾问的名称: 图5. 专家顾问的一般属性 接下来选择使用的交易信号模块。 图6. 专家顾问的信号属性 在这里我们只使用一个交易信号模块。 添加“基于看涨吞没/看跌吞没并确认随机指标的信号”交易信号模块: 图7. 专家顾问的信号属性 信号模块已添加: 图8. 专家顾问的信号属性 你可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”: 图9. 专家顾问的跟踪属性 关于资金管理属性,我们将使用“以固定交易量进行交易”: 图10. 专家顾问的资金管理属性 按下“完成”按钮后,我们将获得生成的专家顾问代码,保存于 terminal_data_folder\MQL5\Experts\Expert_ABE_BE_Stoch.mq5 中。 生成的专家顾问的默认输入参数: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =10;     // 开仓信号阈值 [0...100] input int            Signal_ThresholdClose  =10;     // 平仓信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =50.0;   // 止损水平(点数) input double         Signal_TakeLevel       =50.0;  // 盈利水平(点数) 这些参数需要替换为: //--- 主要信号的输入参数 input int            Signal_ThresholdOpen   =40;     // 开仓信号阈值 [0...100] input int            Signal_ThresholdClose  =20;     // 平仓信号阈值 [0...100] input double         Signal_PriceLevel      =0.0;    // 执行交易的价格水平 input double         Signal_StopLevel       =0.0;    // 止损水平(点数) input double         Signal_TakeLevel       =0.0    // 盈利水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许您指定开仓和关仓的阈值。 在交易信号类的 LongCondition() 和 ShortCondition() 方法中,我们指定了固定的阈值: 开仓:80; 平仓:40。 MQL5 Wizard 生成的专家顾问将利用来自交易信号模块的“投票”来开平仓。主要模块的投票结果将用于“投票”平均计算。在我们的案例中,主要模块 + 1 个交易信号模块,因此在设置阈值时需要考虑这一点。因为这个原因,ThresholdOpen和ThresholdClose应该设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel 和 Signal_TakeLevel 的输入参数设置为0,意味着持仓的关闭仅在满足平仓条件时进行。 2.4. 历史回测结果 让我们来看一下在历史数据上对专家顾问的回测(EURUSD H1,测试周期:2010.01.01-2011.03.04,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)。 在创建专家顾问时,我们使用的是固定交易量(固定交易量交易,0.1),未使用跟踪止损算法(未使用跟踪)。 图11. 基于吞没形态与随机指标的专家顾问测试结果 可以通过 MetaTrader 5 客户端的策略测试器 找到最佳的输入参数。 通过 MQL5 Wizard 创建的专家顾问代码已附在 expert_abe_be_stoch.mq5 文件中。

2011.03.10
使用MQL5 Wizard创建基于暗云盖和穿透线的交易信号EA
MetaTrader5
使用MQL5 Wizard创建基于暗云盖和穿透线的交易信号EA

大家好!今天我们来聊聊如何使用 MQL5 Wizard 创建基于暗云盖和穿透线的交易信号专家顾问(EA)。MQL5 Wizard 提供了一个便捷的方式,可以快速生成交易信号的模块,帮助我们更好地实现交易策略。 在创建交易信号之前,我们可以参考一些经典的交易策略,比如《最优秀交易员的策略》。我们将重点关注由 RSI 指标确认的反转蜡烛图形态,例如暗云盖和穿透线。 1. 理解暗云盖和穿透线的反转蜡烛图形态 1.1. 暗云盖 暗云盖是一种看跌的反转蜡烛图形态,通常出现在上涨趋势的末尾。第一天形成一根长白蜡烛,而第二天则出现一个向上的缺口,但第二天的收盘价却低于第一天的中点。 图 1. 暗云盖蜡烛图形态 在 CCandlePattern 类中,CheckPatternDarkCloudCover() 方法用于识别暗云盖形态。 //+------------------------------------------------------------------+ //| 检查暗云盖蜡烛图形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- 暗云盖 if((Close(2)-Open(2) > AvgBody(1) && (Close(1) < Close(2) && (Close(1) > Open(2) && (MidOpenClose(2) > CloseAvg(1) && (Open(1) > High(2))) { return(true); } return(false); } CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 方法用于检查暗云盖蜡烛图形态的形成。 1.2. 穿透线 穿透线是一种看涨的反转蜡烛图形态,第二天的缺口下跌后,第二天的收盘价却高于第一天蜡烛的中点。这表明空头可能在形成底部。这种价格行为在蜡烛图上更明显,而在柱状图上则不易辨认。 图 2. 穿透线蜡烛图形态 在 CCandlePattern 类中,CheckPatternPiercingLine() 方法用于识别穿透线形态。 //+------------------------------------------------------------------+ //| 检查穿透线蜡烛图形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- 穿透线 if((Close(1) - Open(1) > AvgBody(1) && (Open(2) - Close(2) > AvgBody(1) && (Close(1) > Close(2) && (Close(1) < Open(2) && (MidOpenClose(2) < CloseAvg(2) && (Open(1) < Low(2))) { return(true); } return(false); } CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 方法用于检查穿透线蜡烛图形态的形成。 2. 由RSI指标确认的交易信号 在开启多头或空头头寸之前,必须确认交易信号,通过 RSI 指标来确认。RSI的值必须低于或高于关键水平(多头为40,空头为60)。 关闭已开头寸的条件取决于 RSI 的值,主要有两种情况: 如果RSI达到了相反的关键水平(多头为70,空头为30) 如果未确认反转信号(当RSI达到30(多头)或70(空头)时) 图 3. 暗云盖形态由RSI指标确认 int CDC_PL_RSI::LongCondition() - 检查开多头的条件(返回80)和闭空头的条件(返回40); int CDC_PL_RSI::ShortCondition() - 检查开空头的条件(返回80)和闭多头的条件(返回40)。 2.1. 开多头/闭空头 必须由 RSI 指标确认“穿透线”形态:RSI(1) 70) && (RSI(2) < 70))) result=40; //--- 返回结果 return(result); } 2.2. 开空头/闭多头 必须由 RSI 指标确认“暗云盖”形态:RSI(1)>60(最近完成的蜡烛的RSI值必须大于60)。 当 RSI 指标向下穿过关键水平70或30时,必须关闭多头头寸。 //+------------------------------------------------------------------+ //| 检查市场进入和退出的条件 | //| 1) 市场进入(开空头,结果=80) | //| 2) 市场退出(闭多头,结果=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() { int result=0; //--- idx用于确定EA的工作模式 //--- idx=0 - 在这种情况下EA在每个tick时检查交易条件 //--- idx=1 - 在这种情况下EA仅在新蜡烛时检查交易条件 int idx = StartIndex(); //--- 检查开空头的条件 //--- 暗云盖形态和RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1) > 60)) result=80; //--- 检查闭多头的条件 //--- 信号线交叉超买/超卖水平(向下70,向下30) if(((RSI(1) < 70) && (RSI(2) > 70)) || ((RSI(1) < 30) && (RSI(2) > 30))) result=40; //--- 返回结果 return(result); } 2.3. 使用MQL5 Wizard创建专家顾问 CDC_PL_RSI 类不包含在标准库中,使用前需要下载 adc_pl_rsi.mqh 文件(见附件),并将其保存到 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 文件夹。acandlepatterns.mqh 文件也应如此。重启 MetaEditor 后即可在 MQL5 Wizard 中使用这些模块。 创建专家顾问时启动 MQL5 Wizard: 图 4. 使用MQL5 Wizard创建专家顾问 接下来指定专家顾问的名称: 图 5. 专家顾问的一般属性 然后选择所使用的交易信号模块。 图 6. 专家顾问的信号属性 在我们的案例中,仅使用一个交易信号模块。 添加基于暗云盖/穿透线的RSI确认信号模块: 图 7. 专家顾问的信号属性 信号模块已添加: 图 8. 专家顾问的信号属性 可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”: 图 9. 专家顾问的资金管理属性 关于资金管理属性,我们将使用“以固定交易量进行交易”: 图 10. 专家顾问的资金管理属性 点击“完成”按钮后,我们将获得生成的专家顾问代码,位于 Expert_ADC_PL_RSI.mq5,保存于 terminal_data_folder\MQL5\Experts\。 生成的专家顾问的默认输入参数: //--- 信号的输入 input int Signal_ThresholdOpen = 10; // 开盘信号阈值 [0...100] input int Signal_ThresholdClose = 10; // 闭盘信号阈值 [0...100] input double Signal_PriceLevel = 0.0; // 执行交易的价格水平 input double Signal_StopLevel = 50.0; // 止损水平(点数) input double Signal_TakeLevel = 50.0; // 盈利水平(点数) 需要替换为: //--- 信号的输入 input int Signal_ThresholdOpen = 40; // 开盘信号阈值 [0...100] input int Signal_ThresholdClose = 20; // 闭盘信号阈值 [0...100] input double Signal_PriceLevel = 0.0; // 执行交易的价格水平 input double Signal_StopLevel = 0.0; // 止损水平(点数) input double Signal_TakeLevel = 0.0; // 盈利水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许指定开盘和闭盘的阈值。 在交易信号类的 LongCondition() 和 ShortCondition() 方法中,我们指定了阈值的固定值: 开盘位置: 80; 闭盘位置: 40; MQL5 Wizard 生成的专家顾问通过交易信号模块的“投票”来开盘和闭盘。主要模块的投票结果也会被用来进行“投票”的平均。在我们的案例中:主要模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。由于这一点,ThresholdOpen 和 ThresholdClose 必须设置为 40=(0+80)/2 和 20=(0+40)/2。 Signal_StopLevel 和 Signal_TakeLevel 输入参数设置为0,意味着只有在满足关闭条件时才会关闭头寸。 2.4. 历史回测结果 我们来看看在历史数据上回测专家顾问的结果(EURUSD H1,测试期间:2010.01.01-2011.02.23,PeriodRSI=20,MA_period=14)。 在创建专家顾问时,我们使用了固定的交易量(固定交易量, 0.1),未使用跟踪止损(未使用跟踪)。 图 11. 基于暗云盖/穿透线 + RSI 的专家顾问测试结果 最佳输入参数组合可以通过 MetaTrader 5 客户端终端的策略测试器 找到。 使用 MQL5 Wizard 创建的专家顾问代码附在 expert_ad_pl_rsi.mq5 文件中。

2011.02.25
使用MQL5向导创建基于暗云盖/刺透线的交易信号EA
MetaTrader5
使用MQL5向导创建基于暗云盖/刺透线的交易信号EA

在交易领域中,MQL5向导为我们提供了一种便捷的方式来创建基于标准库类的现成专家顾问(EA)。通过这个工具,您可以快速验证您的交易想法,只需创建自己的交易信号类即可。有关更多信息,请参阅MQL5向导:如何创建交易信号模块。 基本思路是:交易信号类从CExpertSignal派生,接下来需要重写LongCondition()和ShortCondition()虚方法,使用您自己的方法。 关于交易策略,有一本书《最佳交易者策略》(俄语),其中探讨了多种交易策略。在这里,我们将重点关注由随机指标、CCI、市场便利指数(MFI)和相对强弱指数(RSI)确认的反转蜡烛图模式。 最佳实践是创建一个单独的类,从CExpertSignal派生,用于检查蜡烛图模式的形成。为了确认由蜡烛图模式生成的交易信号,只需编写一个从CCandlePattern派生的类,并在其中添加必要的功能(例如,通过振荡器确认)。 在这里,我们将讨论基于市场便利指数(MFI)指标确认的“暗云盖/刺透线”反转蜡烛图模式的信号。交易信号模块基于CCandlePattern类,是使用蜡烛图模式创建交易信号的简单示例。 1. “暗云盖”和“刺透线”反转蜡烛图模式 1.1. 暗云盖 暗云盖是一种看跌的蜡烛图反转形态,发生在上升趋势的末端。第一天形成一根长白蜡烛,第二天出现向上的缺口。然而,第二天的收盘价低于第一天的中点。 图1:暗云盖蜡烛图模式 “暗云盖”模式的识别在CCandlePattern类中的CheckPatternDarkCloudCover()方法中实现: //+------------------------------------------------------------------+ //| 检查“暗云盖”蜡烛图模式的形成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- 暗云盖 &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (长白蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (收盘在前一根蜡烛体内) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上升趋势) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (开盘在新高) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CCandlePattern类中的CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)方法用于检查“暗云盖”蜡烛图模式的形成。 1.2. 刺透线 第二天的缺口向下延续了下跌趋势,然而第二天的收盘价高于第一天蜡烛体的中点。这向空头暗示,底部可能正在形成。在柱状图上,这种价格行为不如在蜡烛图上明显,第二天收盘价越深入第一天的蜡烛体,反转信号成功的可能性就越高。 图2:刺透线蜡烛图模式 “刺透线”模式的识别在CCandlePattern类中的CheckPatternPiercingLine()方法中实现: //+------------------------------------------------------------------+ //| 检查“刺透线”蜡烛图模式的形成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- 刺透线 &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (长白蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (长黑蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; //&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (收盘在前一根蜡烛体内) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (下跌趋势) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (开盘低于前一根蜡烛的低点) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CCandlePattern类中的CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)方法用于检查“刺透线”蜡烛图模式的形成。 2. 通过MFI指标确认的交易信号 开多或空头头寸的交易信号必须由MFI指标确认。MFI指标的值必须低于40(对于多头)或高于60(对于空头)。 已开仓位的平仓取决于MFI指标的值。可以在以下两种情况下完成: 如果MFI达到相反的临界水平(多头为70,空头为30) 如果反向信号未得到确认(当MFI指标达到以下水平:多头为30,空头为70) 图3:由MFI指标确认的暗云盖模式 int CDC_PL_MFI::LongCondition() - 检查开多头寸的条件(返回80)和平空头寸的关闭条件(返回40); int CDC_PL_MFI::ShortCondition() - 检查开空头寸的条件(返回80)和平多头寸的关闭条件(返回40)。 2.1. 开多头寸/平空头寸 “晨星”模式的形成必须由MFI指标确认:MFi(1)&lt;40(最后完成的柱的MFI指标值必须小于40)。 如果MFI指标突破临界水平(70或30)向上,必须平掉空头头寸。 //+------------------------------------------------------------------+ //| 检查市场进出条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1)市场进入(开多头寸,结果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //| 2)市场退出(平空头寸,结果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int CDC_PL_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx用于确定EA的工作模式 //--- idx=0 - 在这种情况下,EA在每个滴答时检查交易条件 //--- idx=1 - 在这种情况下,EA只在新闻柱上检查交易条件 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 检查开多头寸的条件 //--- 刺透线模式和MFI&lt;40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 检查平空头寸的条件 //--- 信号线交叉超买/超卖水平(向上30,向上70) &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 开空头寸/平多头寸 “暗云盖”模式的形成必须由MFI指标确认:MFI(1)&gt;60(最后完成的柱的MFI指标值必须大于60)。 如果MFI指标突破临界水平(70或30)向上,必须平掉多头头寸。 //+------------------------------------------------------------------+ //| 检查市场进出条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1)市场进入(开空头寸,结果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2)市场退出(平多头寸,结果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ int CDC_PL_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx用于确定EA的工作模式 //--- idx=0 - 在这种情况下,EA在每个滴答时检查交易条件 //--- idx=1 - 在这种情况下,EA只在新闻柱上检查交易条件 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 检查开空头寸的条件 //--- 暗云盖模式和MFI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 检查平多头寸的条件 //--- 信号线交叉超买/超卖水平(向上70,向下30) &nbsp;&nbsp;if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. 使用MQL5向导创建专家顾问 CDC_PL_MFI类不包含在标准库类中,使用前需要下载adc_pl_mfi.mqh文件(见附件)并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。对acandlepatterns.mqh文件也需进行相同操作。您可以在重启MetaEditor后在MQL5向导中使用它。 要创建一个专家顾问,请启动MQL5向导: 图4:使用MQL5向导创建专家顾问 让我们指定专家顾问的名称: 图5:专家顾问的一般属性 接下来,我们需要选择使用的交易信号模块。 图6:专家顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。 添加“基于暗云盖/刺透线并由MFI确认的信号”交易信号模块: 图7:专家顾问的信号属性 交易信号模块已添加: 图8:专家顾问的信号属性 您可以选择任何跟踪属性,但我们将使用“不使用跟踪止损”: 图9:专家顾问的跟踪属性 关于资金管理属性,我们将使用“固定交易量交易”: 图10:专家顾问的资金管理属性 点击“完成”按钮后,我们将获得生成的专家顾问代码,位于Expert_ADC_PL_MFI.mq5文件中,保存于terminal_data_folder\MQL5\Experts\。 生成的专家顾问的默认输入参数: //--- 主要信号的输入 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 开盘信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 盈利水平(点数) 必须替换为: //--- 主要信号的输入 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 开盘信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 盈利水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许您指定开仓和平仓的阈值水平。 在交易信号类的LongCondition()和ShortCondition()方法中,我们已指定了阈值的固定值: 开仓:80; 平仓:40。 MQL5向导生成的专家顾问使用“投票”机制来开平仓位。主要模块的投票结果(作为容器,包含所有添加的模块)也会被使用,但其LongCondition()和ShortCondition()方法始终返回0。 主要模块的投票结果也用于“投票”平均计算。在我们的案例中,我们有一个主要模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,这意味着仅在平仓条件成立时才会平仓。 2.4. 历史回测结果 我们来看看在历史数据上对专家顾问进行的回测(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodMFI=49,MA_period=11)。 在创建专家顾问时,我们使用了固定交易量(固定手数交易,0.1),未使用跟踪止损算法(不使用跟踪)。 图11:基于暗云盖/刺透线 + MFI的专家顾问测试结果 最佳输入参数集可以通过MetaTrader 5客户端终端的策略测试器找到。 由MQL5向导生成的专家顾问代码附在expert_adc_pl_mfi.mq5中。

2011.02.25
使用MQL5 Wizard创建基于暗云盖与刺透形态的交易信号EA
MetaTrader5
使用MQL5 Wizard创建基于暗云盖与刺透形态的交易信号EA

大家好!今天我们来聊聊如何利用MQL5 Wizard来创建基于标准库类的现成交易顾问(EA)。这个工具能够快速检验你的交易想法,你只需创建自己的交易信号类即可。关于这个类的结构和示例可以参考MQL5 Wizard: 如何创建交易信号模块这篇文章。 基本思路是:交易信号类继承自CExpertSignal,然后你需要重写LongCondition()和ShortCondition()这两个虚拟方法,添加你自己的逻辑。 有一本书《最佳交易者策略》(俄文),书中讨论了多种交易策略,我们将聚焦于反转蜡烛形态,结合随机指标、CCI、MFI和RSI等振荡指标进行确认。 最好的做法是创建一个独立的类,继承自CExpertSignal,用于检查蜡烛形态的形成。为了确认由蜡烛形态生成的交易信号,只需编写一个继承自CCandlePattern的类,并添加必要的功能(例如,振荡指标确认)即可。 接下来,我们将讨论基于“暗云盖/刺透形态”的反转蜡烛形态,结合CCI指标进行确认。这个交易信号模块基于CCandlePattern类,是创建蜡烛形态交易信号的简单示例。 1. “暗云盖”和“刺透形态”的反转蜡烛形态 1.1. 暗云盖 这是一个出现在上涨趋势末尾的看跌蜡烛反转形态。第一天形成一根长白蜡烛,第二天出现缺口上涨,但第二天的收盘价低于第一天的中点。 图1. 暗云盖蜡烛形态 “暗云盖”形态的识别在CCandlePattern类的CheckPatternDarkCloudCover()方法中实现。 //+------------------------------------------------------------------+ //| 检查“暗云盖”蜡烛形态的形成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- 暗云盖 &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (长白蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (收盘在前一根蜡烛体内) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上涨趋势) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (在新高处开盘) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)方法用于检查“暗云盖”蜡烛形态的形成。 1.2. 刺透形态 第二天的缺口下跌延续了下跌趋势,但第二天的收盘价高于第一天蜡烛体的中点。这表明空头可能形成底部。这个价格行为在蜡烛图上较为明显,而在条形图上则不易察觉。第二天收盘价越是深入第一天的蜡烛体,反转信号成功的可能性越大。 图2. 刺透形态 “刺透形态”的识别在CCandlePattern类的CheckPatternPiercingLine()方法中实现。 //+------------------------------------------------------------------+ //| 检查“刺透形态”蜡烛形态的形成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- 刺透形态 &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (长白蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (长黑蜡烛) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; //&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (收盘在前一根蜡烛体内) &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (下跌趋势) &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (在前一根蜡烛的低点开盘) &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)方法用于检查“刺透形态”蜡烛形态的形成。 2. 由CCI指标确认的交易信号 开启多头或空头仓位的交易信号必须由CCI指标确认。CCI的值必须高于/低于临界水平(多头仓位为-50,空头仓位为50)。 已开仓位的平仓取决于CCI的值。平仓可以在两种情况下进行: 如果CCI线达到相反的临界水平(多头80,空头-80) 如果反转信号未得到确认(当CCI达到以下水平时:多头-80,空头80) 图3. 暗云盖形态确认的CCI指标 int CDC_PL_CCI::LongCondition() - 检查开启多头仓位的条件(返回80)和关闭空头仓位的条件(返回40); int CDC_PL_CCI::ShortCondition() - 检查开启空头仓位的条件(返回80)和关闭多头仓位的条件(返回40)。 2.1. 开启多头仓位/关闭空头仓位 “刺透形态”的形成必须由CCI指标确认:CCI(1)&lt;-50(最后一根完成蜡烛的CCI值必须小于-50)。 如果CCI指标向上穿越临界水平-80或向下穿越临界水平80,则必须关闭空头仓位。 //+------------------------------------------------------------------+ //| 检查进场及退场条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 进场(开启多头仓位,结果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //| 2) 退场(关闭空头仓位,结果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int CDC_PL_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx可以用来确定EA工作模式 //--- idx=0 - 在这种情况下,EA在每个tick检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 检查开启多头仓位的条件 //--- “刺透形态”的形成和CCI&lt;-50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 检查关闭空头仓位的条件 //--- 信号线穿越超买/超卖水平(向下-80,向下-80) &nbsp;&nbsp; if(((CCI(1)&gt;-80) &amp;&amp; (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 开启空头仓位/关闭多头仓位 “暗云盖”的形成必须由CCI指标确认:CCI(1)&gt;50(最后一根完成蜡烛的CCI值必须大于50)。 如果CCI指标向下穿越-80或80水平,则必须关闭多头仓位。 //+------------------------------------------------------------------+ //| 检查进场及退场条件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 进场(开启空头仓位,结果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 退场(关闭多头仓位,结果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ int CDC_PL_CCI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx可以用来确定EA工作模式 //--- idx=0 - 在这种情况下,EA在每个tick检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻条上检查交易条件 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 检查开启空头仓位的条件 //--- “暗云盖”的形成和CCI&gt;50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (CCI(1)&gt;50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 检查关闭多头仓位的条件 //--- 信号线穿越超买/超卖水平(向下-80,向上80) &nbsp;&nbsp; if(((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80)) || ((CCI(1)&lt;-80) &amp;&amp; (CCI(2)&gt;-80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. 使用MQL5 Wizard创建交易顾问 CDC_PL_CCI类并不包含在标准库类中,要使用它,需要下载acdc_pl_cci.mqh文件(见附件),并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也需要这样处理。重启MetaEditor后,就可以在MQL5 Wizard中使用它。 要创建一个交易顾问,请启动MQL5 Wizard: 图4. 创建交易顾问 接下来,指定交易顾问的名称: 图5. 交易顾问的一般属性 接下来,我们需要选择使用的交易信号模块。 图6. 交易顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。我们添加基于“暗云盖/刺透形态确认的CCI”的交易信号模块: 图7. 交易顾问的信号属性 交易信号模块已添加: 图8. 交易顾问的信号属性 你可以选择任何跟踪属性,但我们将使用“未使用跟踪止损”: 图9. 交易顾问的跟踪属性 关于资金管理属性,我们将使用“固定交易量交易”: 图10. 交易顾问的资金管理属性 按下“完成”按钮,我们将获得生成的交易顾问代码,位于Expert_ADC_PL_CCI.mq5,它将保存在terminal_data_folder\MQL5\Experts\中。 生成的交易顾问的默认输入参数: //--- 主信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 止盈水平(点数) 必须替换为: //--- 主信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止盈水平(点数) Signal_ThresholdOpen/Signal_ThresholdClose输入参数允许你指定开仓和平仓的阈值。 在交易信号类的LongCondition()和ShortCondition()方法中,我们指定了阈值的固定值: 开仓:80; 平仓:40. 由MQL5 Wizard生成的交易顾问使用来自交易信号模块的“投票”来开仓和平仓。主模块(作为容器,包含所有添加的模块)的投票结果也会被使用,但其LongCondition()和ShortCondition()方法始终返回0。 主模块的投票结果也会在“投票”平均值中使用。我们的情况是:主模块+1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen和ThresholdClose必须设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,意味着平仓仅在平仓条件为真时进行。 2.4. 历史回测结果 让我们来看一下在历史数据(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodCCI=15,MA_period=19)上的交易顾问回测。 在创建交易顾问时,我们使用了固定的交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。 图11. 基于暗云盖/刺透形态 + CCI的交易顾问测试结果 最佳的输入参数组合可以利用MetaTrader 5客户端的策略测试器找到。 生成的交易顾问代码已附在expert_adc_pl_cci.mq5文件中。

2011.02.25
使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号
MetaTrader5
使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号

大家好,今天我们来聊聊如何使用MQL5 Wizard创建基于暗云盖与刺透线的交易信号。这些信号可以帮助我们在MetaTrader 5平台上快速验证交易想法。 首先,MQL5 Wizard允许我们根据标准库中的类生成现成的专家顾问(EA)。你只需要创建自己的交易信号类,就能快速测试你的交易策略。关于如何创建交易信号模块的详细信息,请参考MQL5 Wizard:如何创建交易信号模块。 1. 暗云盖与刺透线的K线形态 1.1 暗云盖 暗云盖是一种看跌的反转K线形态,通常出现在上升趋势的末端。第一天形成一根长白K线,第二天开盘高于前一天的收盘,但最后收盘低于前一天的中点。 在CCandlePattern类中,暗云盖形态的识别是通过CheckPatternDarkCloudCover()方法实现的。 //+------------------------------------------------------------------+ //| 检查暗云盖K线形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (长白K) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (收盘在前一根K线体内) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上升趋势) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (开盘在新高) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 通过CCandlePattern类的CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)方法可以检查暗云盖K线形态的形成。 1.2 刺透线 刺透线形态在第二天的开盘价低于前一天的收盘,但收盘价却高于前一天K线体的中点。这表明市场可能在形成底部。此价位动作在K线图上比在条形图上更为明显,收盘越深入前一天K线体,反转信号的成功概率越高。 刺透线的识别通过CheckPatternPiercingLine()方法在CCandlePattern类中实现,具体代码与暗云盖类似。 2. 通过随机指标确认交易信号 在我们建立多头或空头头寸前,必须通过随机指标进行确认。%D线需要高于或低于相应的临界水平(30或70)。 对于已开头寸的平仓,依据%D指标的值可分为两种情况: %D线达到相反的临界水平(多头为80,空头为20) 反转信号未得到确认(当%D线达到以下水平:多头为20,空头为80) 通过随机指标确认的暗云盖形态 2.1 开多头/平空头头寸 刺透线的形成必须得到随机指标的确认:StochSignal(1)&lt;30(随机指标最后一根已完成K线的信号线值必须小于30)。 如果随机指标的信号线向上穿越20或80水平,空头头寸需要平仓。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开多头,结果=80) | //| 2) 市场出场(平空头,结果=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx可用于确定EA的工作模式 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 检查开多头条件 &nbsp;&nbsp; if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平空头条件 &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2 开空头/平多头头寸 暗云盖的形成必须得到随机指标的确认:StochSignal(1)&gt;70(随机指标最后一根已完成K线的信号线值必须大于70)。 如果随机指标的信号线向下穿越80或20水平,多头头寸需要平仓。 //+------------------------------------------------------------------+ //| 检查市场进出条件 | //| 1) 市场进场(开空头,结果=80) | //| 2) 市场出场(平多头,结果=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx可用于确定EA的工作模式 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 检查开空头条件 &nbsp;&nbsp; if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平多头条件 &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3 使用MQL5 Wizard创建专家顾问 CDC_PL_Stoch类不包含在标准库中,使用前需下载adc_pl_stoch.mqh文件(见附件),并保存至client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件同样需要如此。重启MetaEditor后,你便可以在MQL5 Wizard中使用它。 创建专家顾问,只需启动MQL5 Wizard: 使用MQL5 Wizard创建专家顾问 接下来,输入专家顾问的名称: 专家顾问的一般属性 然后选择要使用的交易信号模块。 专家顾问的信号属性 在我们的案例中,我们只使用一个交易信号模块。 添加“基于暗云盖/刺透线确认的信号”交易信号模块: 专家顾问的信号属性 交易信号模块已添加: 专家顾问的信号属性 你可以选择任何追踪属性,但我们将使用“不使用追踪止损”: 专家顾问的追踪属性 关于资金管理属性,我们将使用“以固定交易量交易”: 专家顾问的资金管理属性 点击“完成”按钮后,你将获得生成的专家顾问代码,代码位置在Expert_ADC_PL_Stoch.mq5,保存在terminal_data_folder\MQL5\Experts\。 生成的专家顾问的默认输入参数: //--- 主信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 开盘信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 止盈水平(点数) 需要替换为: //--- 主信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 开盘信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止盈水平(点数) Signal_ThresholdOpen及Signal_ThresholdClose输入参数可以用来指定开仓和关仓的阈值。 在交易信号类的LongCondition()和ShortCondition()方法中,阈值的固定值设定如下: 开仓:80; 平仓:40; MQL5 Wizard生成的专家顾问通过交易信号模块的“投票”来开平仓。主要模块的投票(作为容器,它包含了所有添加的模块)也被使用,但其LongCondition()和ShortCondition()方法始终返回0。 主要模块的投票结果也会在“投票”平均中使用。在我们的案例中,我们有:主要模块 + 1个交易信号模块,因此在设定阈值时,需要考虑这一点。因此,ThresholdOpen和ThresholdClose必须设定为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值被设置为0,意味着头寸的关闭将仅在关闭条件为真时进行。 2.4 历史回测结果 让我们看一下在历史数据上的专家顾问回测(EURUSD H1,测试期间:2010.01.01-2011.02.02,PeriodK=9,PeriodD=5,PeriodSlow=20,MA_period=27)。 在创建专家顾问时我们使用了固定交易量(固定手数交易,0.1),不使用追踪止损算法(不使用追踪)。 基于暗云盖与刺透线+随机指标的专家顾问测试结果 最优的输入参数可以通过MetaTrader 5客户端的策略测试器找到。 由MQL5 Wizard创建的专家顾问代码已附在expert_adc_pl_stoch.mq5。

2011.02.25
使用MQL5向导创建基于三只乌鸦/三只白兵形态的RSI交易信号专家顾问
MetaTrader5
使用MQL5向导创建基于三只乌鸦/三只白兵形态的RSI交易信号专家顾问

在交易过程中,MQL5向导可以帮助我们快速创建基于标准库类的专家顾问(EA)。这个工具不仅能节省我们的时间,还是验证交易理念的好帮手。需要做的就是创建自己的交易信号类,具体结构和示例可以参考MQL5向导:如何创建交易信号模块。基本思路是,从CExpertSignal派生出交易信号类,然后重写LongCondition()和ShortCondition()这两个虚方法,以便实现我们的交易逻辑。我们将重点关注反转蜡烛形态,特别是三只乌鸦和三只白兵形态,并使用相对强弱指数(RSI)进行确认。1. 三只乌鸦与三只白兵反转蜡烛形态1.1 三只乌鸦三只乌鸦是一个看跌蜡烛形态,用于预测当前上涨趋势的反转。该形态由三根连续的长实体蜡烛组成,每根蜡烛的收盘价都低于前一根蜡烛的收盘价,并且每次开盘都在前一根蜡烛的实体内。图 1. 三只乌鸦蜡烛形态在CCandlePattern类中的CheckPatternThreeBlackCrows方法可以识别三只乌鸦形态,代码如下://+------------------------------------------------------------------+ //| 检查三只乌鸦蜡烛形态的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3 Black Crows &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;}CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)方法用于检查三只白兵蜡烛形态的形成。2. 由RSI指标确认的交易信号要打开多头或空头头寸,必须由RSI指标确认交易信号。RSI的值必须低于40(多头)或高于60(空头)。关闭头寸的条件取决于RSI的值,主要有两种情况:如果RSI达到相反的临界水平(多头70,空头30);如果反转信号未得到确认(当RSI达到以下水平:多头30,空头70)。图 3. 三只乌鸦蜡烛形态,RSI指标确认int CML_RSI::LongCondition() - 检查打开多头头寸的条件(返回80),并关闭空头头寸(返回40);int CML_RSI::ShortCondition() - 检查打开空头头寸的条件(返回80),并关闭多头头寸(返回40)。2.1 打开多头头寸/关闭空头头寸三只白兵形态的形成必须由RSI指标确认:RSI(1)60(最新完成的K线的RSI值必须大于60)。如果RSI指标向下穿越70或30的临界水平,则必须关闭多头头寸。//+------------------------------------------------------------------+ //| 检查市场的进出条件 | //| 1) 市场进入(打开空头头寸,结果=80) | //| 2) 市场退出(关闭多头头寸,结果=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx可以用来确定专家顾问的工作模式 //--- idx=0 - 在这种情况下,EA在每个跳动时检查交易条件 //--- idx=1 - 在这种情况下,EA仅在新闻K线时检查交易条件 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 检查打开空头头寸的条件 //--- 三只乌鸦形态和RSI>60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (RSI(1)> 60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 检查关闭多头头寸的条件 //--- 信号线交叉超买/超卖水平(向下70,向下30) &nbsp;&nbsp;if(((RSI(1)< 70) &amp;&amp; (RSI(2)>&gt;70)) || ((RSI(1)< 30) &amp;&amp; (RSI(2)>&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;}2.3 使用MQL5向导创建专家顾问CML_RSI类不包含在标准库类中,使用前需下载acml_rsi.mqh文件(见附件),并将其保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals中。也需对candlepatterns.mqh文件进行相同操作。重启MetaEditor后可以在MQL5向导中使用。创建专家顾问时,启动MQL5向导:图 4. 使用MQL5向导创建专家顾问指定专家顾问的名称:图 5. 专家顾问的一般属性接下来需要选择使用的交易信号模块。图 6. 专家顾问的信号属性在我们的案例中,只使用一个交易信号模块。添加“基于三只乌鸦/三只白兵的信号”交易信号模块:图 7. 专家顾问的信号属性交易信号模块已添加:图 8. 专家顾问的信号属性可以选择任何跟随属性,但我们将使用“未使用的跟随止损”:图 9. 专家顾问的跟随属性至于资金管理属性,我们将使用“固定交易量交易”:图 10. 专家顾问的资金管理属性点击“完成”按钮后,我们将获得生成的专家顾问代码,保存在terminal_data_folder\MQL5\Experts\下的Expert_ABC_WS_RSI.mq5文件中。生成的专家顾问的默认输入参数://--- 主要信号的输入 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 打开信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 关闭信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // 盈利水平(点数)必须替换为://--- 主要信号的输入 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 打开信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 关闭信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 盈利水平(点数)Signal_ThresholdOpen和Signal_ThresholdClose输入参数允许我们为开仓和关仓指定阈值。在交易信号类的LongCondition()和ShortCondition()方法中,我们已指定阈值的固定值:开仓:80;关仓:40。MQL5向导生成的专家顾问通过来自交易信号模块的“投票”来开仓和关仓。主模块的投票(作为容器,它包含所有添加的模块)也会使用,但其LongCondition()和ShortCondition()方法始终返回0。主模块的投票结果也会用于“投票”的平均。在我们的案例中,我们有:主模块 + 1个交易信号模块,因此在设置阈值时需要考虑这一点。因此,ThresholdOpen 和 ThresholdClose 必须设置为 40 = (0 + 80)/2 和 20 = (0 + 40)/2。Signal_StopLevel 和 Signal_TakeLevel 输入参数设置为0,这意味着只有在满足关闭条件时才能关闭头寸。2.4 历史回测结果我们来看看在历史数据(EURUSD H1,测试期间:2010.01.01-2011.02.02,PeriodRSI=37,MA_period=51)上的专家顾问回测。在创建专家顾问时,我们使用了固定的交易量(固定手数交易,0.1),未使用跟随止损算法(未使用跟随)。图 11. 基于三只乌鸦/三只白兵 + RSI的专家顾问测试结果通过MetaTrader 5客户端的策略测试器可以找到最佳的输入参数。生成的专家顾问代码附在expert_abc_ws_rsi.mq5中。

2011.02.18
使用MQL5 Wizard创建基于三只黑乌鸦/三只白士兵与MFI的交易信号EA
MetaTrader5
使用MQL5 Wizard创建基于三只黑乌鸦/三只白士兵与MFI的交易信号EA

什么是MQL5 Wizard? MQL5 Wizard是一个强大的工具,可以帮助你快速创建基于标准库类的现成专家顾问(EA)。利用这个工具,你可以轻松地检查你的交易想法,只需创建自己的交易信号类即可。有关详细信息,请查看MQL5 Wizard官方文档。 交易信号类的构建 我们可以从 CExpertSignal 类派生出一个交易信号类,并重写 LongCondition() 和 ShortCondition() 这两个虚方法。 反转蜡烛图形态 我们将关注由 市场便利指数(MFI) 确认的三只黑乌鸦和三只白士兵反转蜡烛图形态。 三只黑乌鸦:这是一个看跌蜡烛图形,通常用来预测当前上涨趋势的反转。 三只白士兵:这是一个看涨蜡烛图形,用来预测当前下跌趋势的反转。 交易信号的确认 在进行交易时,必须通过MFI指标确认开启多头或空头头寸。具体来说,MFI指标的值必须低于40(适用于多头)或高于60(适用于空头)。 如何使用MQL5 Wizard创建EA 创建专家顾问时,首先启动 MQL5 Wizard,接着设置EA的名称和交易信号模块。可以选择基于三只黑乌鸦/三只白士兵与MFI的信号模块。 回测结果 最后,使用历史数据进行回测,比如EURUSD H1,测试周期为2010.01.01-2011.03.16,以验证EA的表现。 三只黑乌鸦与三只白士兵的EA测试结果 通过使用Strategy Tester工具,你可以找到最佳的输入参数设置,并优化你的交易策略。现在就动手试试吧!

2011.02.18
利用MQL5 Wizard创建基于三只乌鸦/三只白兵与CCI的交易信号
MetaTrader5
利用MQL5 Wizard创建基于三只乌鸦/三只白兵与CCI的交易信号

大家好!今天我们来聊聊如何利用MQL5 Wizard工具,创建基于三只乌鸦和三只白兵模式的交易信号策略。通过这种方式,我们可以快速验证自己的交易想法,只需创建一个自定义的交易信号类即可。 首先,交易信号的类需要继承自CExpertSignal,接着我们需要重写LongCondition()和ShortCondition()这两个虚方法,来实现自己的交易逻辑。 在交易策略方面,有一本书叫做《最佳交易者策略》,里面涵盖了许多交易策略,我们将重点关注由CCI指标确认的反转蜡烛图形态。 1. 三只乌鸦和三只白兵反转蜡烛图形 1.1 三只乌鸦 三只乌鸦是一个看跌的蜡烛图形,通常用来预测当前上涨趋势的反转。这个模式由三根连续的长实体蜡烛构成,每根蜡烛的收盘价都低于前一天的收盘价,并且每次开盘价均在前一根蜡烛的实体内部。 图 1. 三只乌鸦蜡烛图模式 在CCandlePattern类中,识别三只乌鸦模式的代码如下: //+------------------------------------------------------------------+ //| 检查三只乌鸦蜡烛图模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3 Black Crows &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&lt;MidPoint(3))&nbsp;&nbsp; &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&lt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 1.2 三只白兵 三只白兵是一个看涨的蜡烛图形,通常用来预测当前下跌趋势的反转。这个模式由三根连续的长实体蜡烛构成,每根蜡烛的收盘价都高于前一天的收盘价,并且每次开盘价均在前一根蜡烛的实体内部。 图 2. 三只白兵蜡烛图模式 识别三只白兵模式的方法如下: //+------------------------------------------------------------------+ //| 检查三只白兵蜡烛图模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() &nbsp;&nbsp;{ &nbsp;&nbsp; if((Close(3)-Open(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&gt;MidPoint(3))&nbsp;&nbsp; &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&gt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 2. 由CCI指标确认的交易信号 开多单或空单的交易信号必须由CCI指标确认。CCI的值必须高于或低于关键水平(多单为-50,空单为50)。 关闭已开仓位的条件取决于CCI的值,主要有两种情况: 如果CCI线达到了相反的关键水平(多单为80,空单为-80) 如果反向信号没有得到确认(当CCI达到以下水平:多单为-80,空单为80) 图 3. 三只乌鸦模式,CCI指标确认 2.1 开多单/平空单 三只乌鸦模式必须由CCI指标确认:CCI(1)&lt;-50(最后一根完成的蜡烛的CCI值必须小于-50)。 当CCI指标向上穿过关键水平-80或者向下穿过关键水平80时,必须平掉空单。 //+------------------------------------------------------------------+ //| 检查市场进入和退出条件 | //+------------------------------------------------------------------+ int CBC_WS_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 检查开多单条件 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平空单条件 &nbsp;&nbsp; if(((CCI(1)&gt;-80) &amp;&amp; (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2 开空单/平多单 三只白兵模式必须由CCI指标确认:CCI(1)&gt;50(最后一根完成的蜡烛的CCI值必须大于50)。 当CCI指标向下穿过-80或80水平时,必须平掉多单。 //+------------------------------------------------------------------+ //| 检查市场进入和退出条件 | //+------------------------------------------------------------------+ int CBC_WS_CCI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 检查开空单条件 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (CCI(1)&gt;50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平多单条件 &nbsp;&nbsp; if(((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80)) || ((CCI(1)&lt;-80) &amp;&amp; (CCI(2)&gt;-80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3 使用MQL5 Wizard创建交易顾问 要使用CBC_WS_CCI类,我们需要下载acbc_ws_cci.mqh文件,并将其保存到terminal_data_folder\MQL5\Include\Expert\Signal\MySignals。同样需要处理candlepatterns.mqh文件。重启MetaEditor后即可使用。 接下来,启动MQL5 Wizard以创建交易顾问: 图 4. 创建交易顾问 接下来指定交易顾问的名称: 图 5. 交易顾问的一般属性 然后选择使用的交易信号模块。 图 6. 交易顾问的信号属性 在我们的案例中,只使用一个交易信号模块。 添加基于“三只乌鸦/三只白兵并由CCI确认”的交易信号模块: 图 7. 交易顾问的信号属性 交易信号模块已添加: 图 8. 交易顾问的信号属性 您可以选择任何追踪属性,但我们将使用“不使用追踪止损”: 图 9. 交易顾问的止损属性 关于资金管理属性,我们将使用“固定交易量交易”: 图 10. 交易顾问的资金管理属性 点击“完成”按钮后,您将获得生成的交易顾问代码,位于Expert_ABC_WS_CCI.mq5,将保存在terminal_data_folder\MQL5\Experts\中。 生成的交易顾问的默认输入参数: //--- 主要信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 止盈水平(点数) 需要替换为: //--- 主要信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 止盈水平(点数) Signal_ThresholdOpen和Signal_ThresholdClose输入参数允许您指定开仓和平仓的阈值。 在交易信号类的LongCondition()和ShortCondition()方法中,我们指定了固定的阈值: 开仓:80; 平仓:40。 使用MQL5 Wizard生成的交易顾问通过交易信号模块的“投票”来开仓和平仓。主模块的“投票”也会被使用,但它的LongCondition()和ShortCondition()方法始终返回0。主模块的投票结果也会用于“投票”平均值。在我们的案例中,主模块加上1个交易信号模块,因此在设置阈值时需要考虑这一点。因为这个因素,ThresholdOpen和ThresholdClose应设置为40=(0+80)/2和20=(0+40)/2。 Signal_StopLevel和Signal_TakeLevel输入参数的值设置为0,意味着只有在平仓条件为真时才会关闭仓位。 2.4 历史回测结果 让我们来看一下在历史数据上对交易顾问的回测(EURUSD H1,测试周期:2010.01.01-2011.03.16,PeriodCCI=37,MA_period=13)。 在创建交易顾问时,我们使用了固定的交易量(固定交易手数,0.1),未使用跟踪止损算法(未使用跟踪)。 图 11. 基于三只乌鸦/三只白兵与CCI的交易顾问测试结果 您可以使用MetaTrader 5客户端的策略测试器找到最佳输入参数。 由MQL5 Wizard创建的交易顾问代码附在expert_abc_ws_cci.mq5中。

2011.02.18
利用MQL5 Wizard创建基于3黑鸦/3白兵的交易信号与随机指标
MetaTrader5
利用MQL5 Wizard创建基于3黑鸦/3白兵的交易信号与随机指标

大家好,今天我们来聊聊如何运用 MQL5 Wizard 创建专业的交易顾问(EA)。这个工具可以快速生成基于 标准库 类的交易策略,帮助我们验证交易想法。只需构建自己的交易信号类,具体结构和示例可以参考 MQL5 Wizard:如何创建交易信号模块。简单来说,交易信号类是基于 CExpertSignal 进行扩展的。接下来,我们需要重写 LongCondition() 和 ShortCondition() 这两个虚拟方法,以实现自己的逻辑。在俄罗斯有一本书 《最佳交易者的策略》,书中讨论了许多交易策略。今天,我们将重点关注以 随机指标 确认的反转蜡烛图形态,包括 3黑鸦 和 3白兵。最佳实践是创建一个独立的类,继承自 CExpertSignal,用于检查蜡烛图形态的形成。确认由蜡烛图形态生成的交易信号时,只需编写一个类,继承自 CCandlePattern,并在其中添加必要的功能(例如,通过震荡指标确认)。1. 反转蜡烛图形态:3黑鸦与3白兵1.1. 3黑鸦这是一个看跌蜡烛图形态,用于预测当前上涨趋势的反转。该形态由三根连续的长实体蜡烛组成,每根蜡烛收盘价均低于前一日,并且每个交易日的开盘价都在前一根蜡烛体内。图1. 3黑鸦蜡烛图形态在 CCandlePattern 类中,识别 "3黑鸦" 形态的方法是 CheckPatternThreeBlackCrows,具体实现如下://+------------------------------------------------------------------+ //| 检查 "3黑鸦"蜡烛图形态 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3黑鸦 &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&lt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&lt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;}通过 CCandlePattern 类中的 CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 方法来检查 "3黑鸦" 蜡烛图形态的形成。1.2. 3白兵蜡烛图形态这是一个看涨蜡烛图形态,用于预测当前下跌趋势的反转。该形态由三根连续的长实体蜡烛组成,每根蜡烛收盘价均高于前一日,并且每个交易日的开盘价都在前一根蜡烛体内。只要第二天的蜡烛开盘价在第一天的范围上半部分,且第二天以接近最高点的价格收盘,形成非常小的上影线或没有上影线,则该形态有效。第三天重复相同的模式。图2. 3白兵蜡烛图形态识别 "3白兵" 形态的方法如下://+------------------------------------------------------------------+ //| 检查 "3白兵"蜡烛图形态 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- 3白兵 &nbsp;&nbsp; if((Close(3)-Open(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&gt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&gt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;}通过 CCandlePattern 类中的 CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 方法来检查 "3白兵" 蜡烛图形态的形成。2. 随机指标确认的交易信号开多单或空单的交易信号必须由 随机指标 确认。%D线必须高于或低于相应的临界水平(30或70)。开仓后平仓的条件取决于 %D 指标的值,平仓可以在以下两种情况下进行:如果 %D 线达到相反的临界水平(多单为80,空单为20)如果反向信号未得到确认(当 %D 线达到以下水平:多单为20,空单为80)图3. 随机指标确认的3白兵形态检查进出场条件的实现分别在两个方法中:int CBC_WS_Stoch::LongCondition() - 检查开多单条件(返回80)和空单平仓条件(返回40);int CBC_WS_Stoch::ShortCondition() - 检查开空单条件(返回80)和多单平仓条件(返回40)。2.1. 开多单/平空单"三白兵" 形态的形成必须通过 随机指标 确认:StochSignal(1)&lt;30(随机指标信号线的值必须小于30)。如果随机指标信号线向上穿过20或80水平,必须平掉空单。//+------------------------------------------------------------------+ //| 检查进出场条件 | //| 1) 开多单条件(返回=80) | //| 2) 平空单条件(返回=40) | //+------------------------------------------------------------------+ int CBC_WS_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx 用于确定EA的工作模式 &nbsp;&nbsp; //--- idx=0 - EA在每个tick时检查交易条件 &nbsp;&nbsp; //--- idx=1 - EA只在新闻条时检查交易条件 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 检查开多单条件 &nbsp;&nbsp; //--- "三白兵" 形态和信号线&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平空单条件 &nbsp;&nbsp; //--- 信号线穿越超买/超卖水平(向下20,向上80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;}2.2. 开空单/平多单"三黑鸦" 形态的形成必须通过 随机指标 确认:StochSignal(1)&gt;70(随机指标信号线的值必须大于70)。如果随机指标信号线向下穿越80或20水平,必须平掉多单。//+------------------------------------------------------------------+ //| 检查进出场条件 | //| 1) 开空单条件(返回=80) | //| 2) 平多单条件(返回=40) | //+------------------------------------------------------------------+ int CBC_WS_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx 用于确定EA的工作模式 &nbsp;&nbsp; //--- idx=0 - EA在每个tick时检查交易条件 &nbsp;&nbsp; //--- idx=1 - EA只在新闻条时检查交易条件 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 检查开空单条件 &nbsp;&nbsp; //--- "三黑鸦" 形态和信号线&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 检查平多单条件 &nbsp;&nbsp; //--- 信号线穿越超买/超卖水平(向下80,向上20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 返回结果 &nbsp;&nbsp; return(result); &nbsp;&nbsp;}2.3. 使用MQL5 Wizard创建交易顾问CBC_WS_Stoch 类不包含在标准库类中,使用前需下载 acbc_ws_stoch.mqh 文件(请参见附件)并保存在 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 中。对 candlepatterns.mqh 文件也需做同样处理。重启 MetaEditor 后,您可以在 MQL5 Wizard 中使用这些文件。要创建交易顾问,请启动 MQL5 Wizard:图4. 使用MQL5 Wizard创建交易顾问接下来,填写交易顾问的名称:图5. 交易顾问的一般属性然后选择所用的交易信号模块。图6. 交易顾问的信号属性在我们的案例中,只使用一个交易信号模块。添加“基于3黑鸦/3白兵的交易信号,经过随机指标确认”模块:图7. 交易顾问的信号属性交易信号模块已添加:图8. 交易顾问的信号属性您可以选择任何追踪属性,但我们会选择“不使用追踪止损”:图9. 交易顾问的追踪属性关于资金管理属性,我们将选择“使用固定交易量”:图10. 交易顾问的资金管理属性最后点击“完成”按钮,我们就能得到生成的交易顾问代码,位于 Expert_ABC_WS_Stoch.mq5,保存在 terminal_data_folder\MQL5\Experts\ 中。生成的交易顾问的默认输入参数://--- 主要信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // 止盈水平(点数)应更改为://--- 主要信号的输入参数 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 开仓信号阈值 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 平仓信号阈值 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 执行交易的价格水平 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 止损水平(点数) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 止盈水平(点数)Signal_ThresholdOpen/Signal_ThresholdClose 输入参数允许指定开仓和平仓的阈值。在交易信号类的 LongCondition() 和 ShortCondition() 方法代码中,我们指定了固定的阈值:开仓:80;平仓:40。MQL5 Wizard 生成的交易顾问通过各个交易信号模块的“投票”来开平仓。主模块的投票(作为容器,包含所有添加的模块)也会被使用,但它的 LongCondition() 和 ShortCondition() 方法总是返回0。主模块的投票结果也会用于“投票”平均。在我们的案例中:主模块 + 1 个交易信号模块,因此在设置阈值时需考虑这一点。因此,ThresholdOpen 和 ThresholdClose 应设置为 40=(0+80)/2 和 20=(0+40)/2。Signal_StopLevel 和 Signal_TakeLevel 的输入参数值设置为0,这意味着平仓只会在平仓条件为真时进行。2.4. 历史回测结果让我们来看一下在历史数据上(EURUSD H1,测试周期:2010.01.01-2011.02.02,PeriodK=47,PeriodD=9,PeriodSlow=13,MA_period=5)对交易顾问的回测结果。在创建交易顾问时,我们使用了固定交易量(固定交易手数,0.1),不使用追踪止损算法(不使用追踪止损)。图11. 基于3黑鸦/3白兵+随机指标的交易顾问测试结果您可以使用 MetaTrader 5 的策略测试器 找到最佳的输入参数组合。由 MQL5 Wizard 创建的交易顾问的代码已附在 expert_abc_ws_stoch.mq5 文件中。

2011.02.16
首页 上一页 56 57 58 59 60 61 62 63 64 下一页 末页