全球数字财富领导者

DMI指标选股公式:ADX识别趋势强弱,助你筛选牛股

2025-02-04 00:11:56
今日美股网
媒体
关注
0
0
获赞
粉丝
喜欢 0 0收藏举报
— 分享 —
摘要: DMI指标选股公式介绍DMI(Directional Movement Index)指标是一套由多个分量组成的系统,主要包括+DI(上升趋势指标)、-DI(下降趋势指标)和ADX(平均趋向指数)。ADX用于衡量趋势的强度,而+DI与-DI的交叉则用于识别趋势方向。ADX值越高,趋势越强。参数与数值的意义参数数值意义Period14计算DMI的所有分量(+DI...

DMI指标选股公式介绍

以下代码由今日美股网(www.TodayUSStock.com)代码学院提供,DMI(Directional Movement Index)指标是一套由多个分量组成的系统,主要包括+DI(上升趋势指标)、-DI(下降趋势指标)和ADX(平均趋向指数)。ADX用于衡量趋势的强度,而+DI与-DI的交叉则用于识别趋势方向。ADX值越高,趋势越强。

参数与数值的意义

参数 数值 意义
Period 14 计算DMI的所有分量(+DI, -DI, ADX)的周期,标准设置为14天,用于确定趋势的中期表现。

针对不同产品的推荐参数

产品类型 推荐参数(Period) 推荐理由
股票日线图 14 标准设置,适用于大多数股票市场的日线图,提供较好的趋势识别。
外汇加密货币(短期图表) 10 市场波动性更高,较短周期可以更快捕捉到趋势变化。
期货市场 14 期货市场趋势性强,标准周期通常有效。

国内股票软件代码

通达信(中国)

// 通达信DMI指标选股公式
PDM:=IF(HIGH-HIGH[1]>LOW[1]-LOW,HIGH-HIGH[1],0);
MDM:=IF(LOW-LOW[1]>HIGH[1]-HIGH,LOW-LOW[1],0);
TR:=MAX(MAX(HIGH-LOW,ABS(HIGH-CLOSE[1])),ABS(LOW-CLOSE[1]));
PDI:=SMA(PDM,14,1)/SMA(TR,14,1)*100;
MDI:=SMA(MDM,14,1)/SMA(TR,14,1)*100;
DX:=ABS(PDI-MDI)/(PDI+MDI)*100;
ADX:=MA(DX,6);
// 筛选ADX>=25的股票,表示有强势趋势
ADX>=25;

加载方法:进入“公式系统”菜单,选择“自定义指标”,输入或粘贴代码,保存为新指标,然后在图表中加载或在选股条件中使用。

同花顺(中国)

// 同花顺DMI指标选股公式
PDM:=IF(H-H[1]>L[1]-L,H-H[1],0);
MDM:=IF(L-L[1]>H[1]-H,L-L[1],0);
TR:=MAX(MAX(H-L,ABS(H-C[1])),ABS(L-C[1]));
PDI:=SMA(PDM,14,1)/SMA(TR,14,1)*100;
MDI:=SMA(MDM,14,1)/SMA(TR,14,1)*100;
DX:=ABS(PDI-MDI)/(PDI+MDI)*100;
ADX:=MA(DX,6);
ADX>=25;

加载方法:进入“选股器”或“条件选股”,选择“自定义选股公式”,输入或粘贴代码并保存,运行选股。

大智慧(中国)

// 大智慧DMI指标选股公式
PDM:=IF(HIGH-HIGH[1]>LOW[1]-LOW,HIGH-HIGH[1],0);
MDM:=IF(LOW-LOW[1]>HIGH[1]-HIGH,LOW-LOW[1],0);
TR:=MAX(MAX(HIGH-LOW,ABS(HIGH-CLOSE[1])),ABS(LOW-CLOSE[1]));
PDI:=SMA(PDM,14,1)/SMA(TR,14,1)*100;
MDI:=SMA(MDM,14,1)/SMA(TR,14,1)*100;
DX:=ABS(PDI-MDI)/(PDI+MDI)*100;
ADX:=MA(DX,6);
ADX>=25;

加载方法:进入“自定义指标”或“选股”功能,选择“公式编辑器”,输入代码并保存,应用到图表或选股器中。

国外股票软件代码

MetaTrader 4/5 (MT4/MT5)

// MetaTrader 4/5 DMI指标选股公式
double PDM = MathMax(High[0] - High[1], 0);
double MDM = MathMax(Low[1] - Low[0], 0);
double TR = MathMax(MathMax(High[0] - Low[0], MathAbs(High[0] - Close[1])), MathAbs(Low[0] - Close[1]));
double PDI = iMAOnArray(PDM, 0, 14, 0, MODE_SMA, 1) / iMAOnArray(TR, 0, 14, 0, MODE_SMA, 1) * 100;
double MDI = iMAOnArray(MDM, 0, 14, 0, MODE_SMA, 1) / iMAOnArray(TR, 0, 14, 0, MODE_SMA, 1) * 100;
double DX = MathAbs(PDI - MDI) / (PDI + MDI) * 100;
double ADX = iMAOnArray(DX, 0, 6, 0, MODE_SMA, 1);
return ADX >= 25;

加载方法:在“导航器”中右键点击“指标”选项,选择“自定义指标”,点击“新建”,粘贴代码,保存并编译指标,然后应用到图表上。

TradingView (Pine Script)

// TradingView DMI指标选股公式
period = 14
adxPeriod = 6

// DMI计算
highDiff = high - high[1]
lowDiff = low[1] - low
trueRange = max(max(high - low, abs(high - close[1])), abs(low - close[1]))
plusDM = highDiff > lowDiff and highDiff > 0 ? highDiff : 0
minusDM = lowDiff > highDiff and lowDiff > 0 ? lowDiff : 0
plusDI = sma(plusDM, period) / sma(trueRange, period) * 100
minusDI = sma(minusDM, period) / sma(trueRange, period) * 100
dx = abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = sma(dx, adxPeriod)
// 筛选ADX>=25的股票
adxSignal = adx >= 25

加载方法:在图表上点击“Pine Editor”,新建脚本,粘贴代码,保存并应用到图表。

Thinkorswim (美国)

// Thinkorswim DMI指标选股公式
input period = 14;
input adxPeriod = 6;

def highDiff = high - high[1];
def lowDiff = low[1] - low;
def trueRange = Max(Max(high - low, AbsValue(high - close[1])), AbsValue(low - close[1]));
def plusDM = if highDiff > lowDiff and highDiff > 0 then highDiff else 0;
def minusDM = if lowDiff > highDiff and lowDiff > 0 then lowDiff else 0;
def plusDI = Average(plusDM, period) / Average(trueRange, period) * 100;
def minusDI = Average(minusDM, period) / Average(trueRange, period) * 100;
def dx = AbsValue(plusDI - minusDI) / (plusDI + minusDI) * 100;
def adx = Average(dx, adxPeriod);
plot ADXSignal = if adx >= 25 then 1 else 0;

加载方法:在图表上点击“研究”标签,选择“编辑研究”,然后“新建研究”,粘贴代码并保存。

NinjaTrader (美国)

// NinjaTrader DMI指标选股公式
protected override void OnBarUpdate()
{
    int period = 14;
    int adxPeriod = 6;

    double highDiff = High[0] - High[1];
    double lowDiff = Low[1] - Low[0];
    double trueRange = Math.Max(Math.Max(High[0] - Low[0], Math.Abs(High[0] - Close[1])), Math.Abs(Low[0] - Close[1]));
    double plusDM = highDiff > lowDiff && highDiff > 0 ? highDiff : 0;
    double minusDM = lowDiff > highDiff && lowDiff > 0 ? lowDiff : 0;
    double plusDI = SMA(plusDM, period)[0] / SMA(trueRange, period)[0] * 100;
    double minusDI = SMA(minusDM, period)[0] / SMA(trueRange, period)[0] * 100;
    double dx = Math.Abs(plusDI - minusDI) / (plusDI + minusDI) * 100;
    double adx = SMA(dx, adxPeriod)[0];
    if (adx >= 25)
        Alert("Strong Trend Detected");
}

加载方法:从“新建”菜单中选择“指标”,编写或粘贴代码,编译并应用到图表。

eSignal (全球)

// eSignal DMI指标选股公式(需要转换到易语言)
PDM:=IF(H - H[1]>L[1] - L,H - H[1],0);
MDM:=IF(L - L[1]>H[1] - H,L - L[1],0);
TR:=MAX(MAX(H - L,ABS(H - C[1])),ABS(L - C[1]));
PDI:=Mov(PDM,14,S)/Mov(TR,14,S)*100;
MDI:=Mov(MDM,14,S)/Mov(TR,14,S)*100;
DX:=ABS(PDI - MDI)/(PDI + MDI)*100;
ADX:=Mov(DX,6,S);
StrongTrend:=ADX>=25;

加载方法:使用“易语言”编写指标,代码需要转换,在“指标”菜单中加载新指标。

优点和缺点

优点 缺点
有效识别趋势强弱 在无明显趋势的市场中表现不佳
结合+DI和-DI可以判断趋势方向 需要其他指标或分析来确认交易点
ADX帮助过滤弱势市场 在趋势反转初期可能失效

如何正确使用

  • 当ADX值高于25时,表明市场有较强的趋势,此时结合+DI与-DI的交叉判断买卖点。

  • 使用多个时间框架验证趋势的持续性。

  • 结合其他技术指标(如MACD或RSI)来确认交易信号。

  • 在历史数据上回测或在模拟账户中测试策略,以验证策略的有效性。

  • 注意市场的大环境,避免在重大经济事件或政策变化时贸然决策。

使用注意事项

DMI指标在横盘市场中可能表现不佳,因为ADX不会指示市场方向,仅指示趋势的强度。因此,在使用DMI时,市场背景的分析同样重要。

来源:今日美股网

1. 欢迎转载,转载时请标明来源为FX168财经。商业性转载需事先获得授权,请发邮件至:media@fx168group.com。
2. 所有内容仅供参考,不代表FX168财经立场。我们提供的交易数据及资讯等不构成投资建议和依据,据此操作风险自负。
go