趋势动量探测仪:平均趋向指数(ADX指标)全解析
一、ADX 是什么?为什么它能衡量趋势“强度”?
在金融技术分析中,仅仅知道价格上涨或下跌是不够的,我们更想知道的是:趋势是否“强势”、是否“有持续性”?
平均趋向指数(Average Directional Index,简称 ADX) 正是为此而生。它并不判断趋势方向,而是衡量趋势的“强度”。
趋势强,顺势交易;趋势弱,震荡思维。
二、pandas_ta 中 ADX 的函数结构
使用 pandas_ta.adx()
可方便地获得如下四个指标:
指标名 | 含义 |
---|---|
ADX_14 |
趋势强度指数 |
ADXR_14_2 |
平滑的趋势强度(加权平均) |
DMP_14 |
+DI(正向运动指标) |
DMN_14 |
-DI(负向运动指标) |
调用方式如下:
import pandas_ta as ta
df = ta.adx(
high=df['high'],
low=df['low'],
close=df['close'],
length=14,
adxr_length=2
)
三、ADX原理剖析:由哪些部分组成?
ADX 是由两条“方向运动指标”衍生而来:
- +DI(DMP):衡量上涨动能
- -DI(DMN):衡量下跌动能
- ADX:是 +DI 与 -DI 差值的绝对值的加权平均
具体公式简化如下:
$$ \text{ADX} = \text{MA} \left( \frac{|\text{+DI} - \text{-DI}|}{\text{+DI} + \text{-DI}} \times 100 \right) $$
并辅以 ADXR(平滑版ADX),作为信号滤波器。
四、常见用法与信号解读
✅ 判断趋势强度
- ADX < 20:趋势较弱,震荡区间
- ADX > 25:趋势强劲,可考虑跟随
- ADX > 40:趋势非常强,但也可能“过热”
✅ 判断趋势方向
- 若 +DI > -DI:上升趋势
- 若 -DI > +DI:下降趋势
结合如下交易逻辑:
if df["ADX_14"].iloc[-1] > 25:
if df["DMP_14"].iloc[-1] > df["DMN_14"].iloc[-1]:
print("趋势向上且强势,可考虑做多")
else:
print("趋势向下且强势,可考虑做空")
五、图表实战:趋势增强信号识别
我们可以将 ADX 与 +DI、-DI 绘制到一个图表中,辅助识别信号:
import matplotlib.pyplot as plt
df[["ADX_14", "DMP_14", "DMN_14"]].plot(figsize=(12, 6), title="ADX 趋势强度与方向")
plt.axhline(y=25, color='gray', linestyle='--', label='趋势强弱分界线')
plt.legend()
plt.show()
视觉上,一旦 ADX 突破 25,说明市场有明显的方向性,不再是震荡。
六、与其他指标的组合策略
为了避免ADX单独指标“趋势滞后”的特性,常与以下指标组合使用:
- 布林带或ATR:过滤震荡时期
- MACD / 均线突破:提供入场方向
- RSI:避免趋势过度扩张陷阱
七、pandas_ta 输出结构说明
pandas_ta 返回的是一个含有以下4列的 DataFrame
:
列名 | 说明 |
---|---|
ADX_14 |
主指标,趋势强度 |
ADXR_14_2 |
平滑版趋势强度 |
DMP_14 |
正向动能指标 |
DMN_14 |
负向动能指标 |
可以轻松与价格线、布林带等在K线图中合并可视化。
八、总结:为什么“平均趋向动量指标”值得纳入你的系统?
无论你是日内交易者还是波段投资者,判断当前市场是“震荡”还是“趋势”是最基础也是最重要的判断。而ADX 提供了客观、标准化的趋势强度评分,帮助你:
- 避免震荡期做趋势单的亏损
- 捕捉趋势启动时的“上车机会”
- 在趋势衰退前及时减仓止盈
凭借 pandas_ta
的简单调用能力,你可以轻松将 ADX 纳入交易系统中,打造属于自己的趋势动量滤波器。
👉 中文名称建议:平均趋向动量指标 该名称兼顾了 ADX 衡量趋势方向强度的特征,同时突出了它对正负方向运动的融合处理,既贴近原意,又便于中文用户理解与检索。