English Русский Deutsch 日本語
preview
您应该了解的MQL5向导技巧(第七十一部分):使用MACD与OBV形态

您应该了解的MQL5向导技巧(第七十一部分):使用MACD与OBV形态

MetaTrader 5交易系统 |
17 0
Stephen Njuki
Stephen Njuki

引言

将趋势跟踪类震荡指标MACD与OBV搭配使用。二者互为补充:一个追踪趋势,另一个衡量成交量。我们以英镑兑日元(GBPJPY)交易品种为例,将2023年作为训练周期,2024年作为前向步进测试窗口期。在2023年的“训练” 与参数优化过程中,除了寻找最优的形态信号权重外,还对入场价格间隙与止盈目标进行了优化。整个测试过程不设置止损,仅依靠自定义信号类中的平仓阈值权重,来平掉不再符合开仓逻辑的持仓。

下方展示的测试报告大多显示盈利,但这并不代表前向步进一定成功,因为测试区间同时包含了EA的参数优化周期。这是本系列一贯沿用的测试方式,并将继续沿用。因此,读者在解读测试结果时需注意这一点,同时也要注意测试周期非常短。 

我们依次测试10种信号形态,规则如下:

形态索引从0到9,便于EA计算并专属调用对应的映射值。例如,如果形态索引为1,则参数PatternsUsed需设置为2的1次方,即2;如果索引为4,则为2的4次方,即16,以此类推。由于总共有10种形态,因此该参数的最大有效值为1023。0到1023之间非2的纯指数的数值,代表10种形态中的多种形态组合。


MACD指标

MACD用于计算两条指数移动平均线之间的差值,主要用于显示趋势方向,也可认为其同时跟踪动量。MACD线(又称柱形图)是该指标的核心。指标附带的额外缓冲,即信号线,是对MACD线的平滑处理,用于识别指标拐点,进而产生买卖信号。柱形图为正值代表多头趋势,负值则代表空头趋势。 

该指标的常用用法包括:柱形图与信号线的交叉(重要交易信号);柱形图穿越零轴,常预示趋势反转;价格趋势与柱形图趋势之间的顶底背离。常用默认参数:快速EMA周期为12;慢速EMA周期为26;信号线平滑周期为9。本次测试将沿用这些默认参数。不过读者可根据需要自行调整,尤其是当MACD与其他采用不同关键周期的指标搭配使用时。其公式如下:

如果,


接下来,

其中:

  • t为当前时间周期或 K 线索引
  • EMA12(t)为收盘价的12周期指数移动平均线
  • EMA26(t)为收盘价的26周期指数移动平均线
  • MACD(t)为快速EMA与慢速EMA的差值
  • EMA9(MACD(t))为MACD值的9周期指数移动平均线,即信号线


OBV能量潮指标

该震荡指标的核心作用,是通过累计成交量衡量市场买卖力量。其核心逻辑为:如果收盘价上涨,视为多头力量增强,对应成交量计入OBV;如果收盘价下跌,对应成交量从OBV中扣除;如果价格持平则指标值不变。因此,其解释十分直观:当OBV上行时,确认上涨趋势;当OBV下行时,确认下跌趋势。同时,OBV与价格出现背离,往往预示着趋势可能反转。

OBV的本质是累计值,通常从0开始,随时间累加成交量变化。对外汇交易者而言,由于外汇市场是去中心化的,计算时使用的是tick量,而非真实的成交量。该指标主要用途包括:趋势确认、背离识别、结合成交量优化开仓与平仓点位。其计算公式如下:

其中:

  • OBV(t)为t时刻的能量潮指标值
  • OBV(t−1)为上一周期的能量潮指标值
  • Vt为t时刻的成交量
  • Ct为t时刻的收盘价

指标定义完成后,我们来看它们的信号形态组合。


MACD交叉与趋势性OBV

我们的第一种形态使用了一种将MACD交叉与OBV趋势方向相结合的策略。MACD交叉是关键信号,用于捕捉潜在的趋势反转。OBV的趋势方向则从成交量角度提供确认,起到过滤虚假MACD信号的作用。MACD呈U形反转,其柱状图收于信号线上方,且在前一根K线时MACD线位于信号线下方,即可确认看涨信号。同时,OBV处于上升趋势,表明多头成交量在累积,进一步强化做多逻辑。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD_UP(X()) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD_DN(X()) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

空头信号逻辑同样基于交叉形态,即MACD收于信号线下方,且在前一根K线时位于其上方,形成看跌交叉。与此同时,OBV呈下降趋势,说明成交量分布偏空,进一步强化看空逻辑。该形态旨在捕捉趋势/突破行情中,得到动量与成交量双重确认的交易机会。借助成交量的过滤作用,它也能在震荡/横盘市场中有效剔除MACD产生的噪音。

不过也需要注意一些极端情况:在低成交量时段,OBV可能给出虚假方向;而MACD在剧烈反转行情中会存在滞后性,可能导致入场点位偏晚。仅使用这一形态(将PatternsUsed参数设置为1),以2023年为优化周期,在2023.01.01至2025.01.01区间进行回测,得到如下报告。该形态未通过前向步进。

r0

以下是形态0的使用建议汇总:

主题

建议

时间周期

最适合在1小时至4小时周期使用。应避免在分钟级周期使用,除非配合更长的周期指标做过滤。

指标设置

优先使用MACD默认参数(12, 26, 9)。如果有真实成交量数据,OBV建议优先使用真实成交量。

入场规则

通常建议在K线收盘时入场,尽量避免中途入场,尤其是在小周期上。

止损

可放置在近期波段高/低点附近。也可以用动态ATR来设置止损幅度。

止盈

可按1:1.5的风险收益比设置移动止盈,锁定利润。

确认

可搭配RSI或MA斜率等第三方指标做二次确认。

新闻过滤

尽量避免在高影响力数据公布前入场。

回测

该形态高度依赖成交量结构,必须进行充分回测。

除上述使用建议外,还可以对该形态做部分优化:可以增加背离过滤,尽管后续会考虑单独探讨这种专门的形态;可以加入冷却期/防抖周期,避免连续重复信号,比如每x根K线只允许一次信号;另外,还可以用斜率或变化率判断,确保信号出现时MACD和/或OBV没有走平。


MACD零轴交叉与OBV突破

下一个形态,索引为1,用于识别MACD穿越零轴的信号,并通过OBV捕捉极端成交量压力进行过滤。该组合用于捕捉早期趋势反转,且反转得到多头或空头成交量的支撑。多头信号:MACD柱形从下向上穿越零轴并收于零轴上方,也就是常说的零轴上穿,柱形由负转正,标志着动量发生转向。

需要注意的是,MACD会频繁产生这类信号,因此必须配合OBV进行过滤:要求OBV创最近12个周期(MACD快速均线周期)以来的新高。也就是说,当前OBV必须大于或等于其12周期内的最大值。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_1(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_obv.Refresh(-1);
   if(T == POSITION_TYPE_BUY && MACD(X()) > 0.0 && MACD(X() + 1) < 0.0 && OBV(X()) >= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < 0.0 && MACD(X() + 1) > 0.0 && OBV(X()) <= m_obv.MinValue(0, X(), 12, _index))
   {  return(true);
   }
   return(false);
}

同样地,空头信号的条件:MACD柱形从上向下穿越零轴并收于其下方,动量由正转负,同时OBV处于筑底状态。当前OBV需处于或低于其12周期低点,表明卖方成交量显著增强。该形态的策略逻辑要点:MACD零轴交叉比信号线交叉信号更强,因为它代表整体趋势方向的彻底转变;OBV区间过滤不仅确认了成交量方向,还能确保成交量足够高;旨在捕捉新趋势的早期入场点,适用于突破或波段行情。该形态的测试报告如下所示。该形态未通过前向步进。

r1

以下是形态1的使用建议汇总。

方面

建议

时间周期

该形态最适用于1小时、4小时及日线周期。更低的周期极易出现反复震荡与大量虚假信号。

市场环境

适用于趋势反转阶段或趋势形成初期。不适合窄幅震荡行情。

止损策略

多单可依托近期波段低点设置止损,空单依托近期波段高点,有助于实现动态止损。

持仓规模

仓位应分步、渐进式建仓,因为初期信号往往更偏临时性,而非确定性信号。

确认

配合RSI 或MA斜率可对该形态做补充确认,实现更精准入场。

避免过拟合

作为OBV周期的12期应保持较短,以维持指标的灵敏性。

新闻过滤

高影响力数据会扭曲成交量读数,因此重大数据公布前后至少30分钟内应避免开仓。

回测周期

鉴于该形态对成交量敏感,在不同波动率环境下广泛测试十分重要。


MACD背离与OBV上升趋势

第三种形态通过MACD方向与OBV量能确认价格反转信号,捕捉小幅多空反转。它关注的是相对位置变化,而非形态1中的绝对数值水平。多头信号的条件:价格创更低低点(形成扫流动性或假破位),同时MACD柱形抬升,且OBV成交量持续升高。三者共振,构成看涨背离形态。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()) < Low(X() + 1) && MACD(X()) > MACD(X() + 1) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()) > High(X() + 1) && MACD(X()) < MACD(X() + 1) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

同理,空头信号的条件:价格创出更高的高点,而MACD在当前的看跌趋势下从上涨转为下跌,同时OBV同步走低。这同样构成了看跌背离:价格冲高,但动量与成交量均缺乏支撑。从中可以总结几点交易思路:这是一种短期反转衰竭形态,仅依靠成交量与动量做确认;在趋势停顿区域效果较好,例如艾略特第三浪相关的趋势停顿区,或重要支撑/阻力位附近;非常适合做逆势交易或均值回归策略。对该形态的测试同样未取得正向的前向步进。相关报告如下:

r2

以下是该形态的使用建议汇总。

主题

建议

时间周期

适合短期反转交易的周期为30分钟、1小时,波段交易可使用日线周期。

信号环境

该形态在近期高低点附近或关键支撑阻力位使用效果最优。 

确认K线

等待出现反转K线形态(如锤子线、流星线)可提高信号精准度。

止损策略

多单止损放在近期低点下方,空单止损放在近期高点上方。

盈利目标

可根据入场位置,设定在通道中位或近期结构位。

趋势中慎用

该信号属于逆势信号,应避免在强势K线行情中反向交易。

与RSI相结合

可叠加RSI背离优化入场,增强信号的可靠性。

回测波动性资产

该形态较适合大宗商品及部分商品类相关指数。


MACD柱形反转与OBV支撑

第四种信号形态,用于捕捉MACD动量短暂修正后的短期趋势延续。核心是识别动量回调,并由OBV方向进行确认。多头趋势延续信号的条件:MACD柱状图增加并超过先前值,先前值也小于其之前的MACD值,同时OBV处于上升趋势。该看涨形态代表动量先回落再回升,且回升得到成交量支撑,是典型的趋势延续信号。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X()) > MACD(X() + 1) && MACD(X() + 1) < MACD(X() + 2) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < MACD(X() + 1) && MACD(X() + 1) > MACD(X() + 2) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

反之,空头信号的条件:MACD柱形向下回落,且前一根K线曾出现MACD小幅向上反弹;同时OBV因卖方成交量压力而持续走低。该看跌形态通常表明:下跌趋势中的短暂多头修正已被“吞没”,卖方重新夺回控制权。可总结出以下策略要点:该形态捕捉趋势恢复式的快速回踩,适合趋势跟踪交易者与剥头皮交易者;入场点在趋势重启之时,而非突破之时;在走势清晰、无频繁震荡的趋势中表现良好。该形态同样未通过前向步进。测试报告如下:

r3

以下是针对该形态附加的使用建议,更适合单独使用,而非与其他形态组合,便于精细调优。

主题

建议

时间周期

非常适合用于15分钟至1小时的趋势跟踪系统。

环境

必须严格用于已形成明确方向的趋势市场,避免在盘整震荡行情中使用。

入场时机

优先等待出现明显的确认K线形态,如光头光脚K线(Marubozu)或吞没形态。

止损/止盈策略

止损可设置在回调位外侧,止盈目标按止损距离的倍数设置。

成交量过滤

需确认OBV的上涨/下跌并非走平,而是具有明显力度,长期来看这一点至关重要。

避免重复入场

如果形态反复出现但并未带动趋势延续,应避免重复入场。

配合MA过滤

可使用EMA作为辅助过滤器,用于确立或确认趋势方向。

波动率过滤

可额外使用ATR或布林带指标来衡量趋势强度。


MACD盘整与OBV放量

第五种形态(形态4),用于识别MACD贴近零轴盘整配合OBV方向突破的信号。该形态用于捕捉多空力量暂时平衡、MACD处于中性区间的阶段,并判断随后是否出现由成交量驱动的重大突破。多头信号解读:当MACD在零轴附近窄幅震荡、反复波动时,随后OBV大幅走高,且涨幅至少高于前一数值的0.5%。该形态通常意味着经过一段时间盘整后,主力资金开始吸筹,价格即将向上启动。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_4(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_macd.Refresh(-1);
   if(m_macd.MaxValue(0, X(), 3, _index) >= 0.0 && m_macd.MinValue(0, X(), 3, _index) <= 0.0)// && fabs(m_macd.MinValue(0, X(), 3, _index) - m_macd.MaxValue(0, X(), 3, _index)) <= High(X()) - Low(X()))
   {  if(T == POSITION_TYPE_BUY && OBV(X()) >= 1.005 * OBV(X() + 1))
      {  return(true);
      }
      else if(T == POSITION_TYPE_SELL && OBV(X()) <= 0.995 * OBV(X() + 1))
      {  return(true);
      }
   }
   return(false);
}

空头信号与多头信号逻辑类似,同样是MACD在零轴附近徘徊、无明确趋势,随后OBV较前一数值下跌超过0.5%,表明抛压急剧放大。这类信号通常预示着区间即将被向下破位。形态4的特殊之处在于,尽管加入了成交量确认,这一形态的触发仍相对及时,且信号数量较少,有助于避免仅依据价格突破的系统所产生的假突破。该形态的测试同样交易次数偏少,且未通过前向步进。

r4

以下是该形态的使用指导。

分类

建议

市场环境

适用于突破前的盘整行情。

时间周期

1小时至4小时周期效果最优,信号更清晰。

确认

可配合K线突破形态或布林带开口扩张一同使用。

成交量质量

务必确保OBV并非走平或杂乱波动,平滑的趋势性运行至关重要。

风险控制

多单止损设置在区间低点稍内侧,空单止损设置在区间高点稍内侧。

波动率过滤

可搭配ATR或价格压缩逻辑辅助识别盘整区间。


MACD向零轴靠拢与OBV上行

下一种是由成交量支撑的逆势交易形态。其特征为:MACD走势与价格趋势相反,同时关注其向零轴靠拢的位置。OBV需要确认成交量支持反转方向。形态5旨在捕捉早期动量转变,但因MACD柱形仍处于反向区域,需保持谨慎。多头信号条件:MACD柱形抬升,表明多头动量正在恢复,但其数值仍低于零轴,说明市场整体仍处于空头环境中。同时OBV上升,显示买盘在逐步累积。可以理解为空头行情中的阶段性多头修复反弹。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X()) > MACD(X() + 1) && MACD(X()) < 0.0 && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X()) < MACD(X() + 1) && MACD(X()) > 0.0 && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

空头信号的条件:MACD走低,但仍处于正值区域,同时OBV逐步回落。即牛市环境中的阶段性空头回调。形态5的设计思路为:以成交量作为可信度依据,谨慎捕捉早期反转,但并不要求MACD完全交叉。可结合以下建议使用。在有限测试中,该形态同样未通过前向步进,报告如下:

r5

方面

建议

时间周期

1小时、4小时周期均可使用,而日线周期能避免噪音,展现更清晰的趋势背景。

成交量过滤

如果OBV走势平缓,该过滤条件会显得尤为必要。

避免在剧烈波动行情中使用

该形态不适用于高波动率市场环境。

搭配趋势过滤器

可配合MA或ADX指标,用以确认趋势环境。

入场时机

等待K线确认信号,或是等待价格有效突破关键高低点后再入场。

交易管理

鉴于该形态属于反转类型,采用紧凑止损,或分批离场的方式会更为稳妥。


MACD相对零轴平稳运行与OBV极值

第七种形态,索引为6,是一种趋势-成交量峰值探测形态。它用于识别某一方向上的强劲趋势,此时MACD持续维持在零轴某一侧,并配合OBV成交量峰值进行判断。该形态用于捕捉趋势延续机会。多头信号的条件:当MACD连续12根K线保持正值,同时OBV处于或高于其12根K线的高点,表明买盘在积极吸筹。这意味着市场处于稳健的多头动量中,成交量预示趋势将得以延续。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_6(ENUM_POSITION_TYPE T)
{  int _index = -1;
   m_macd.Refresh(-1);
   m_obv.Refresh(-1);
   if(T == POSITION_TYPE_BUY && m_macd.MinValue(0, X(), 12, _index) > 0.0 && OBV(X()) >= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && m_macd.MinValue(0, X(), 12, _index) < 0.0 && OBV(X()) <= m_obv.MaxValue(0, X(), 12, _index))
   {  return(true);
   }
   return(false);
}

空头信号特征则相反:MACD连续12根及以上K线处于零轴下方,同时OBV处于或接近其12根K线低点。这表明市场处于稳定的空头掌控中,OBV验证了卖方正在以强劲成交量主导价格下行。该信号形态同样未通过前向步进,至此,这组指标组合下已有7个形态全部测试失败。报告如下:

r6

形态6的使用建议如下:

方面

建议

适用场景

形态6适用于强势、有明确方向的趋势市场,横盘或震荡行情严禁使用。

动量强度

ADX指标作为可选过滤器,入场前提为ADX数值大于25。

结合价格行为

可参考支撑阻力位附近的突破K线、内包K线或钉子线拒绝形态。

成交量验证

OBV应呈现平稳斜率,避免毛刺过多或走平。

离场策略

可采用移动止损,或在斐波那契扩展位离场。


MACD隐性背离与OBV极值

第八种信号形态下,多头信号的条件:价格未再创出更低的低点,MACD抬升,OBV上行。可理解为:价格看似下探但动能不足,成交量持续放大,MACD显示多头动量已启动。在MQL5中的代码实现如下:

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()) > Low(X() + 1) && MACD(X()) < MACD(X() + 1) && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()) < High(X() + 1) && MACD(X()) > MACD(X() + 1) && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

反之,空头信号的条件:价格高点不断抬高,MACD走低,OBV下行。与多头信号一样,这便构成了隐性背离。在本文列出的全部10种信号形态中,这是唯一一个通过前向步进的形态。测试报告如下:

r7

对该形态做进一步优化与改进的建议如下:

方面

最优实践

结合结构位确认

可依托趋势线、支撑阻力位或斐波那契区域入场,提升信号精准度。

叠加其他信号

加入RSI背离或锤子线、吞没形态等K线反转形态,可减少不利波动。

强势趋势中避免使用

该形态并非趋势跟踪型,剥头皮交易者应避开。

合理设置止损

将止损放在近期波段高/低点外侧,适用于短期反转,而非长期趋势反转。


MACD信号线交叉与OBV支撑

我们的倒数第二种信号形态,多头信号的条件:MACD在U形反转后位于零轴上方,同时OBV显示资金正向流入。这是一个得到成交量放大确认的多头动量转向信号。在MQL5中的代码实现如下:

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_8(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X() + 1) > 0.0 && MACD_UP(X())  && OBV(X()) > OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X() + 1) < 0.0 && MACD_DN(X())  && OBV(X()) < OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

看跌信号的条件:经历N形向下反转之后,MACD处于看跌区域,位于零轴下方,同时OBV因抛压持续走低。遗憾的是,与本文大多数形态一样,该形态同样未通过前向步进。其测试报告如下:

r8

可用于提升该形态表现的优化措施如下:

重点区域

建议

入场时机

仅在OBV同步配合时,于MACD交叉后立即交易,避免滞后。

成交量验证

OBV不得与交叉信号相矛盾或背离,应排除OBV走平或背离的情况。

结合价格结构

与多数信号一样,该形态在关键支撑阻力位效果更强。

避免震荡行情

在横盘市场中,即便有OBV确认,MACD交叉信号仍易杂乱,仅在趋势品种上交易。

止损设置

使用ATR或近期K线高低点设置动态止损,该形态意在捕捉趋势启动,而非简单反弹。


MACD零轴信号线交叉与OBV放量

我们的最后一种形态(形态9)作为趋势反转信号,用于捕捉新趋势的起点。在趋势转换后尽早入场以最大化利润,但同样需要警惕反向波动。多头信号的条件:MACD从下向上穿越零轴并收于上方,同时出现U形反转;OBV同步显著上涨,涨幅超过0.5%。我们在MQL5中按照如下方式实现该逻辑:

//+------------------------------------------------------------------+
//| Check for Pattern 9.                                             |
//+------------------------------------------------------------------+
bool CSignalMACD_OBV::IsPattern_9(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && MACD(X() + 1) < 0.0 && MACD(X()) > 0.0 && MACD_UP(X())  && OBV(X()) >= 1.005 * OBV(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && MACD(X() + 1) > 0.0 && MACD(X()) < 0.0 && MACD_UP(X())  && OBV(X()) <= 0.995 * OBV(X() + 1))
   {  return(true);
   }
   return(false);
}

与之对应的空头信号条件:MACD从上向下穿越零轴并收于下方,同时出现N形反转,OBV同步出现大幅下跌。我们采用0.5%作为阈值,该数值灵敏度很高,读者可自行尝试其他参数。遗憾的是,在我们为期两年的小范围测试周期内,该形态同样未能通过前向步进。其测试报告如下:

r9

可以通过以下任意一种方法对该形态进行优化,方法也同样适用于前面介绍的其他9种形态。

分类 最优实践

资产选择

最适用于日均成交量较大的品种 —— 主要直盘货币对、股指,以及高流动性股票或加密货币。

市场环境

应避免在横盘震荡行情中使用,此时MACD零轴交叉容易产生大量虚假信号。结合ADX等趋势指标使用效果会更显著。

成交量阈值

OBV过滤阈值(如0.5%)可根据市场特性调整。对于加密货币等高波动品种可采用更高的阈值。

交易管理

可采用动态止损(如基于ATR或波段高低点)。建议按风险回报比(如1:2)设置初始止盈。

过滤噪音

为提高信号可靠性,可将形态9与K线确认信号结合使用,这一点同样适用于以上其他信号形态。



结论

在本文中,我们引入了一套趋势指标与成交量指标的组合方案,但测试结果极差。在测试窗口期如此短的情况下,采用50/50数据划分进行前向步进验证本就难度很大;但即便如此,与我们以往研究过的其他指标组合相比,本次结果也明显低于应有水平。按照惯例,在介绍完指标组合后,我们通常会进一步应用监督学习进行优化。而由于上一轮测试中,大量形态均未能通过前向步进,下一篇文章中我们可研究的对象可谓绰绰有余。


名称 描述
WZ-71.mq5 向导组装式EA,其文件头中注明了组装时所使用的文件
SignalWZ-71.mqh 指标组合自定义信号类文件

随附文件旨在通过MQL5向导组装为一个EA。此处附有一份指南,供新读者了解具体操作方法。

本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/18462

附加的文件 |
SignalWZ_71.mqh (19.94 KB)
WZ-71.mq5 (7.94 KB)
交易策略 交易策略
各种交易策略的分类都是任意的,下面这种分类强调从交易的基本概念上分类。
希尔伯特-施密特独立性判据(HSIC) 希尔伯特-施密特独立性判据(HSIC)
本文讨论了非参数 HSIC(希尔伯特-施密特独立性判据)统计检验,该检验旨在识别数据中的线性和非线性依赖关系。本文提出了两种用 MQL5 语言计算 HSIC 的算法实现:精确置换测试和伽马近似法。该方法的有效性通过模拟特征与目标变量之间非线性关系的合成数据得到了验证。
新手在交易中的10个基本错误 新手在交易中的10个基本错误
新手在交易中会犯的10个基本错误: 在市场刚开始时交易, 获利时不适当地仓促, 在损失的时候追加投资, 从最好的仓位开始平仓, 翻本心理, 最优越的仓位, 用永远买进的规则进行交易, 在第一天就平掉获利的仓位,当发出建一个相反的仓位警示时平仓, 犹豫。
基于购买力平价(PPP)和 IMF 数据确定公允汇率 基于购买力平价(PPP)和 IMF 数据确定公允汇率
用 Python 构建基于购买力平价(PPP)的汇率分析系统。作者利用 IMF 数据开发了一套包含 5 种公允汇率计算方法的算法。这是一份关于外汇基本面分析、经济数据处理以及与交易系统集成的实用指南,全部代码开源。