Files
mql5/Indicators/MyIndicators/DMIStochastic_Adaptive_Pro.md
2026-05-22 00:34:22 +02:00

6.9 KiB

DMI Stochastic Adaptive Professional

1. Summary (Introduction)

The DMIStochastic_Adaptive_Pro is a cutting-edge hybrid oscillator that merges two highly effective quantitative concepts: Barbara Star's DMI Stochastic and Frank Key's Variable-Length (Adaptive) Stochastic.

While a standard Stochastic analyzes pure price, the DMI Stochastic analyzes the momentum of directional pressure by calculating a Stochastic on the DMI (+DI / -DI) values. However, like all fixed-period oscillators, it can still suffer from getting "stuck" in overbought or oversold zones during relentless, sustained momentum.

This indicator solves that problem by introducing Kaufman's Efficiency Ratio (ER). The revolutionary aspect of this specific implementation is that the ER is calculated directly on the DMI Oscillator line, rather than on the price.

  • When directional momentum is moving in a smooth, sustained trend (High ER on the DMI line), the indicator automatically lengthens its Stochastic lookback period. This prevents premature exhaustion signals and helps the trader ride the momentum.
  • When directional momentum is choppy or shifting rapidly (Low ER on the DMI line), it shortens its period, becoming highly responsive to immediate momentum reversals.

2. Mathematical Foundations and Calculation Logic

The calculation is an advanced, multi-stage pipeline that generates directional movement, creates an oscillator, analyzes its efficiency, and applies a dynamic stochastic formula.

Required Components

  • DMI Period: The lookback period for the base +DI and -DI calculation.
  • ER Period: The lookback period for calculating the Efficiency Ratio of the DMI Oscillator.
  • Min/Max Stochastic Periods: The dynamic range boundaries for the Stochastic lookback.
  • Smoothing Periods: Slowing Period and %D Period for the final signal lines.

Calculation Steps (Algorithm)

  1. Calculate Directional Indicators (+DI, -DI): Raw Directional Movement (+DM, -DM) and True Range (TR) are calculated and smoothed using Wilder's method over the DMI Period. \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: An oscillator is generated from the difference between the directional indicators (Default formula shown): \text{DMI Oscillator}_i = \text{+DI}_i - \text{-DI}_i

  3. Calculate the Efficiency Ratio (ER) on the DMI Oscillator: The ER measures the signal-to-noise ratio of the momentum itself over the ER Period (N). \text{ER}_t = \frac{\text{Abs}(\text{DMI Osc}_t - \text{DMI Osc}_{t-N})}{\sum_{i=0}^{N-1} \text{Abs}(\text{DMI Osc}_{t-i} - \text{DMI Osc}_{t-i-1})}

  4. Calculate the Adaptive Stochastic Period (NSP): The dynamic lookback period is calculated for the current bar based on the ER. \text{NSP}_t = \text{Integer}[(\text{ER}_t \times (\text{MaxStoch} - \text{MinStoch})) + \text{MinStoch}]

  5. Apply the Adaptive Stochastic Formula to the Momentum: The Stochastic logic is applied to the DMI Oscillator using the dynamic NSP lookback.

    • Calculate Raw %K: \text{Highest High} = \text{Highest DMI Osc value over the last NSP}_t \text{ bars} \text{Lowest Low} = \text{Lowest DMI Osc value over the last NSP}_t \text{ bars} \text{Raw \%K}_t = 100 \times \frac{\text{DMI Osc}_t - \text{Lowest Low}}{\text{Highest High} - \text{Lowest Low}}
    • Calculate Slow %K and %D: The Raw %K is smoothed using the selected moving average types to output the final %K (Main) and %D (Signal) lines.

3. MQL5 Implementation Details

Our implementation employs a highly optimized, engine-based architecture designed for maximum performance in MetaTrader 5.

  • Modular "Engine" Architecture (DMIStochastic_Adaptive_Calculator.mqh): The main calculator acts as a coordinator for three distinct mathematical engines:

    1. DMI_Engine.mqh: Handles the heavy lifting of the Wilder smoothing and +DI/-DI generation.
    2. MovingAverage_Engine.mqh (Instance 1): Handles the advanced smoothing for the Slow %K line.
    3. MovingAverage_Engine.mqh (Instance 2): Handles the advanced smoothing for the %D signal line.
  • Optimized Incremental Calculation (O(1) Standard): The indicator processes only new data (using prev_calculated). The dynamic lookback loop (which scales via NSP) safely navigates the internally buffered DMI Oscillator array without forcing a full history recalculation, ensuring minimal CPU load even with complex adaptive logic.

  • Seamless Heikin Ashi Integration: Through object-oriented inheritance (CDMIStochasticAdaptiveCalculator_HA), the indicator can transparently switch its underlying data source to Heikin Ashi candles by overriding the data preparation layer in the DMI_Engine.

4. Parameters

  • DMI Settings:

    • InpCandleSource: Base price data source (CANDLE_STANDARD or CANDLE_HEIKIN_ASHI).
    • InpOscType: Formula for the DMI Oscillator (OSC_PDI_MINUS_NDI or OSC_NDI_MINUS_PDI).
    • InpDMIPeriod: Lookback period for the underlying DMI components. (Default: 10).
  • Adaptive Stochastic Settings:

    • InpErPeriod: The lookback period for the Kaufman Efficiency Ratio. (Default: 10).
    • InpMinStochPeriod: The shortest possible lookback period for the Stochastic. (Default: 5).
    • InpMaxStochPeriod: The longest possible lookback period for the Stochastic. (Default: 30).
  • Smoothing Settings:

    • InpSlowingPeriod: Smoothing period for the main %K line. (Default: 3).
    • InpSlowingMAType: Moving Average algorithm for the %K line. (Default: SMA).
    • InpDPeriod: Smoothing period for the signal %D line. (Default: 3).
    • InpDMAType: Moving Average algorithm for the %D line. (Default: SMA).

5. Usage and Interpretation

The DMI Stochastic Adaptive should be interpreted as an intelligent momentum oscillator. It solves the false signals generated during strong trends.

  • During Sustained Momentum (High ER): When bullish or bearish pressure is relentless, the internal period lengthens. The indicator will purposely avoid hitting the 80 or 20 extremes too early. If you are in a trend-following trade, this behavior signals that the momentum is stable and you should stay in the trade.

  • During Choppy/Reversing Momentum (Low ER): When directional pressure stalls or becomes erratic, the internal period shortens drastically. The indicator becomes highly sensitive. In this state, a push into the overbought (>80) or oversold (<20) territory is a strong signal of immediate momentum exhaustion.

  • Trading Signals:

    • Exhaustion Reversals: Look for standard %K and %D line crossovers specifically when the indicator has reached the extreme zones (<20 or >80). Because the indicator is adaptive, these extremes carry much more mathematical weight than in a standard Stochastic.