用python程序编写出求DMI指标
时间: 2024-04-01 14:31:18 浏览: 167
mt4 DMI指标源码
好的,DMI指标是一个技术分析指标,可以用来衡量股票或其他交易资产的趋势强度。下面是一个用Python编写的DMI指标的示例代码:
```python
import pandas as pd
import numpy as np
def DMI(data, n, n_ADX):
i = 0
UpI = [0]
DoI = [0]
while i + 1 <= data.index[-1]:
UpMove = data.loc[i + 1, 'High'] - data.loc[i, 'High']
DoMove = data.loc[i, 'Low'] - data.loc[i + 1, 'Low']
if UpMove > DoMove and UpMove > 0:
UpD = UpMove
else:
UpD = 0
UpI.append(UpD)
if DoMove > UpMove and DoMove > 0:
DoD = DoMove
else:
DoD = 0
DoI.append(DoD)
i = i + 1
i = 0
TR_l = [0]
while i < data.index[-1]:
TR = max(data.loc[i + 1, 'High'], data.loc[i, 'Close']) - min(data.loc[i + 1, 'Low'], data.loc[i, 'Close'])
TR_l.append(TR)
i = i + 1
TR_s = pd.Series(TR_l)
ATR = pd.Series(TR_s.ewm(span=n, min_periods=n).mean())
UpI = pd.Series(UpI)
DoI = pd.Series(DoI)
PosDI = pd.Series(UpI.ewm(span=n, min_periods=n).mean() / ATR)
NegDI = pd.Series(DoI.ewm(span=n, min_periods=n).mean() / ATR)
i = 0
DX = [0]
while i + 1 <= data.index[-1]:
DX1 = abs(PosDI[i + 1] - NegDI[i + 1])
DX2 = abs(PosDI[i + 1] + NegDI[i + 1])
DX.append(100 * DX1 / DX2)
i = i + 1
DX = pd.Series(DX)
ADX = pd.Series(DX.ewm(span=n_ADX, min_periods=n_ADX).mean(), name='ADX_' + str(n) + '_' + str(n_ADX))
ADXR = pd.Series((ADX + ADX.shift(n_ADX)) / 2, name='ADXR_' + str(n) + '_' + str(n_ADX))
return pd.concat([PosDI, NegDI, ADX, ADXR], axis=1)
```
该函数采用一个pandas数据框作为输入,其中必须包含一个“High”列和一个“Low”列,分别表示股票的最高价和最低价。它还需要两个整数作为输入,分别表示DMI指标的时间间隔和ADX指标的时间间隔。
该函数返回一个pandas数据框,其中包含了上升方向指标(Positive Directional Indicator)、下降方向指标(Negative Directional Indicator)、平均方向指标(Average Directional Indicator)和平均方向指标相对强度(Average Directional Indicator Rating)。
你可以根据自己的需要来调整该函数的参数,例如n和n_ADX的值。同时,也可以将该函数与其他技术分析指标结合起来,来进行更深入的分析。
阅读全文