您应当知道的 MQL5 向导技术(第 52 部分):加速器振荡器
概述
加速器振荡器是另一款比尔·威廉姆斯(Bill Williams)指标,设计用来跟踪动量,尽管它衍生自我们早前文章中讲述过的另一款振荡器,我们看看如何用它来展现各种形态,甚或以组合方式给人带来益处。该指标专用于跟踪动量的加速或减速,其可为潜在的交易入场和退场提供信号。加速度与速度不同。
两者在金融市场中的差异必然是细微差别的,特别是对于来自 MetaTrader 终端的手动交易者而言。虽然速比指向价格与加速度的变化率,恰如其分地暗指着速度的变化率。为了正确地分别量化每个量值,我们用到不同的指标。对于速比,常备的指标是:变化率(ROC)、MACD、RSI,可能还有简单指数移动平均线。对于加速,我们典型拥有加速波带、MACD 直方图、随机震荡指标、以及本文的专题,加速器振荡器。如前所述,这个振荡器衍生自我们早前文章中研究过的动量(Awesome)振荡器,回顾其公式是:
![]()
然而,加速器振荡器是:
![]()
其中,如前:
-
AO 是当前的动量振荡器读数
-
SMA 是简单移动平均线
该振荡器的关键组件是零轴,其立于加速动量的平衡点,而人们会期望 AC 正数值指向看涨动量,而负数值表示看跌动量。颜色指示也与我们在之前的比尔·威廉姆斯振荡器中看到的密切相关,其中零轴上方或下方的绿色柱线分别表明看涨或看跌的增强势头,而零轴两侧的红色柱线则表示动量减弱。
AO 专注于价格逆转前的动量变化,在早期趋势逆转检测时很实用。包括外汇、股票、和大宗商品在内的市场中,它也往往具有通用性,且因熟悉的直方图视觉表示,解释起来相对简单。故此,于此总结,它的实际用例是识别入场信号,原则上当 AC 高于零轴时买入,于下方时卖出;加上趋势确认,AC 可以与其它指标协同工作,譬如已涵盖的动量震荡指标、甚至移动平均线,从而确认市场趋势。
不过,如众多指标一样,它确实有其局限性。除了经常需要补充指标来确认其信号,譬如趋势和成交量指标,它在横盘或波动的市场中还偏于滞后很多。此外,AO 通常对短期价格波动敏感,这令其潜在地容易出现大量假信号。最后,它的零轴交叉通常比之对应的 AO 可信度较低,就它而言,在我们深入研究 AO 形态之前,最好与 AO 进行对比。
由于我们已涵盖了每个公式的基本定义,因此我们将跳到它们各自的用途和解释。动量震荡指标(AO)展示整体市场动量,并帮助识别趋势和逆转,而 AC 则建立在 AO 之上,有助于展示动量变化率,以便更好地衡量动量是回升、亦或减速。如果 AC 高于零轴,且节节高升,则动量正在加速,如果低于零轴并递减,则动量正在加速看跌。
零轴对于两个振荡器都很重要,正如对于 AO,交叉是动量偏转的主要迹象,其中任何向上的走势都看涨,而向下的任何走势都看跌。然而,对于 AC 来说,零轴往往不那么重要,而是更强调直方图柱线的方向,即它们是上升还是下降。由于它不像 AO 那样是一款强力指标,故它往往最适合识别数值为正,但下降的直方图,这是减速标志;或数值为负,但上升的柱线,这表示看跌压力降低。
直观上,两者往往都表示为直方图,AO 的走势一般更平滑,而 AC 由于其对加速或减速的敏感性,因此波动更加粗略。所提及的这种普遍亲-AO 情绪,还值得注意的是,在两个振荡指标中,AO 往往滞后。这是因为它依赖长期平均值(SMA-5 和 SMA-34),这些平均值可以平滑噪声,但令 AO 对于短期变化不那么敏感。另一方面,AC 的反应更灵敏,且因专注 AO 的变化率,能更早地反映动量偏转。
这导致各自的适用性。如果我们先研究 AO,它往往擅长趋势识别,因其依赖零轴交叉;在识别其双峰逆转信号时,会被经常使用,而对于长期动量分析,AO 往往是寻求更广泛市场动量视野的交易者的理想选择。另一方面,AC 常面向:检测动量加速度,这比 AO 更早指明入场/离场;识别短期信号,作为像是 AO 等更长期指标的确认信号;其对价格行为的高度敏感性,对那些运用剥头皮策略的交易者来说可能会派上用场。
故此,汇总 AO-AC 比较,AO 擅长理解更宽泛的趋势,并识别逆转,但反应速度较慢;而 AC 专注于动量加速,提供更快、更灵活的信号,令其成为需要快速做出决策的交易者的理想选择。正如已经论证的那样,两者可一同运用,AO 识别趋势, AC 基于动量变化确定入场和离场时机。
依据这些声明,我们转进到 AC 形态。我们正在研究总共 8 种形态,一如既往,我们首先单独测试每种形态,然后在文章末尾,我们将研究部分、或全部形态的组合,如何在有限的测试窗口期内对智能系统的性能产生影响。
在本文中,我们正在测试 GBP USD 货币对,依据 2023 年 H4 时间帧。所呈现的每种形态测试结果来自优化运行,且不会与之前文章中曾讲述的参数进行交叉验证。至于好奇的新读者,您可在过去的指标形态文章中查看它们。此外,文章底部附带的代码旨在通过 MQL5 向导进行汇编,并且这里和这里都有关于如何执行操作的指南。
零轴交叉
我们的第一个形态-0 是基本的,以零轴为中心。期其看涨信号是当 AC 从下方上穿且高于零轴时,表明看涨动量从减速偏向加速。同样,当 AC 从上方下穿且低于零轴时,表明看跌动量从减速偏向加速。我们实现该形态的 MQL5 版本如下:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AC(X() + 1) < 0.0 && AC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && AC(X() + 1) > 0.0 && AC(X()) < 0.0) { return(true); } return(false); }
在本文中,我们所有的测试都是依据 GBPUSD 货币对 2023 年 H1 时间帧。如果我们仅用形态-0 测试由向导汇编的智能系统,则需要为所用形态输入参数赋值 1。有利测试运行会向我们呈现以下优化设置报告:

形态-0 要研究的关键点是,正如概述中所强调,它不是一个单立的指标。它最好与其它指标配对,分析价格动作。进而,即使它会与另一个指标配对,确认始终是关键。最好错开收集入场/离场信号,这意味着如果我们在当前柱线上得到交叉,那么最好在随后的未来柱线上读取来自辅助指标的信号。与大多数指标一样,假信号必然会发生,而需要注意的关键是市场是波涛起伏、亦或来回拉扯。波涛起伏的市场往往充满了该形态的假信号。不过,如果市场条件是趋势,那么交易者就能期望连胜,因为它往往更可靠。
零轴上方的连续绿色柱线
我们的第二个形态-1 基于零轴上方或下方的彩色柱线的计数。如果 AC 显示两根或多根连续高于零轴的绿色柱线,这可被视为强烈的看涨动量信号,预示着上升趋势会延续。另一折面,如果零轴下方出现多根柱线,则可认为这代表看跌动量上升,也代表潜在的下降趋势延续。我们的 MQL5 实现如下:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_1(ENUM_POSITION_TYPE T) { int _i = X(); if(T == POSITION_TYPE_BUY && UpperColor(_i) == clrGreen && UpperColor(_i + 1) == clrGreen && UpperColor(_i + 2) == clrGreen) { return(true); } else if(T == POSITION_TYPE_SELL && LowerColor(_i) == clrRed && LowerColor(_i + 1) == clrRed && LowerColor(_i + 2) == clrRed) { return(true); } return(false); }
该信号需要观察柱线的量级,因为它们的大小无论增加与否,都表明主导趋势的建立,即无论它是减弱还是加剧。形态-1 的其它关键考虑因素是确认,如前一种形态,并最好是在趋势行情中使用它。形态所用的输入参数赋值为 2,严格使用该形态进行测试运行,其为我们给出以下报告:

AC 和价格之间的背离
形态-2 利用背离,如果价格形成较低的低点,而 AC 形成更高的低点,则指示看涨信号。另一折面,当价格形成更高的高点,且 AC 展现更高的高点时,这往往被当作预示逆转下行。我们实现的 MQL5 版本如下所示:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Low(X() + 3) > Low(X()) && AC(X() + 3) < AC(X())) { return(true); } else if(T == POSITION_TYPE_SELL && High(X() + 3) < High(X()) && AC(X() + 3) > AC(X())) { return(true); } return(false); }
该形态是一个重要的技术分析信号,具有识别逆转的能力。背离本质上就是价格动作和 AC 处于不同的轨迹,这往往(作为规则)意味着所表现出的价格行为由一些底层缺陷,因此逆转迫在眉睫。仅用该形态进行测试,其形态索引为 4,为我们给出以下报告:

正如已提及的形态-0 和 1,伴随着确认,研究它最适合的市场条件,更多地倾向于较大的时间帧、而非较小的时间帧来警惕假信号,以及正确的风险管理;这些都是应该注意的因素。
接近零轴的逆转信号
形态-3 的独用指数(索引赋值给输入参数 'patterns-used')为 8,是 AC 接近零轴时的逆转。在该形态下,看涨逆转是指 AC 在高于但接近零轴界限时从红色变为绿色,而看跌逆转是指在低于但接近零轴时从绿色变为红色。如何量化 AC 与零轴的接近程度当然是一个需要细调的事情。
为什么这可能是至关重要的论调是显而易见的,大概值得一提。重点是识别并“区分”从弱信号到强信号。
这是因为量级往往作为动量强度的代表,零轴附近的较大值通常预示着明显的逆转(先前趋势与零轴的间隙很大,这实际上是延续效应)。故此,为了过滤掉假信号,一个尺度可观的阈值来滤除 AO 或许示意的许多逆转、或 U-造型。如果将其作为市场情绪的衡量标准,AO 零轴间隙的相应大小,也可起到细调入场和离场的作用,因为其距离可用作止损价位的距离指导。在一些比较分析中提供的信息,对于识别正确逆转的标准回踩很重要,举例来说,在回溯测试时。
这种间隙的量化能以无限多种方式正确完成。出于我们的目的,我们将只讨论少许与 AO 振荡器本身更密切相关的内容。首先是绝对指标值,举例,根据所交易证券,若点大小为 1e-5 或 0.5,则该值可能为 0.005;然若是日元交叉,则该值可能为 0.5。按该阈值,仅需考虑那些距零轴幅度值大于该绝对值的 AO 逆转。
另一个量化量值可能是相对量级,其中当前 AO 值与 AO 的近期或历史平均值进行加权。该方式可被认为是一个适应性阈值,即根据市场条件而变化。用户定义的乘数 k,在细调阈值额度时,可被应用到历史 AO 平均值或最近值。另一个可能的阈值是基于标准差的阈值。经简略公式化,如下所示:
![]()
其中
- μ 是中间值
- σ 是标准差
- 而 n 是用户优化的参数。
时间特定量级是量化零轴界限量值的另一种方式。按该方式,可为波动或新闻事件时段分配一个绝对值,并在市场风平浪静时使用替代阈值。这项工作在原理上类似于上面提到的相对量级阈值,但它更多是时间量值。
这些就是设置距零轴的 AO 阈值的几种可能途径。不过,在行事中,或许重点要留意一些可能令该过程陷入困境,并导致意想不到结果的陷阱。未经仔细审核,这些是:设置过于具体的阈值、忽略市场背景、不考虑 AO 振荡器的滞后性质、误解较小数值和市场噪音。
出于我们本文目的,我们不会量化 AC 需要多接近零轴界限,这在于我们只是寻找任何接近零轴的 U-形回旋。我们的 MQL5 实现如下:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AC(X() + 2) > AC(X() + 1) && AC(X() + 1) > 0.0 && AC(X() + 1) < AC(X())) { return(true); } else if(T == POSITION_TYPE_SELL && AC(X() + 2) < AC(X() + 1) && AC(X() + 1) < 0.0 && AC(X() + 1) > AC(X())) { return(true); } return(false); }
仅用该形态单独测试,并在输入参数里为所用形态赋值 8,为我们呈现以下结果:

形态-3 不是固有的一种新信号形成或逆转的形态,而更多是一种趋势延续形态。据其作为指导,与我们上面分享的没有太大区别。
增加彩色柱线尺寸
我们的形态-4 有点宽泛,即它旨在利用特定颜色 AC 柱线不断增加的尺寸。当 AC 显示越来越多的绿色柱线(无关它们是高于还是低于零轴)时,它提供了看涨动量加速的迹象。类似地,如果展现越来越多的红色柱线,无论它们相对于零轴的位置如何,这都是看跌动量正在加速的预兆。
因该形态有点过于宽泛,故我们考虑以略微狭隘的意义上实现它,即仅在所示动量的对立侧增加彩色柱线计数。故此,对于看涨信号,我们将得到零轴下方的绿色柱线越来越多(往往标记为缩短的柱线)。同样,对于看跌信号,我们将在零轴上方看到越来越多的缩短红色柱线,作为看跌动量增强的示意。我们的 MQL5 实现如下:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_4(ENUM_POSITION_TYPE T) { int _i = X(); if(T == POSITION_TYPE_BUY && LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrGreen && LowerColor(_i + 2) == clrGreen) { return(true); } else if(T == POSITION_TYPE_SELL && UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrRed && UpperColor(_i + 2) == clrRed) { return(true); } return(false); }
该形态的关键考虑因素是,它与我们上面讲述过的背离形态有相当多的重叠。如果在零轴下方形成更高的绿色柱线低点,并且价格动作也出现低点趋于平坦的迹象,那么这可作为看涨信号的附加确认,价格背离起到上行的作用。相较之,零轴上方红色柱线的较低高点,价格动作出现高点趋于平坦,择可能是价格即将回落的迹象。如看涨信号,这几乎不需要额外的确认。仅该形态的测试结果,当我们将所用形态输入参数赋值 16 时,为我们呈现以下报告:

如常,这些所示测试运行其实在说该形态的“潜力”,而非结果本身。它们来自输入设置的一个短期优化时段,且该设置未经前向迈进或交叉验证。如常,邀请读者来处理这个问题,遵照他预期的交易证券,和他预期的经纪商数据。
AC 波峰和波谷
我们的第六个形态-5,把 AC 振荡器的动作与价格动作形态相结合,重点放在分形点上。当价格峰值之后,振荡器处于零轴上方,随后 AC 振荡器的绿色柱线尺寸增加时,则定义为看涨峰值信号。这可作为看涨动量仍会延续的建议。类似地,看跌低谷信号是指价格动作中的低谷分形之后,更低红色 AC 柱线低于零轴。这也是看跌动量仍在延续的建议。我们按如下方式编码:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && UpperColor(X()) == clrGreen && AC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && LowerColor(X()) == clrRed && AC(X()) < 0.0) { return(true); } return(false); }
值得注意的是,应谨慎处理该形态,在于 AC 峰值、甚或价格都可能示意潜在的逆转,就与低谷分形、或 AC 也同样可能指示看涨逆转。形态-5 的解释可能也有点主观,因为如果要正确调整或权衡每个信号值的大小,就要参考一些量值。这些包括峰值/波谷的高度和深度、它们的频率,以及它们发散的即刻报价值。
更高的峰值和更深的波谷往往示意更强的动量,故此为了修改我们上面实现的代码,我们应在估算阈值大小中加上一个点数阈值、或当前 ATR 的倍数,如此这般作为过滤器,仅有摆动大于阈值的峰值/波谷才被视为形态信号。此外,频率量值,在本例中其计数与信号强度成反比,可计为峰值/波谷摆幅大小的分母。这是因为波峰和波谷越频繁,通常市场波动性越大。因为作为规则,峰值总是随后就是低谷,反之亦然,所以计算它们的有效途径就是查看在固定的回溯期内,可能是一周或一天,出现多少次,具体取决于所采用的时间帧。
最后,背离可能自己导向形态-5,因为于此正在考虑峰值和低谷,它们或许不会与形态定义一致,举例来说形成一个低谷-峰值配对,而这可能表明背离。仅用该形态测试时,输入形态参数赋值为 32,我们得到了以下测试运行结果:

强劲趋势后的颜色变化
我们的第七个形态-6,源于 AC 振荡器的颜色变化。而且由于这种变化很直观,取决于它相对于零轴发生的位置,故可能过于宽泛,正如我们在形态-4 中所见。因此,我们将每个信号的定义约束在零轴的特定一侧。那么,看涨动量的耗尽将是零轴上方的 AC 柱线从绿色变为红色,这示意一个看跌信号。同样,当低于零轴时,从红色柱线变为绿色柱线,这是看跌动量耗尽,因此示意看涨回调即将到来。我们的 MQL5 实现如下:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && ((UpperColor(X() + 1) == clrRed && UpperColor(X()) == clrGreen) || (LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrGreen))) { return(true); } else if(T == POSITION_TYPE_SELL && ((UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrRed) || (LowerColor(X() + 1) == clrGreen && LowerColor(X()) == clrRed))) { return(true); } return(false); }
这种颜色变化发生在强趋势之后,故除了颜色变化之外,还需要检查要已记录信号。在这种情况下,我们除了当作入场信号来用,鉴于在长期趋势之后正在逆转,它还可作为止盈点位。事实上,这种止盈思路强调该信号本身不一定那么强、或可靠,因为它总是出现在强劲趋势的末尾,或更有可能发生在中间。仅用该形态的测试运行,应在输入参数里将所用形态赋值 64,为我们给出以下报告:

接近极端价位的平坦 AC
我们的第八个也是最后一个形态-7,得自观察 AC 振荡器接近其极端价位。按该形态,如果 AC 在明显的低点附近拉平,伴随更多是红色柱线,然后开始形成绿色柱线,则代表看涨机会。相较之,看跌机会是如果 AC 在明显的高点附近拉平,伴随很多绿色柱线,然后发展出一些红色柱线。正如在这种场景下的预期,对于看涨信号,AC 必须低于零轴,而对于看跌信号,它必须高于零轴。我们对形态-7 如下编码 MQL5 版本:
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && LowerColor(X() + 3) == clrRed && LowerColor(X() + 2) == clrRed && LowerColor(X() + 1) == clrRed && LowerColor(X()) == clrGreen) { return(true); } else if(T == POSITION_TYPE_SELL && UpperColor(X() + 3) == clrGreen && UpperColor(X() + 2) == clrGreen && UpperColor(X() + 1) == clrGreen && UpperColor(X()) == clrRed) { return(true); } return(false); }
AC 趋平,尤其是在特定阈值级别上,可能是盛行趋势正在减弱的一个巨大信号。我们上面的实现不包括研究该形态之前 AC 振荡器所要达到的阈值,不过如果读者想令该形态更加精粹,其是一个有意义的补充。测试运行在映射输入参数里赋值 128,为我们给出以下报告:

所有形态
如果我们执行一次优化运行,来搜寻建立理想的形态组合,主要在映射输入参数采用从 0 到 255,一些有利结果为我们呈现以下报告:


结束语
我们已验证了另一宽比尔·威廉姆斯(Bill Williams)振荡指标,尽管与我们在最近的一篇文章中研究的动量振荡指标非常相似,但它更适合跟踪价格的加速动量,而不仅仅是它的变化。此外,自定义信号对动量振荡器信号中所用的如何判定颜色略微进行了一些更改。这些可在下面随附的源代码中查看。指标系列我们现在即将收尾,就在不多几篇之后很快。
| 文件名 | 描述 |
|---|---|
| SignalWZ_52.mqh | 自定义信号类文件 |
| WZ_52 | 向导汇编的智能系统,其头文件作为显式所用文件。 |
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/16781
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
MQL5中的自动化交易策略(第七部分):构建具备仓位动态调整功能的网格交易EA
价格行为分析工具包开发(第十四部分):抛物线转向与反转工具