您应该了解的MQL5向导技巧(第七十一部分):使用MACD与OBV形态
引言
将趋势跟踪类震荡指标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区间进行回测,得到如下报告。该形态未通过前向步进。

以下是形态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区间过滤不仅确认了成交量方向,还能确保成交量足够高;旨在捕捉新趋势的早期入场点,适用于突破或波段行情。该形态的测试报告如下所示。该形态未通过前向步进。

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

以下是该形态的使用建议汇总。
| 主题 | 建议 |
|---|---|
| 时间周期 | 适合短期反转交易的周期为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因卖方成交量压力而持续走低。该看跌形态通常表明:下跌趋势中的短暂多头修正已被“吞没”,卖方重新夺回控制权。可总结出以下策略要点:该形态捕捉趋势恢复式的快速回踩,适合趋势跟踪交易者与剥头皮交易者;入场点在趋势重启之时,而非突破之时;在走势清晰、无频繁震荡的趋势中表现良好。该形态同样未通过前向步进。测试报告如下:

以下是针对该形态附加的使用建议,更适合单独使用,而非与其他形态组合,便于精细调优。
| 主题 | 建议 |
|---|---|
| 时间周期 | 非常适合用于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的特殊之处在于,尽管加入了成交量确认,这一形态的触发仍相对及时,且信号数量较少,有助于避免仅依据价格突破的系统所产生的假突破。该形态的测试同样交易次数偏少,且未通过前向步进。

以下是该形态的使用指导。
| 分类 | 建议 |
|---|---|
| 市场环境 | 适用于突破前的盘整行情。 |
| 时间周期 | 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完全交叉。可结合以下建议使用。在有限测试中,该形态同样未通过前向步进,报告如下:

| 方面 | 建议 |
|---|---|
| 时间周期 | 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个形态全部测试失败。报告如下:

形态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种信号形态中,这是唯一一个通过前向步进的形态。测试报告如下:

对该形态做进一步优化与改进的建议如下:
| 方面 | 最优实践 |
|---|---|
| 结合结构位确认 | 可依托趋势线、支撑阻力位或斐波那契区域入场,提升信号精准度。 |
| 叠加其他信号 | 加入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因抛压持续走低。遗憾的是,与本文大多数形态一样,该形态同样未通过前向步进。其测试报告如下:

可用于提升该形态表现的优化措施如下:
| 重点区域 | 建议 |
|---|---|
| 入场时机 | 仅在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%作为阈值,该数值灵敏度很高,读者可自行尝试其他参数。遗憾的是,在我们为期两年的小范围测试周期内,该形态同样未能通过前向步进。其测试报告如下:

可以通过以下任意一种方法对该形态进行优化,方法也同样适用于前面介绍的其他9种形态。
| 分类 | 最优实践 |
|---|---|
| 资产选择 | 最适用于日均成交量较大的品种 —— 主要直盘货币对、股指,以及高流动性股票或加密货币。 |
| 市场环境 | 应避免在横盘震荡行情中使用,此时MACD零轴交叉容易产生大量虚假信号。结合ADX等趋势指标使用效果会更显著。 |
| 成交量阈值 | OBV过滤阈值(如0.5%)可根据市场特性调整。对于加密货币等高波动品种可采用更高的阈值。 |
| 交易管理 | 可采用动态止损(如基于ATR或波段高低点)。建议按风险回报比(如1:2)设置初始止盈。 |
| 过滤噪音 | 为提高信号可靠性,可将形态9与K线确认信号结合使用,这一点同样适用于以上其他信号形态。 |
结论
在本文中,我们引入了一套趋势指标与成交量指标的组合方案,但测试结果极差。在测试窗口期如此短的情况下,采用50/50数据划分进行前向步进验证本就难度很大;但即便如此,与我们以往研究过的其他指标组合相比,本次结果也明显低于应有水平。按照惯例,在介绍完指标组合后,我们通常会进一步应用监督学习进行优化。而由于上一轮测试中,大量形态均未能通过前向步进,下一篇文章中我们可研究的对象可谓绰绰有余。
| 名称 | 描述 |
|---|---|
| WZ-71.mq5 | 向导组装式EA,其文件头中注明了组装时所使用的文件 |
| SignalWZ-71.mqh | 指标组合自定义信号类文件 |
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/18462
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
希尔伯特-施密特独立性判据(HSIC)
新手在交易中的10个基本错误
基于购买力平价(PPP)和 IMF 数据确定公允汇率