ADX 和 DMI:判断“有没有趋势”比判断方向更重要

青 青柠量化
2026-10-13
沪深300上+DI高于-DI且ADX大于20择时,10年收益+48.3%、回撤-18.9%。

一句话结论:ADX 用来过滤个股信号没用,用来判断大盘很有用。全 A 股 +DI 上穿 −DI 持有 20 天跑输全市场,加上「ADX > 25」反而更差;但在沪深 300 上,方向向上且 ADX > 20 才持有,10 年收益 +48.3%、最大回撤只有 −18.9%。

第三章的指标都在回答「往哪个方向走」。这一章开始回答另一个问题:现在到底有没有趋势? 很多趋势策略亏钱,就是因为在没有趋势的震荡市里来回打脸。ADX 就是为这个问题设计的。

沪深300上+DI高于-DI且ADX大于20择时,10年收益+48.3%、回撤-18.9%。
沪深300上+DI高于-DI且ADX大于20择时,10年收益+48.3%、回撤-18.9%。

一、原理和公式

DMI(趋向指标)由美国技术分析师 Welles Wilder 在 1978 年提出,包含三条线:

线含义怎么看
+DI上涨的力量今天的最高价比昨天高出多少,平滑后除以波动幅度
−DI下跌的力量今天的最低价比昨天低出多少,平滑后除以波动幅度
ADX趋势的强度+DI 和 −DI 差距的平滑值,不分方向

关键在于 ADX 不管涨跌,只看强弱:

  • – ADX < 20:没有明显趋势,震荡市。
  • – ADX > 25:趋势明显。
  • – ADX > 40:趋势非常强。

常见用法是把方向和强度结合起来:+DI 上穿 −DI 确定方向,ADX 大于 25 确认有趋势,才入场。青柠里 ADX 和 DMI 是同一套计算,默认周期 14。


二、青柠数据实验 1:ADX 能过滤掉假信号吗

全 A 股 2016 年 1 月至 2026 年 10 月。+DI 上穿 −DI 当天记一次信号,第二天开盘买入,持有 20 天,和同一天全部股票平均收益比较。

规则信号次数20 天收益胜率20 天超额扣 0.15% 成本后
+DI 上穿 −DI(全部)394,156+0.85%47.9%−0.19%−0.34%
且 ADX > 2560,907+1.01%48.9%−0.29%−0.44%
且 ADX < 20255,456+0.85%47.7%−0.14%−0.29%
三组+DI上穿-DI信号扣成本后20日超额全部为负,ADX>25过滤后最差。
三组+DI上穿-DI信号扣成本后20日超额全部为负,ADX>25过滤后最差。

加了 ADX > 25 过滤,信号减少到原来的 15%,超额却从 −0.19% 变成 −0.29%。在「没有趋势」的 ADX < 20 里,反而是三组里最好的。

再试试给第 10 课的「收盘上穿 MA20」加 ADX 过滤:

规则信号次数20 天收益20 天超额
上穿 MA20(全部)526,032+0.88%−0.12%
且 ADX > 25165,686+0.91%−0.07%
且 ADX < 20256,724+0.96%−0.09%

几乎没有变化。在 A 股个股上,ADX 过滤不能把跑输的信号变成跑赢。


三、青柠数据实验 2:高 ADX 意味着什么

把每天所有股票按 ADX 和方向分组,看之后 20 天的超额:

ADX方向向上(+DI > −DI)方向向下(+DI < −DI)
15 以下−0.05%−0.14%
15 ~ 20−0.09%−0.02%
20 ~ 25−0.25%+0.11%
25 ~ 30−0.23%+0.31%
30 ~ 40−0.27%+0.71%
40 以上−0.29%+1.34%

规律非常清楚:

  • – 方向向上时,ADX 越高,之后越差。 强势上涨的股票之后跑输。
  • – 方向向下时,ADX 越高,之后越好。 ADX > 40 且正在强烈下跌的股票,之后 20 天跑赢全市场 1.34%。

这又是第三章「追强跑输、买弱跑赢」的规律:ADX 很高时,往往是一段趋势已经走到末端,接下来更可能反转,而不是延续。


四、分年份和牛熊

+DI 上穿 −DI 每年的 20 天超额:

年份信号次数20 天收益胜率20 天超额
201621,727+1.76%55.0%−0.08%
201722,974−0.93%43.4%−0.19%
201829,295−3.45%33.0%−0.34%
201931,897+2.48%52.5%−0.12%
202033,114+1.21%47.1%+0.21%
202138,012+2.12%51.8%+0.14%
202241,141+0.14%47.6%−0.17%
202346,962−0.19%45.2%−0.17%
202442,699+1.65%45.2%−0.41%
202547,821+3.61%59.0%−0.15%
202638,514−0.74%42.7%−0.79%
市况信号次数20 天收益20 天超额
牛市208,330+0.50%−0.14%
熊市185,826+1.25%−0.25%

11 年里只有 2020、2021 两年为正。


五、青柠数据实验 3:用 ADX 判断大盘

沪深 300 指数上,每次换仓扣 0.075%:

做法总收益年化最大回撤换仓次数
买入持有+14.18%+1.24%−45.60%1
+DI > −DI 持有+33.59%+2.72%−20.99%228
+DI > −DI 且 ADX > 20 持有+48.26%+3.72%−18.91%118

这次 ADX 过滤起了作用:只看方向就已经跑赢买入持有一倍多;再加上「ADX > 20」,换仓次数减半,收益更高,最大回撤从 45.6% 降到 18.9%。

为什么个股上 ADX 没用、指数上有用?指数是几百只股票的平均,趋势更平滑持久,「有没有趋势」的判断更可靠;个股的 ADX 很高时,常常是暴涨暴跌之后,接下来更容易反转。

和前几课一样要提醒:这 10 年沪深 300 有一段三年半的下跌,择时规则躲过了大部分,这个结果不能简单外推。


六、常见误区

「ADX 高说明趋势强,该顺势追」
个股上方向向上且 ADX > 40,之后 20 天跑输 0.29%。

「加 ADX > 25 过滤,能去掉震荡市里的假信号」
个股上过滤后反而更差。指数上有效,但阈值 20 已经够用。

「ADX 可以判断涨跌」
ADX 不分方向,下跌趋势里 ADX 一样会升高。方向要看 +DI 和 −DI。


在青柠中实操

  1. 1. 量化策略 → + 新建策略,在 指标 → 趋势 里拖入 平均趋向指标(ADX),周期 14。
  2. 2. 用 金叉/上穿,快线选 +DI、慢线选 -DI。
  3. 3. 再加一条 数值比较:ADX > 20。
  4. 4. 用 全部满足 (AND) 连起来接 入场信号;用 死叉/下穿(+DI 下穿 −DI)接 离场信号。
  5. 5. 先对沪深 300 相关标的回测,再用 批量回测 跑个股,对比两者的差别。
策略库回测 · 沪深A股 · 近 1 年日 K · 默认参数 更新于 2026-09-11 19:02 · 每日重算
# 策略 类型 年化收益 夏普 最大回撤 胜率 评级
01 左侧趋势抄底·急跌收阳 趋势 +1.3% 0.85 16.4% 83% A 导入复现
02 MACD金叉死叉 趋势 +0.9% 0.08 20.8% 35% PRO 导入复现
03 RSI超买超卖 震荡 +0.8% 0.23 30.8% 45% PRO 导入复现

更多策略可以在青柠策略市场查看。下一课(第 20 课)讲 SAR 抛物线:自带移动止损的指标。


常见问题

ADX 和 DMI 有什么区别?
DMI 是整套指标(+DI、−DI、ADX),ADX 是其中衡量强度的那条线。青柠里两者计算相同。

ADX 阈值用 20 还是 25?
教材常用 25。本课在沪深 300 上用 20 已经效果明显;个股上两种阈值都没用。

为什么 ADX 这么慢?
它经过两次平滑:先平滑 +DI、−DI,再平滑它们的差距。所以 ADX 拐头通常比价格晚很多。


口径说明

股票池为全 A 股,排除 ST(按当前名称)和北交所,剔除未复权收盘价低于 3 元的股票,价格后复权;区间 2016-01-04 至 2026-10-13,共 4,974 只股票、2,615 个交易日。+DI、−DI、ADX 按 Wilder 平滑(系数 1/14),个股在数据库中截断到最近 70 根 K 线递归计算,与教科书算法相比 ADX 中位相对误差约 0.47%;沪深 300 使用完整的教科书算法。金叉定义为前一日 +DI 不高于 −DI、当日 +DI 高于 −DI。信号日收盘确认,次日开盘买入,持有至第 20 个交易日收盘;次日一字涨停剔除。ADX 分组为每个股票日按当日状态归组。超额收益 = 信号股票收益 − 同日股票池全部股票同口径平均。牛熊按沪深 300 收盘相对其 250 日均线划分。沪深 300 使用指数日线(000300.SH,价格指数,不含分红),每次换仓扣 0.075%。2026 年为不完整年度。数据由青柠量化回测数据库计算。历史统计不代表未来表现,不构成投资建议。

读到这里,不如自己验证一次

文章里的逻辑,你可以在青柠量化里用真实数据重新跑一遍。免费,零代码。

免费下载客户端

写下你的看法

邮箱仅用于回复通知,不会公开。