票日线图 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时,市场背景的分析同样重要。 来源:今日美股网lg...