MQL5 向导 - 基于Morning(启明星)/Evening Stars(黄昏之星)和 Stochastic 的交易信号。 - MetaTrader 5EA
- 显示:
- 4344
- 等级:
- 已发布:
- 2013.10.22 09:37
- 已更新:
- 2016.11.22 07:33
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
MQL5向导允许基于与客户终端一起提供的 标准库 类快速创建EA交易。 (详细信息参考 使用MQL5 向导快速创建EA交易)。它允许快速检测你的交易想法,你所要做的只是创建你自己的交易信号类。这个类的结构和例子可以在MQL5向导:如何创建交易信号的一个模块一文中找到。
总的思想如下:交易信号的类继承CExpertSignal,下一步,需要使用你自己的方法覆盖 LongCondition()和 ShortCondition() 这两个虚拟方法。
有一本书叫"最佳交易者的策略", 其中讨论了许多交易策略,我们将集中在由 Stochastic, CCI, MFI和RSI这些震荡指标确认的反转K线图模式。
最好的方式是创建继承自CExpertSignal的单独类来检查K线图模式的形成。为确认由K线图模式产生的交易信号,编写继承于CCandlePattern的类并在其中增加必要的特性(比如:由oscillators确认)就可以了。
这里我们将讨论基于 "启明星/黄昏之星" (Morning Doji Star/Evening Doji Star) K线图反转模式并由Stochastic指标确认的信号。. 交易信号模块基于 CCandlePattern 类,它是使用K线图模式创建交易信号的简单实例。
1. K线图反转模式"启明星" 和 "黄昏之星"
1.1. 启明星
这种模式意味跌势的逆转,它由三根蜡烛组成(图1)。大阴线之后是一根实体较小的K线 (颜色不重要) , 它位于大阴线的实体之外。一根较小实体的K线意味着涨和跌的力量均等,市场做好了改变趋势的准备。
该模式的第三根K线是阳线, 它的实体不和第二根K线的实体重叠,并且收盘价位于第一根K线(大阴线)的实体之内。该模型得到的K线也绘制在图1。
如果第二根K线类似十字星K线,模型被命名为“十字启明星”。
图1. "启明星" 和 "十字启明星" K线图模式
"启明星"模式的识别实现在CCandlePattern类的CheckPatternMorningStar() 和 CheckPatternMorningDoji()方法:
//+------------------------------------------------------------------+ //| 检查“启明星”模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- 启明星 if((Open(3)-Close(3)>AvgBody(1)) && // 阴线,它的实体比通常K线实体长 (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // 第二根K线实体较小 (比通常K线实体的一半还小) (Close(2)<Close(3)) && // 第二根K线的收盘低于第一根K线的收盘 (Open(2)<Open(3)) && // 第二根K线的开盘低于第一根K线的开盘 (Close(1)>MidOpenClose(3))) // 最后结束K线的收盘高于第一根K线的中心 return(true); //--- return(false); } //+------------------------------------------------------------------+ //| 检查“十字启明星”模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- 十字启明星 if((Open(3)-Close(3)>AvgBody(1)) && // 阴线,它的实体长于通常K线实体 (AvgBody(2)<AvgBody(1)*0.1) && // 第二根K线实体很小 (十字星) (Close(2)<Close(3)) && // 第二根K线的收盘低于第一根K线的收盘 (Open(2)<Open(3)) && // 第二根K线的开盘低于第一根K线的开盘 (Open(1)>Close(2)) && // 最后结束的K线跳空高开 (Close(1)>Close(2))) // 最后结束K线的收盘高于第二根K线的收盘 return(true); //--- return(false); }
CCandlePattern类的 CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) 和CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI)方法被用来检测"启明星" 和 "十字启明星" K线图模式的形成。
1.2. 黄昏之星
这种模式意味涨势的逆转,它由三根蜡烛组成(图2)。大阳线之后是一根实体较小的K线 (颜色不重要) , 它位于大阳线的实体之外。一根较小实体的K线意味着涨和跌的力量均等,市场做好了改变趋势的准备。
该模式的第三根K线是阴线, 它的实体不和第二根K线的实体重叠,并且收盘价位于第一根K线(大阳线)的实体之内。该模型得到的K线也绘制在图2。
如果第二根K线类似十字星K线,模型被命名为“十字黄昏星”。.
图2. "黄昏之星" 和 "十字黄昏星" K线图模式
以下是识别"黄昏之星" 和 "十字黄昏星" 模式的方法:
//+------------------------------------------------------------------+ //| 检查"黄昏 之星" 模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- 黄昏之星 if((Close(3)-Open(3)>AvgBody(1)) && // 阳线,它的实体长于通常K线实体 (MathAbs(Close(2)-Open(2))<AvgBody(1)*0.5) && // 第二根K线实体较小 (比通常K线实体的一半还小) (Close(2)>Close(3)) && // 第二根K线的收盘高于第一根K线的收盘 (Open(2)>Open(3)) && // 第二根K线的开盘高于第一根K线的开盘 (Close(1)<MidOpenClose(3))) // 最后结束K线的收盘低于第一根K线的中心 return(true); //--- return(false); } //+------------------------------------------------------------------+ //| 检查 "十字黄昏星" 模式的形成 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Evening Doji Star if((Close(3)-Open(3)>AvgBody(1)) && // 阳线,它的实体长于通常K线实体 (AvgBody(2)<AvgBody(1)*0.1) && // 第二根K线实体很小(十字星) (Close(2)>Close(3)) && // 第二根K线的收盘高于第一根K线的收盘 (Open(2)>Open(3)) && // 第二根K线的开盘高于第一根K线的开盘 (Open(1)<Close(2)) && // 最后结束的K线跳空低开 (Close(1)<Close(2))) // 最后结束K线的收盘低于第二根K线的收盘 return(true); //--- return(false); }
CCandlePattern类的 CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) 和CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI)方法被用来检测"黄昏之星" 和 "十字黄昏星" K线图模式的形成。
2. 由Stochastic指标确认交易信号
建立多头或空头头寸的交易信号必须由Stochastic振荡器确认。信号%D线必须大于/低于相应的临界水平(30或70)。
平掉持仓头寸取决于%D指标的值。它有两种情况:
- 如果%D达到相反的临界水平(多头头寸为80而空头头寸为20)
- 如果反转信号没有被确认(%D线达到以下水平:多头头寸为20而空头头寸为80)
图3. 由Stochastic指标确认的"黄昏之星" 模式
- int CH_HM_Stoch::LongCondition() - 检查建立多头头寸 (返回80) 和平掉空头头寸(返回40)的条件;
- int CH_HM_Stoch::ShortCondition() - 检查建立空头头寸 (返回80) 和平掉多头头寸(返回40)的条件。
2.1. 建立多头头寸/平掉空头头寸
“启明星“模式的形成必须由 Stochastic 指标确认: StochSignal(1)<30 (最后结束K线的Stochastic指标信号线的值必须小于30)。
如果Stochastic 指标的信号线向上穿越20或80水平,空头头寸必须被平仓.
//+------------------------------------------------------------------+ //| 检测进入和退出市场的条件 | //| 1) 市场进入 (建立多头头寸, result=80) | //| 2) 市场退出 (平掉空头头寸, result=40) | //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() { int result=0; //--- idx可被用来决定EA交易工作模式 //--- idx=0 - 此种情况EA在每个即时价位检查交易条件 //--- idx=1 - 此种情况EA 只在新建柱线时检查交易条件 int idx =StartIndex(); //--- 检查建立多头头寸的条件 //--- 启明星模式形成并且信号线小于30 if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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. 建立空头尺寸/平掉多头尺寸
“黄昏之星“模式的形成必须由 Stochastic 指标确认: StochSignal(1)>70 (最后结束K线的Stochastic指标信号线的值必须大于70)。
-
如果Stochastic 指标的信号线向下穿越80或20水平,多头头寸必须被平仓。
//+------------------------------------------------------------------+ //| 检测进入和退出市场的条件 | //| 1) 市场进入 (建立空头头寸, result=80) | //| 2) 市场退出 (平掉多头头寸, result=40) | //+------------------------------------------------------------------+ int CMS_ES_Stoch::ShortCondition() { int result=0; //--- idx可被用来决定EA交易工作模式 //--- idx=0 -此种情况EA在每个即时价位检查交易条件 //--- idx=1 - 此种情况EA 只在新建柱线时检查交易条件 int idx =StartIndex(); //--- 检查建立空头头寸的条件 //---黄昏之星模式形成并且信号线大于70 if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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向导创造EA 交易
CMS_ES_Stoch类不包括在标准库类中, 为使用它, 必需下载acms_es_stoch.mqh文件(见附件)并将它保存到client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals。candlepatterns.mqh文件也一样。你可以在重启MetaEditor之后在MQL5向导中使用它。
为创建EA交易请启动 MQL5向导:
Fig. 4. 使用MQL5向导创造EA 交易
让我们指定EA交易的名称:
Fig. 5. EA交易的通用属性
在这之后我们需要选择将被使用的交易信号模块。
Fig. 6. EA交易的信号属性
在我们的例子中,我们只使用一个交易信号模块。
增加交易信号模块 "Signals based on Morning/Evening Stars by Stochastic" :
Fig. 7. EA交易的信号属性
添加的交易信号模块:
Fig. 8. EA交易的信号属性
你可以选择任意的追踪属性, 但我们将使用 "Trailing Stop not used(不使用移动止损)":
Fig. 9. EA交易的追踪属性
关于资金管理属性,我们将使用“Trading with fixed trade volume(以固定交易手数交易)”:
Fig. 10. EA交易的资金管理属性
通过按”Finish(完成)“按钮,我们将得到生成的EA交易的代码,代码放置在Expert_AMS_ES_Stoch.mq5, 它将被保存到 terminal_data_folder\MQL5\Experts\.
所生成EA交易的默认输入参数:
//--- inputs for main signal 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; // 止盈水平 (点数)
必须被替换为:
//--- inputs for main signal 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向导创建的EA交易使用来自交易信号模块的“投票”建立和平掉头寸。主模块(作为容器,它由所有增加的模块组成)的投票也被使用, 但是它的LongCondition()和ShortCondition()方法总是返回0。
主模块的投票结果也被用在“投票”的均算中。在我们的例子中我们有: 主模块 + 1个交易信号模块, 所以我们需要在设置阀值时考虑这个事实。因为这个事实ThresholdOpen和ThresholdClose必须被设置为40=(0+80)/2和20=(0+40)/2。
Signal_StopLevel和Signal_TakeLevel输入参数的值被设置为0, 它意味着只有关闭条件为true时才平仓。
2.4. 历史回测结果
让我们来考察EA交易在历史数据(EURUSD H1, 自定义时段: 2000.01.01-2011.03.16, PeriodK=12,PeriodD=8, PeriodSlow=29, MA_period=4)上的回溯测试。
在创建EA 交易时,我们使用了固定交易量 (固定交易手数, 0.1),未使用移动止损算法 (不使用移动)。
Fig. 11. 基于启明星/黄昏之星和Stochastic的EA交易的测试结果
最优输入参数集合可使用MetaTrader 5客户端的 Strategy Tester找到。
由MQL5向导创建的EA交易代码附加在expert_ams_es_stoch.mq5.
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/301
本节讨论基于 "乌云盖顶(Dark Cloud Cover)/刺穿线(PiercingLine) " K线图模式并由Relative Strength Index (RSI) 指标确认的交易信号。基于该策略的EA交易的代码可以被MQL5向导自动生成
MQL5 向导 - 基于 K 线形态的交易信号 + StochasticK 线形态交易信号,由 Stochastic 指标确认
本节讨论基于 "Bullish Engulfing(牛市吞烛)/Bearish Engulfing(熊市吞烛)" K线图模式并由Stochastic指标确认的交易信号。基于该策略的EA交易的代码可以被MQL5向导自动生成
MQL5 向导 - 基于Bullish Engulfing(牛市吞烛)/Bearish Engulfing(熊市吞烛)和 CCI 的交易信号。本节讨论基于 "Bullish Engulfing(牛市吞烛)/Bearish Engulfing(熊市吞烛)" K线图模式并由Commodity Channel Index (CCI)指标确认的交易信号。基于该策略的EA交易的代码可以被MQL5向导自动生成