DMI Power Move

Translate the MTF DMI indicator into a seamless scan, that helps you find momentum-based moves before they happen.

youtube-video-thumbnail

Welcome to the twelfth episode of “How to Thinkscript”. We are TOSIndicators.com, home of the Volatility Box, the most robust ThinkOrSwim indicator based on statistical models built for large institutions and hedge funds.

Power Move Scans

In this tutorial, we show you how to take the Multi Time Frame DMI indicator from last week, and turn them into powerful scans that help us get into momentum-based moves, before they happen.

We started by updating our MTF DMI indicator first (the member feedback that fueled these changes is available below for those of you that are curious).

The updated indicator is available for free download on the download page for the MTF DMI.

But, we'll show you a before and after snapshot of the S&P 500 using the SPY, with the new MTF DMI Colored Candles.

If you’d like to skip the tutorial and start playing with the indicator right away, you can download the Power Move Scans for free below.

Member Feedback

Below are some snippets of feedback from our awesome community, that was instrumental in helping us improve this indicator:

“Long story short, I learned that DMI numerical values weren't predictive of winning trades. What mattered was the slope of the DMI+ and ADX. I found the DMI- least correlated to winning trades, so eventually removed it from the display, as seen at the bottom of the pic. Notice how the DMI+ mirrors price movement fairly well? I found it was easiest to trade the highs, lows and ADX crossovers of the DMI+ and forget about the DMI-.”
- L

“I use DMI/ADX as follows.   ADX >20 (some people use 25) price is trending... but it does not tell you which way.  DMI+ crosses DMI - then you have a change in price direction but only meaningful if ADX >20.”
- Dick

“Crossovers of the DMI lines are often unreliable because they frequently give false signals when volatility is low and late signals when volatility is high.
- Don (via research)

“I'm typically looking at 15 as low ADX and 25 as a Trend developing.
- Dorothy

Bullish Puzzle Block Code:

Here is the bullish puzzle block, discussed in the scan:

input length = 14;
input ADXLength = 20;
input averageType = AverageType.WILDERS;

def HiDiff = high - high[1];
def LoDiff = low[1] - low;
def PlusDM = if HiDiff > LoDiff and HiDiff > 0 then HiDiff else 0;
def MinusDM =  if LoDiff > HiDiff and LoDiff > 0 then LoDiff else 0;
def ATR = MovingAverage(averageType, TrueRange(high, close,        low), length);
def Adx = DMI(length, averageType).ADX;
def Plus = 100 * MovingAverage(averageType, PlusDM, length) / ATR;
def Minus = 100 * MovingAverage(averageType, MinusDM, length) / ATR;
def BullishSignal = Plus crosses above Minus;
def BearishSignal = Plus crosses below Minus;

plot BullishZone = Plus > Minus and ADX >= ADXLength;
def BearishZone = Plus < Minus and ADX >= ADXLength;
def NeutralZone = !BullishZone and !BearishZone;

Bearish Puzzle Block Code:

Here is the bullish puzzle block, discussed in the scan:

input length = 14;
input ADXLength = 20;
input averageType = AverageType.WILDERS;

def HiDiff = high - high[1];
def LoDiff = low[1] - low;
def PlusDM = if HiDiff > LoDiff and HiDiff > 0 then HiDiff else 0;
def MinusDM =  if LoDiff > HiDiff and LoDiff > 0 then LoDiff else 0;
def ATR = MovingAverage(averageType, TrueRange(high, close,        low), length);
def Adx = DMI(length, averageType).ADX;
def Plus = 100 * MovingAverage(averageType, PlusDM, length) / ATR;
def Minus = 100 * MovingAverage(averageType, MinusDM, length) / ATR;
def BullishSignal = Plus crosses above Minus;
def BearishSignal = Plus crosses below Minus;

def BullishZone = Plus > Minus and ADX >= ADXLength;
def BearishZone = Plus < Minus and ADX >= ADXLength;
def NeutralZone = !BullishZone and !BearishZone;

Neutral Puzzle Block Code:

Here is the neutral puzzle block, discussed in the scan:

input length = 14;
input ADXLength = 20;
input averageType = AverageType.WILDERS;

def HiDiff = high - high[1];
def LoDiff = low[1] - low;
def PlusDM = if HiDiff > LoDiff and HiDiff > 0 then HiDiff else 0;
def MinusDM =  if LoDiff > HiDiff and LoDiff > 0 then LoDiff else 0;
def ATR = MovingAverage(averageType, TrueRange(high, close,        low), length);
def Adx = DMI(length, averageType).ADX;
def Plus = 100 * MovingAverage(averageType, PlusDM, length) / ATR;
def Minus = 100 * MovingAverage(averageType, MinusDM, length) / ATR;
def BullishSignal = Plus crosses above Minus;
def BearishSignal = Plus crosses below Minus;

def BullishZone = Plus > Minus and ADX >= ADXLength;
def BearishZone = Plus < Minus and ADX >= ADXLength;
plot NeutralZone = !BullishZone and !BearishZone;

Conclusion & Download

Thanks for watching the twelfth episode of "How to thinkScript" - and thank you all for being such amazing members of this community.

This tutorial (and indicator) is evidence of the power of collaboration, and working together as traders to share knowledge and build tools that help all of us to consistently profit.

Click the button below to download the DMI Power Move Scans

Table of Contents
    Add a header to begin generating the table of contents