一、动向指标DMI简介
-
交易信号的生成
-
当+DI线上穿-DI线,且ADX值上升时,视为买入信号。
-
当-DI线上穿+DI线,且ADX值下降时,视为卖出信号。
二、构建基于DMI的交易策略
-
确定计算周期,计算+DI、-DI和ADX。 -
设定交易信号的生成规则。 -
根据DMI指标生成买入和卖出信号。

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt
def calculate_dmi(df, period=14): df['HH'] = df['High'].rolling(window=period).max() df['LL'] = df['Low'].rolling(window=period).min() df['+DM'] = np.where((df['High'] - df['High'].shift(1)) > (df['Low'].shift(1) - df['Low']), (df['High'] - df['High'].shift(1)), 0) df['-DM'] = np.where((df['Low'] - df['Low'].shift(1)) < (df['High'].shift(1) - df['High']), -(df['Low'] - df['Low'].shift(1)), 0) df['+DI'] = (df['+DM'].rolling(window=period).sum()) / (df['HH'] - df['LL']).rolling(window=period).sum() df['-DI'] = (df['-DM'].rolling(window=period).sum()) / (df['HH'] - df['LL']).rolling(window=period).sum() df['DX'] = (abs(df['+DI'] - df['-DI']) / (df['+DI'] + df['-DI'])) * 100 df['ADX'] = df['DX'].rolling(window=period).mean()
df['Buy_Signal'] = np.where((df['+DI'] > df['-DI']) & (df['ADX'] > 25), 1, 0) df['Sell_Signal'] = np.where((df['-DI'] > df['+DI']) & (df['ADX'] < 50), -1, 0)
return df['Buy_Signal'], df['Sell_Signal']
# 假设df是包含股票价格的DataFramebuy_signal, sell_signal = calculate_dmi(df)
# 绘制交易信号plt.figure(figsize=(14, 7))plt.plot(df['Close'], label='Close Price', alpha=0.5)plt.plot(df[buy_signal == 1].index, df['Close'][buy_signal == 1], '^', markersize=10, color='green', label='Buy Signal')plt.plot(df[sell_signal == -1].index, df['Close'][sell_signal == -1], 'v', markersize=10, color='red', label='Sell Signal')plt.legend()plt.show()
-
策略回测
四、结语
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/106025
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!