Skip to content

ADX 深度揭秘:精准捕捉市场交易趋势反转的秘诀!(附完整源码)

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:大家好,今天我们来聊聊ADX指标。它不仅能帮我们判断市场趋势的强弱,还能提前发出反转信号。在这篇文章中,我会分享如何用ADX指标在波动的市场中做出更聪明的决策,帮你更清晰地看懂市场变化,抓住最佳买卖时机。

一、什么是 ADX?

平均方向指数(Average Directional Index,简称ADX)是一种用于评估市场趋势强度的技术分析指标。它由J. Welles Wilder Jr.在1978年提出,旨在帮助交易者识别市场是否处于趋势状态,以及趋势的强度。

1.1 ADX 解读

ADX 衡量的是趋势的强度,而不是方向。ADX的值范围从0到100,通常被用来判断市场的趋势是否强劲,以及是否适合进行趋势交易。

  • 0-25:市场趋势较弱,可能处于盘整状态。
  • 25-50:市场趋势开始增强,适合趋势交易。
  • 50-75:市场趋势强劲,交易者应关注趋势的延续。
  • 75-100:市场趋势极为强劲,需谨慎操作,避免追高。

1.2 ADX的组成部分

ADX指标由三个主要部分组成:

  • 正向指标(+DI):衡量当前价格上涨的强度。
  • 负向指标(-DI):衡量当前价格下跌的强度。
  • ADX线:通过计算正向和负向指标之间的差异,得出趋势强度的数值。

1.3 ADX的计算方法

ADX的计算过程相对复杂,通常包括以下步骤:

  • 计算当前周期的真实范围(True Range, TR)。
  • 计算正向移动(+DM)和负向移动(-DM)。
  • 计算平滑的+DI和-DI值。
  • 最后,计算ADX值,通常使用14个周期的平滑平均。

1.4 使用ADX的注意事项

虽然ADX是一个强大的工具,但交易者在使用时应注意以下几点:

  • ADX并不指示趋势的方向,仅反映趋势的强度。
  • 在低波动市场中,ADX可能会产生误导信号。
  • 建议结合其他技术指标和分析方法,以提高交易决策的准确性。

平均方向指数(ADX)是一个有效的工具,可以帮助交易者识别市场趋势的强度。通过合理运用ADX,交易者可以更好地把握市场机会,制定相应的交易策略。

二、代码实现

下面是一个简单的 Python 代码实例,它实现了如何结合使用 Matplotlib 和 ipywidgets 来生成并呈现 ADX(平均方向指数)的图形化程序。

# 安装依赖库
!pip install ta yfinance pandas matplotlib ipywidgets

# 导入必要的库
import yfinance as yf
import matplotlib.pyplot as plt
from ta.trend import ADXIndicator
import pandas as pd
import ipywidgets as widgets
from IPython.display import display

# 定义可用的货币对
currency_pairs = {
    'EUR/USD': 'EURUSD=X',
    'CNY/USD': 'CNYUSD=X',
    'GBP/USD': 'GBPUSD=X',
    'AUD/USD': 'AUDUSD=X',
    'NZD/USD': 'NZDUSD=X',
    'USD/CAD': 'USDCAD=X',
    'USD/CHF': 'USDCHF=X',
    'USD/JPY': 'JPY=X'
}

# 创建下拉菜单选择货币对
currency_dropdown = widgets.Dropdown(
    options=list(currency_pairs.keys()),
    value='EUR/USD',
    description='Currency Pair:',
    disabled=False
)

# 创建按钮以触发更新
update_button = widgets.Button(description="Update Chart")

# 创建输出区域用于显示图表
output = widgets.Output()

# 获取数据
        currency_data = yf.download(symbol, start='2023-01-01', end='2025-01-15')

# 检查数据是否为空
        if currency_data.empty:
            print("Failed to fetch data. Please check your internet connection or the currency pair symbol.")
        else:
# 提取 high、low 和 close,并确保它们是 Series
            high = currency_data['High'].squeeze()  # 将 DataFrame 转换为 Series
            low = currency_data['Low'].squeeze()    # 将 DataFrame 转换为 Series
            close = currency_data['Close'].squeeze()  # 将 DataFrame 转换为 Series



                # 计算 DMI, +DI, 和 -DI
                currency_data['DMI'] = adx.adx()
                currency_data['+DI'] = adx.adx_pos()
                currency_data['-DI'] = adx.adx_neg()

                # 使用移动平均平滑 DMI, +DI, 和 -DI
                smoothing_window = 14  # 可根据需要调整窗口大小
                currency_data['DMI_Smooth'] = currency_data['DMI'].rolling(window=smoothing_window).mean()
                currency_data['+DI_Smooth'] = currency_data['+DI'].rolling(window=smoothing_window).mean()
                currency_data['-DI_Smooth'] = currency_data['-DI'].rolling(window=smoothing_window).mean()

                # 删除 NaN 值
                currency_data.dropna(inplace=True)

                # 创建新的图表
                fig, ax = plt.subplots(2, 1, figsize=(14, 10))

                # 绘制收盘价
                ax[0].plot(currency_data['Close'], label=f'{selected_currency} Close', color='blue', linewidth=2)
                ax[0].set_title(f'{selected_currency} Closing Price', fontsize=16)
                ax[0].set_xlabel('Date', fontsize=12)
                ax[0].set_ylabel('Price', fontsize=12)
                ax[0].grid(True)
                ax[0].legend()

代码释义:

1. 我们首先要导入必要的库:

  • yfinance 获取货币数据。
  • matplotlib.pyplot 用于绘图。
  • ta.trend 用于 ADX 指标。
  • ipywidgets 用于创建交互式网络应用程序。

2. 定义可用的货币对:字典中包含可用的货币对,供下拉菜单中选择。

3. 创建下拉菜单并选择货币对:创建一个下拉菜单,让用户选择货币对。

4 .获取数据:currency_data 根据所选货币对,代码会从雅虎财经下载历史数据。

5. 初始化 ADXIndicator:ADX 使用最高价、最低价和收盘价计算。

6. 计算 DMI:代码计算 DMI、+DI 和 -DI 值。

7. Smoothing(平滑): 采用滚动平均法平滑 DMI 和 DI 值,使其更加清晰。

8. 绘图:

  • 收盘价和平滑 DMI 使用 Matplotlib 绘制。
  • 这些图表以 ipywidgets 格式显示,允许用户交互式地直观了解价格和 ADX 趋势。

完整代码在我的Colab笔记本里,可以点击下面的链接申请:

https://colab.research.google.com/drive/1-SiydSLz6BAcUfp5MjwltKdfJ_OJXSeu?usp=sharing

三、实例分析

想象一下,当你看到 ADX 从 35 快速攀升至高点,随后开始回落,这意味着什么?是不是应该重新审视你的仓位了?

这可能预示着趋势反转即将到来,正是根据市场方向买入或卖出的绝佳时机……接下来,我们看下面几个实际例子。

上图是从2023年1月到2024年9月的EUR/USD月度收盘价,以及相应的方向运动指数(DMI)指标,包括ADX、+DI、-DI和DMI阈值(25)。分析要点如下:

  • 趋势强度:ADX值高于25表示趋势强劲,低于25则可能表示趋势减弱或市场波动。
  • 潜在趋势反转:当ADX在高位(如35)见顶并开始下降时,可能预示着趋势反转,此时应重新评估仓位。
  • 实际应用:黑色椭圆圈出的部分显示了ADX指标在35附近达到峰值并开始下降,这可能预示着趋势反转的信号。在+DI上穿-DI且ADX高于25时考虑做多,在-DI上穿+DI且ADX高于25时考虑做空。同时,设置止损和止盈以有效管理风险。

GBP/USD价格和方向运动指数(DMI)时,黑色椭圆圈出的部分标志着ADX指标在35附近达到峰值并开始下降,这预示着趋势反转的信号。在实际应用中,当ADX从高位回落时,交易者应密切关注市场动态,需要调整仓位或准备迎接潜在的市场转向。

上图也可以用同样的方法来分析AUD/USD,DMI指标显示可在强劲的熊市趋势中考虑做空。

四、观点总结

本文主要介绍了平均方向指数(ADX)的概念、应用以及如何通过Python代码实现和可视化ADX,帮助交易者识别市场趋势和潜在的趋势反转。

  • ADX指标是识别市场趋势强度的关键工具,能够帮助交易者判断市场是否处于强势趋势状态。
  • 趋势反转的预示:ADX指数的高峰和随后的下降可能表明趋势的尾声,为交易者提供买入或卖出的时机。
  • 利用Python进行ADX指标的实现和可视化,可以通过ipywidgets创建交互式的网络应用程序,使用Matplotlib进行数据绘图,帮助交易者更直观地理解市场动态。
  • 交易者应该重视DMI指标,因为它能够提供市场趋势和潜在反转的重要线索,从而有助于制定和优化交易策略。

完整代码在我的Colab笔记本里,可以点击下面的链接申请:

https://colab.research.google.com/drive/1-SiydSLz6BAcUfp5MjwltKdfJ_OJXSeu?usp=sharing

感谢您阅读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!


本文内容仅限技术探讨和学习,不构成任何投资建议。

Published inAI&Invest专栏

Be First to Comment

    发表回复