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

import pandas as pd
import numpy as np
import 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是包含股票价格的DataFrame
buy_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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!