今天要给大家展示一种叫做“方向性运动指标”(Directional Movement Indicator,简 称 DMI)的技术分析法宝。这个指标是由技术分析大师 J. Welles Wilder 在 1978 年提 出的。别小看它哦,它可是和相对强弱指数(RSI)及平均真实波幅(ATR)等其他著 名指标一样,都是 Wilder 的杰作呢! 首先,DMI 是由三个小伙伴组成的,它们分别是平均方向指数(ADX)、正方向指标 (+DI)和负方向指标(-DI)。这三个小伙伴齐心协力,一起帮助交易者识别和衡量 市场趋势的强度和方向。听起来是不是像个神奇的团队呢? 现在,让我们来聊聊这些小伙伴是怎么工作的吧。+DI 和 -DI 是通过分析市场的最高价 和最低价来计算出来的。这俩家伙主要的任务就是告诉你,“嘿,市场是在往上走还是 往下跌?”然后呢,ADX 这个家伙就搭个台阶出场,它不关心市场是涨是跌,它只关心 “这趋势稳不稳?”简单来说,ADX 就像个专心致志的老司机,只关心车速是否平稳。 具体计算方法嘛,首先要找到每个周期的最高价和最低价,然后计算出上升幅度和下 降幅度。如果上升幅度比下降幅度大,那就认为是正方向的移动;反之,则认为是负 方向的移动。接着,我们要用一个叫做平均真实波动范围(ATR)的东西来平滑这些 数据,最后再将它们乘以 100,就得到了+DI 和-DI 了。 要计算 ADX,就更有趣了。它是通过计算+DI 和-DI 的差值的绝对值,然后除以它们的 总和,再乘以 100 得到的。这个值越大,就说明趋势越稳定。Wilder 说,ADX 超过 25 就表示市场有明显的趋势,低于 20 就意味着趋势较弱或不存在。但是呢,每个市场都 有自己的特点,所以这个数值并不是一成不变的。 DMI 的另一个重要用途就是产生交易信号。当+DI 线和-DI 线发生交叉的时候,就可能 是买入或卖出的信号。但记住,这个信号的可靠性还得看 ADX 的值。ADX 值越高,信 号就越可靠。同时,设置合适的止损也是至关重要的。 虽然 DMI 听起来像是万能的,但实际上它也有自己的局限。Wilder 最初是为了货币和 商品市场设计的 DMI,这些市场通常比股票市场波动性更大,趋势也更明显。所以, 当我们在股票市场使用 DMI 时,可能需要进行一些调整。 总而言之,DMI 是一个非常强大的工具,但想要真正掌握它,需要不断地学习和实践。 通过结合历史分析和经验,交易者可以更好地理解和运用 DMI,让它成为他们交易策 略中的一部分。 //@version=5 indicator(title="Directional Movement Index", shorttitle="DMI", format=format.price, precision=4 , timeframe="", timeframe_gaps=true) lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) len = input.int(14, minval=1, title="DI Length") up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / trur) minus = fixnan(100 * ta.rma(minusDM, len) / trur) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) plot(adx, color=#F50057, title="ADX") plot(plus, color=#2962FF, title="+DI") plot(minus, color=#FF6D00, title="-DI") 这段代码是一个用于计算方向性运动指数(Directional Movement Index,简称 DMI) 的指标。它使用了 TradingView 平台上的 Pine 脚本语言。 首先,在第一行//@version=5 中,声明了脚本所使用的版本号为 5。 接下来,在 indicator()函数中设置了一些参数: • title="Directional Movement Index" :指标标题为"Directional Movement Index"。 • shorttitle="DMI":缩写标题为"DMI"。 • format=format.price:价格格式化方式为默认值。 • precision=4:小数点精度为 4 位。 • timeframe="":时间框架为空字符串,表示当前图表所在的时间框架。 • timeframe_gaps=true:允许在图表上显示时间框架之间的空白区域。 然后定义了两个变量: • • lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50): 定义了一个整型输入变量 lensig,默认值为 14,最小值为 1,最大值为 50。该 变量用于控制 ADX 平滑程度。 len = input.int(14, minval=1, title="DI Length"):定义了另一个整型输 入变量 len,默认值也是 14,最小值同样是 1。该变量用于控制 DI 长度。 接下来进行具体计算: • 首先通过调用 ta.change()函数分别计算了上涨和下跌的价格变化,分别赋值给 变量 up 和 down。 • • 然后通过判断条件计算了 plusDM 和 minusDM 两个变量。如果 up 大于 down 且大于 0,则将 up 赋值给 plusDM;如果 down 大于 up 且大于 0,则将 down 赋值给 minusDM。否则,plusDM 和 minusDM 都为 na(不可用)。 接着使用 ta.rma()函数计算了 trur、plus 和 minus 三个变量: § trur 表示真实范围(True Range),是通过调用 ta.tr 函数计算得到的。 § plus 表示+DI 指标,是根据 plusDM、len 以及 trur 进行计算得到的。 § minus 表示-DI 指标,是根据 minusDM、len 以及 trur 进行计算得到的。 最后,在图表上绘制了 ADX、+DI 和-DI 这三条线,并设置它们的颜色。