量化策略开发,高质量社群,交易思路分享等相关内容
PS:12月6日本周五(19:30)年度直播2025俱乐部最新内容,非常豪华。不要错过抽大红包的环节,一定要来瞅瞅。加小松鼠微信,防丢失。
Ai帮你编写策略:点击进入
订单流图表:点击进入
将两个经典的振荡器——方向运动振荡器和商品通道指数结合起来,并在本文中添加一些变化,可以帮助你更容易地识别在趋势中发生的价格延续和反转。
找到趋势并坚持趋势是许多交易者的目标。即使在明显的趋势市场中,也会出现小的价格回撤和整理,这可能会让交易者退出交易。尽管这些暂时性的运动创造了交易陷阱,但它们也提供了进入、退出和延续的机会。识别价格波动何时开始和结束的能力可以防止未实现利润的损失,这也是本文的重点。
在交易者可用的技术分析工具中,动量振荡器旨在反映价格运动的涨落。本文描述了使用两个振荡器——方向运动(DMI)振荡器和商品通道指数(CCI)——来帮助识别在趋势中发生的价格延续和反转。DMI振荡器显示了短期趋势方向和趋势延续点,而CCI则识别趋势中的潜在反转。
DMI振荡器
DMI振荡器是我最喜欢的指标之一。在之前的文章中,我将DMI振荡器作为随机指标的基础,并最近将其作为摆动交易方法的方向过滤器。在本文中,它将有两个用途:识别买方或卖方控制价格方向,并在趋势中发出入场信号。
DMI振荡器源自Welles Wilder的方向运动指数(DMI)的两个指标,DMI在大多数技术分析图表网站上都有提供。DMI的基础由正方向指标(+DI)和负方向指标(-DI)构成。它们反映了买卖压力,并提供了一段时间内价格运动的正向或负向方向信息。DI指标背后的数学公式可以在Wilder的书《New Concepts In Technical Trading Systems》以及几个互联网网站上找到。
正DI或正DI表示价格上涨运动,而负DI或负DI表示价格下跌运动。方向指标旨在识别趋势,而不是精确指出价格的最高点和最低点。当线条相交且一个DI高于另一个时,趋势的潜在变化就会被发出信号。在横向或波动的价格行动中,线条会多次交叉。
做一些改变
大多数图表软件包将+DI和-DI作为同一面板中的单独线条呈现。为了更容易跟踪,我将指标转换为振荡器格式,通过从+DI中减去-DI,并将线条样式更改为直方图,使其在零线上方和下方移动。
振荡器的零线表示+DI和-DI相交的点,以及潜在趋势变化发生的地方。零线上方的DMI振荡器表示价格呈上升趋势。零线下方且下跌的DMI振荡器意味着卖方压力占主导地位,价格呈下跌趋势。
泰森食品的条形图在图1中展示了正负方向指标的通常线条显示与DMI振荡器转换之间的外观差异。较低面板中的DMI振荡器更好地阐明了趋势方向,因为它在4月的短暂回撤期间保持在零线上方,在5月的波动价格下跌期间保持在零线下方。
图1:泰森食品(TSN)的原始DMI和DMI振荡器。这张每日条形图展示了大多数图表程序中正负方向指标的绘制方式(价格上方的面板)与DMI振荡器(下方面板)之间的差异。
将DI指标以直方图格式显示为振荡器不会改变底层组件的值或它们相交的点。对我来说,这是一种视觉偏好,使分析更快、更容易、更少混乱。
为了更清楚地看到指标运动中的峰值和谷值,我用一个周期的移动平均线勾勒出直方图。我还将通常的回顾期从14改为10。
给价格条上色。我观察短期趋势方向的首选方法是给价格条上色,使它们与DMI振荡器的颜色相对应。如果振荡器值为零,则出现灰色价格条,这意味着它既不在零线上方也不在零线下方。
使用相同的泰森食品图表,图2显示了将价格条与DMI振荡器方向匹配可以帮助识别方向偏差,并过滤出5月下跌期间出现的一些较小的绿色价格回撤条。
图2:泰森食品(TSN)的价格条颜色调整。将价格条的颜色与DMI振荡器的颜色相对应,可以更容易地识别趋势的变化。改变价格条的颜色有助于突出显示DMI振荡器指示的趋势方向,从而简化了趋势变化的识别过程。
延续信号
无论是否在零线上方或下方,DMI振荡器也会随着它对短期趋势内形成的较小价格回撤和整理的反应而波动。趋势内的短暂回撤或从整理中的突破为趋势交易者提供了保持交易、增加头寸或加入的机会,因为价格然后继续沿着已经存在的趋势方向移动。
图3中每日价格图表上的圆形彩色符号基于DMI振荡器波动,发出结束小回撤和潜在延续当前短期趋势的开始的信号。
图3:好市多(COST)的延续信号。这些圆圈指出了在2022年3月中旬至5月中旬的好市多每日图表中,价格在趋势内的回撤之后开始的延续走势
当DMI振荡器在上升趋势中既在零线上方又在18周期简单移动平均线上方时,价格条下方出现蓝色圆圈。在下降趋势中,当DMI振荡器既在零线下方又在18周期移动平均线下方时,价格条上方出现深红色圆圈。
商品通道指数(CCI)
由Donald Lambert开发的CCI提供了当前价格与其平均价格之间存在的扩散或变异性的量的信息。与其他振荡器的运动被零到100的刻度限制不同,CCI被认为是一个无界的振荡器,它在零线上方和下方移动,没有上限或下限。然而,Lambert建议将+100和-100水平指定为阈值,这些阈值往往包含70-80%的价格行动。随着时间的推移,交易者已经来解释CCI值高于+100水平为超买,值低于-100水平为超卖。
许多软件包中使用的默认回顾期是14或20,但在本文中已缩短至13。
反转信号
CCI经常在它超过+100水平然后在某点回到并跌破+100水平时发出向下反转的信号。它标志着回调的开始,有时是长期下跌趋势反转的开始,在本文中,将用价格条上方的品红色菱形标记。
CCI在它低于-100水平然后在某点回到并突破-100水平时发出向上反转的信号。它标志着小的逆趋势反弹的开始,有时是长期上升趋势反转的开始,并由价格条下方的深绿色菱形标识。
为了说明CCI指标上的反转点在价格上的表现,图4中的每日价格图表包括了单独面板中的价格图表下方的CCI以及DMI振荡器位置的钻石标记。然而,在随后的图表中,CCI指标将不会出现,只会显示价格条上的菱形标记。
图4:公共存储(PSA)的反转信号。基于商品通道指数(CCI)的反转信号。价格图表上的菱形标记对应于上方面板中CCI显示的箭头。它们标志着逆趋势价格回撤的开始。
交易信号
一些交易者可能希望顺应趋势进行交易,并且只显示他们图表上的延续信号,而其他交易者可能更喜欢均值回归交易或实际趋势反转,并且只在他们的图表上放置反转信号的菱形标记。
在图表上同时放置延续和反转信号,如图5和6所示,确实会创建一个看起来更杂乱的图表,但观察这两个信号之间的相互作用提供了更广阔的视角,开辟了新的交易途径。
例如,太阳能公司Enphase在2021年10月至11月的两个月期间取得了超过100点的惊人涨幅,但在随后的两个月内全部回吐。(见图5)。
图5:安费诺能源(ENPH)的延续和反转信号。你可以结合这两种信号来获取更多的交易机会,包括延续信号入场和反转信号出场。这里添加了一个20周期的简单移动平均线,以提供方向性支撑和阻力的视觉层面。
虽然投资者可能不高兴看到他们的利润消失,但短期交易者通过使用基于信号的简单策略,得到了充足的盈利交易机会,无论是向上还是向下。例如,在上升趋势中,蓝色圆圈作为潜在的入场警报。在价格突破延续蓝色圆圈信号条的高点后入场交易,并在出现反转菱形信号时退出。在信号条的低点下方设置止损将有助于控制初始风险。
同样,在下降趋势中,跟随深红色延续信号入场,初始止损设在信号条的高点上方。在绿色反转信号或价格触及止损时退出。
不幸的是,并非所有市场都以明确定义的波形上下移动。图6中的SPY ETF给出了一个更现实的价格变动图景,它在2021年11月上升,然后在12月的大部分时间里横向整理,然后在1月急剧下跌,开始2022年的熊市下跌。
图6:SPY ETF上涨、横盘和下跌。从2021年10月到2022年2月初,标准普尔500ETF(SPY)的每日图表显示了交易者在上涨至12月高点和随后进入熊市的初期下跌期间可能遇到的延续和反转信号。
正如所料,在趋势期间表现良好的延续信号在整理期间产生了一些虚假信号。然而,出现在趋势和整理期间的高点和低点附近的菱形反转信号提供了良好的退出点。这些信号以及DMI振荡器和价格条的颜色变化在上升趋势期间产生了收益,并在下降趋势期间防止了损失。
一些观察
意识到事后一切都变得更清晰,我将分享一些观察和一些技巧,这可能有助于防止过早的进入或退出。例如,因为DMI振荡器很少在价格的确切最高点和最低点穿过其零线,所以在图表上添加移动平均线或趋势线,如在图5和6中,有助于识别趋势变化。
在趋势结束时,通常在DMI振荡器从绿色变为红色或从红色变为绿色之前,价格经常在产生延续信号后无法跟进超过一个条形。因为可能很难衡量这将在哪里发生,所以保持止损尤为重要。
同样,不要假设每次反转信号都会出现深度回撤。长或强趋势的价格移动经常产生浅回撤,触发反转信号。价格可能没有足够的动力达到逆趋势交易者期望的预期目标。那些偏好回归均值策略的人可以在交易进行中通过保持跟踪止损来管理风险。但是,那些使用反转信号进行实际趋势反转交易入场的人可能使用更保守的入场方式,也等待DMI直方图穿过其零线并改变颜色。
在反转信号发生时收紧止损或在反转信号后价格条颜色变化时退出,可以帮助防止重大损失。
有时,反转信号并没有出现在价格开始更深度回撤的点。这通常是价格和指标之间已经发生的背离的结果,这种背离在价格高点或低点做出时已经发生。图6中2021年11月的SPY价格图表提供了一个很好的例子,说明需要检查背离。
多功能组合
DMI振荡器和CCI的配对为几种类型的交易提供了多条途径。彩色价格条和DMI振荡器使趋势交易者能够轻松识别短期趋势的变化。那些
希望增加现有头寸的人,以及在趋势开始后等待回撤的交易者,会发现延续信号很有用。与此同时,反转信号为逆趋势交易者以及寻找使用延续和反转信号之间相互作用的长期移动的摆动交易者提供了短期反弹。
策略代码
一、函数
✦
Params
Series<Numeric> high;
Series<Numeric> low;
Series<Numeric> close;
Numeric Length(10);
Vars
Numeric ReturnValue(0);
Numeric DMIOsc(0);
Numeric i(0);
Numeric Volty(0);
Series<Numeric> ADX(0);
Series<Numeric> ADXR(0);
Series<Numeric> TR(0);
Series<Numeric> DMPlus(0);
Series<Numeric> DMMinus(0);
Series<Numeric> DIPlus(0);
Series<Numeric> DIMinus(0);
Series<Numeric> DMI(0);
Begin
For i = 1 To Length
{
TR= TrueRange;
DMPlus = IIF(High[i] - High[i - 1] > Low[i - 1] - Low[i], Max(High[i] - High[i - 1], 0), 0);
DMMinus =IIF(Low[i - 1] - Low[i] > High[i] - High[i - 1], Max(Low[i - 1] - Low[i], 0), 0);
}
DIPlus = Summation(DMPlus, Length) / Summation(TR, Length) * 100;
DIMinus = Summation(DMMinus, Length) / Summation(TR, Length) * 100;
DMIOsc=DIPlus-DIMinus;
DMI = Abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100;
ADX = XAverage(DMI, Length);
ADXR = (ADX + ADX[Length - 1]) / 2;
Volty = Summation(TR, Length) / Length;
Return DMIOsc ;
End
二、DMI指标
✦
Params
Numeric DMILength(10);
Vars
Numeric ReturnValue(0);
Numeric oDMIPlus(0);
Numeric oDMIMinus(0);
Numeric oDMI(0);
Numeric oADX(0);
Numeric oADXR(0);
Numeric oVolty(0);
Numeric DMIOsc(0);
Integer PlotColor(0);
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算 DMI 相关指标
DMIOsc = DirMovement(High, Low, Close,DMILength);
// 绘制 DMI Oscillator
// 根据 DMIOsc 的值设置绘图颜色
If (DMIOsc > 0)
{
PlotColor=Rgb(255,0,0);
}
Else If (DMIOsc < 0)
{
PlotColor=Rgb(0,255,0);
}
Else
{
PlotColor=Rgb(0,0,255);
}
PlotNumeric("DMI Osc", DMIOsc,0,PlotColor);
PlotNumeric("0", 0);
}
三、DMI及CCI指标
✦
Params
Numeric DMILength(10);
Vars
Numeric ReturnValue(0);
Numeric oDMIPlus(0);
Numeric oDMIMinus(0);
Numeric oDMI(0);
Numeric oADX(0);
Numeric oADXR(0);
Numeric oVolty(0);
Numeric DMIOsc(0);
Integer PlotColor(0);
Events
OnBar(ArrayRef<Integer> indexs)
{
// 计算 DMI 相关指标
DMIOsc = DirMovement(High, Low, Close,DMILength);
// 绘制 DMI Oscillator
// 根据 DMIOsc 的值设置绘图颜色
If (DMIOsc > 0)
{
PlotColor=Rgb(255,0,0);
}
Else If (DMIOsc < 0)
{
PlotColor=Rgb(0,255,0);
}
Else
{
PlotColor=Rgb(0,0,255);
}
PlotNumeric("DMI Osc", DMIOsc,0,PlotColor);
PlotNumeric("0", 0);