Files
mql5/Indicators/MyIndicators/DMIStochastic_Pro.md
T
2025-11-02 13:29:46 +01:00

7.3 KiB

DMI Stochastic Professional

1. Summary (Introduction)

The DMI Stochastic, developed by Barbara Star and featured in the Stocks and Commodities Magazine (January 2013), is an innovative oscillator that combines two powerful concepts: J. Welles Wilder's Directional Movement Index (DMI) and the Stochastic Oscillator.

Instead of analyzing the price, this indicator measures the momentum of the underlying directional pressure in the market. It does this by first creating an oscillator from the difference between the Positive (+DI) and Negative (-DI) Directional Indicators, and then feeding this new value series into a standard Stochastic calculation.

The result is an oscillator that identifies overbought and oversold conditions in bullish or bearish momentum itself, providing unique insights into potential trend exhaustion and reversals.

Our DMIStochastic_Pro implementation is a professional version that includes:

  • Calculation based on either standard or Heikin Ashi candles.
  • A user-selectable formula for the internal DMI Oscillator for more intuitive use.

2. Mathematical Foundations and Calculation Logic

The calculation is a three-stage process: first building the DMI components, then creating the DMI Oscillator, and finally applying the Stochastic formula.

Required Components

  • DMI Period (N): The lookback period for the DMI calculation (e.g., 10).
  • Stochastic Periods: Fast %K Period, Slowing Period, and %D Period.

Calculation Steps (Algorithm)

  1. Calculate Directional Indicators (+DI, -DI): This initial step is identical to the standard ADX calculation.

    • First, the raw Directional Movement (+DM, -DM) and True Range (TR) are calculated for each bar.
    • These three series are then smoothed using Wilder's method (SMMA/RMA) over the DMI Period N.
    • Finally, the +DI and -DI lines are calculated: \text{+DI}_i = 100 \times \frac{\text{Smoothed +DM}_i}{\text{Smoothed TR}_i} \text{-DI}_i = 100 \times \frac{\text{Smoothed -DM}_i}{\text{Smoothed TR}_i}
  2. Create the DMI Oscillator: This is the core of the indicator. An oscillator is created from the difference between the two directional indicators. Our implementation allows for two formulas:

    • Intuitive (Default): \text{DMI Oscillator}_i = \text{+DI}_i - \text{-DI}_i (High values indicate strong bullish pressure)
    • Original: \text{DMI Oscillator}_i = \text{-DI}_i - \text{+DI}_i (High values indicate strong bearish pressure)
  3. Apply the Slow Stochastic Formula: The DMI Oscillator series is now used as the input for a standard Slow Stochastic calculation.

    • Calculate Fast %K: \text{Highest High} = \text{Highest value of DMI Oscillator over the Fast \%K Period} \text{Lowest Low} = \text{Lowest value of DMI Oscillator over the Fast \%K Period} \text{Fast \%K} = 100 \times \frac{\text{DMI Oscillator}_i - \text{Lowest Low}}{\text{Highest High} - \text{Lowest Low}}
    • Calculate Slow %K (Main Line): The Fast %K series is smoothed using the selected moving average type over the Slowing Period. \text{Slow \%K} = \text{MA}(\text{Fast \%K}, \text{Slowing Period})
    • Calculate %D (Signal Line): The Slow %K series is smoothed again using the selected moving average type over the %D Period. \text{\%D} = \text{MA}(\text{Slow \%K}, \text{\%D Period})

3. MQL5 Implementation Details

Our MQL5 implementation follows the same modern, object-oriented design as our other professional indicators.

  • Modular Calculator Engine (DMIStochastic_Calculator.mqh): All mathematical logic is encapsulated in a dedicated include file. This engine manages all intermediate calculations (DM, TR, DI, DMI Oscillator, Fast %K) internally.

  • Reusable MA Helper Function: To avoid code duplication, the calculator contains a private CalculateMA helper function. This function holds the logic for all supported moving average types (SMA, EMA, etc.) and is called to smooth both the %K and %D lines, promoting clean and maintainable code.

  • Object-Oriented Design (Inheritance):

    • A base class, CDMIStochasticCalculator, handles the entire calculation chain.
    • A derived class, CDMIStochasticCalculator_HA, overrides the PreparePriceSeries virtual method. Its sole responsibility is to calculate and provide Heikin Ashi High, Low, and Close values as the source data for the first step of the calculation.
  • Simplified Main Indicator (DMIStochastic_Pro.mq5): The main .mq5 file acts as a clean "wrapper" responsible for handling user inputs, creating the correct calculator object, and delegating the calculation with a single function call in OnCalculate().

  • Stability via Full Recalculation: The indicator performs a full recalculation on every tick to ensure maximum stability and prevent artifacts, which is the most robust approach for multi-stage indicators.

4. Parameters (DMIStochastic_Pro.mq5)

  • Candle Source (InpCandleSource): Selects the candle type for the initial DMI calculation.
    • CANDLE_STANDARD: Uses standard OHLC data.
    • CANDLE_HEIKIN_ASHI: Uses smoothed Heikin Ashi data.
  • Oscillator Formula (InpOscType): Determines the formula for the internal DMI Oscillator.
    • OSC_PDI_MINUS_NDI: High values represent bullish pressure (recommended, intuitive).
    • OSC_NDI_MINUS_PDI: High values represent bearish pressure (original definition).
  • DMI Period (InpDMIPeriod): The lookback period for the underlying +DI and -DI calculation. Default is 10.
  • Stochastic %K Period (InpFastKPeriod): The lookback period for finding the highest/lowest values of the DMI Oscillator. Default is 10.
  • Stochastic %K Slowing (InpSlowKPeriod): The period for the first smoothing of the raw %K line. Default is 3.
  • Stochastic %D Period (InpSmoothPeriod): The period for smoothing the main %K line to create the signal line. Default is 3.
  • MA Method for Stochastic (InpStochMethod): The type of moving average to use for both the %K slowing and %D smoothing steps. Default is SMA.

5. Usage and Interpretation

The DMI Stochastic should be interpreted as a momentum-of-momentum oscillator. It shows when the bullish or bearish pressure is overextended. (Assuming default PDI - NDI formula).

  • Overbought/Oversold Momentum:
    • Values > 80 (Overbought): Indicates that bullish pressure has been extremely strong and dominant. This may signal that the bullish move is exhausted and a bearish reversal or consolidation is imminent.
    • Values < 20 (Oversold): Indicates that bearish pressure has been extremely strong. This may signal that the bearish move is exhausted and a bullish reversal or consolidation is likely.
  • Crossovers:
    • When the %K line (blue) crosses above the %D line (red), it signals a bullish shift in directional momentum.
    • When the %K line (blue) crosses below the %D line (red), it signals a bearish shift in directional momentum.
  • Trade Confirmation: High-probability signals often occur when both conditions are met. For example, a potential short signal is generated when the oscillator is in the overbought zone (>80) and the %K line crosses below the %D line. This confirms both the overextended bullish condition and the beginning of a bearish momentum shift.