mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-08-09 02:27:45 +00:00
64 lines
5.0 KiB
Markdown
64 lines
5.0 KiB
Markdown
# DSMA Professional (Deviation Scaled Moving Average)
|
|
|
|
## 1. Summary (Introduction)
|
|
|
|
The DSMA (Deviation Scaled Moving Average), developed by John Ehlers, is a sophisticated adaptive moving average that adjusts its speed based on a normalized measure of market volatility.
|
|
|
|
Unlike other adaptive moving averages that rely on momentum or cycle periods, the DSMA modifies its smoothing factor (`alpha`) based on the amplitude of an internal oscillator scaled by its own standard deviation. This unique approach results in a filter with a highly desirable behavior:
|
|
|
|
* In **high-volatility, trending markets**, the DSMA becomes **fast and responsive**, closely tracking price action to reduce lag.
|
|
* In **low-volatility, consolidating markets**, the DSMA becomes **slow and smooth**, flattening out to effectively filter market noise and prevent whipsaw trades.
|
|
|
|
The DSMA serves as an intelligent, all-in-one trendline that provides visual cues about both the direction of the trend and the current state of market volatility.
|
|
|
|
## 2. Mathematical Foundations and Calculation Logic
|
|
|
|
The DSMA is an Exponential Moving Average where the `alpha` is dynamically calculated through a multi-stage filtering process.
|
|
|
|
### Required Components
|
|
|
|
* **Period (N):** The primary lookback period for the calculation.
|
|
* **Source Price (P):** The price series used for the calculation.
|
|
|
|
### Calculation Steps (Algorithm)
|
|
|
|
1. **"Zeros" Oscillator:** A simple, zero-mean oscillator is created by taking the difference between the current price and the price from two bars ago: `Zeros = P[0] - P[2]`. This helps to "whiten" the price spectrum.
|
|
2. **Initial Smoothing (SuperSmoother):** The noisy "Zeros" oscillator is smoothed using a **SuperSmoother filter**. The period of this internal SuperSmoother is set to `N/2`.
|
|
3. **Standard Deviation (RMS) Calculation:** The algorithm calculates the Root Mean Square (RMS), which is a form of standard deviation, of the smoothed oscillator's output over the last `N` bars.
|
|
4. **Scaling:** The current value of the smoothed oscillator is divided by its RMS. This scales the oscillator's amplitude in terms of standard deviations, creating a normalized volatility measure.
|
|
5. **Adaptive Alpha Calculation:** The final adaptive `alpha` is calculated as being directly proportional to the absolute value of the scaled oscillator:
|
|
$\alpha = \text{Abs}(\text{Scaled Oscillator}) \times \frac{5}{N}$
|
|
6. **Final EMA Calculation:** The DSMA is calculated using the standard EMA formula with the adaptive `alpha`:
|
|
$\text{DSMA}_i = \alpha \times P_i + (1 - \alpha) \times \text{DSMA}_{i-1}$
|
|
|
|
## 3. MQL5 Implementation Details
|
|
|
|
* **Self-Contained Calculator (`DSMA_Calculator.mqh`):** The entire complex, multi-stage calculation is encapsulated within a dedicated, reusable calculator class.
|
|
* **Heikin Ashi Integration:** An inherited `_HA` class allows the calculation to be performed seamlessly on smoothed Heikin Ashi data.
|
|
* **Stability via Full Recalculation:** The calculation involves multiple chained, state-dependent filters. To ensure absolute stability, the indicator employs a **full recalculation** on every `OnCalculate` call.
|
|
|
|
## 4. Parameters
|
|
|
|
* **Period (`InpPeriod`):** The "critical period" of the filter. This single parameter controls both the lookback window for the RMS calculation and the period of the internal SuperSmoother filter (which will be `Period/2`). Ehlers' recommendation for daily charts is **40**.
|
|
* A longer period results in a smoother, slower-adapting filter.
|
|
* A shorter period results in a faster, more responsive filter.
|
|
* **Applied Price (`InpSourcePrice`):** The source price for the calculation. This unified dropdown menu allows you to select from all standard and Heikin Ashi price types.
|
|
|
|
## 5. Usage and Interpretation
|
|
|
|
The DSMA should be used as an "intelligent" moving average that provides clear visual information about the market's current regime (trending vs. ranging).
|
|
|
|
### **1. Adaptive Trend Following & Dynamic S/R**
|
|
|
|
This is the primary use case. The DSMA acts as a single, adaptive trendline.
|
|
|
|
* **In a Trending Market:** The DSMA will be angled steeply and follow the price closely. In this state, it acts as a reliable **dynamic support level** (in an uptrend) or **resistance level** (in a downtrend). Pullbacks to the DSMA line offer high-probability, trend-following entry opportunities.
|
|
* **In a Ranging Market:** The DSMA will flatten out and move slowly. This is a clear visual signal that the market is consolidating and trend-following strategies should be avoided. The flat line acts as a "mean" or center of gravity for the price action.
|
|
|
|
### **2. Volatility Breakout Confirmation**
|
|
|
|
The change in the DSMA's behavior is a signal in itself.
|
|
|
|
* **The Setup:** Identify periods where the DSMA has been flat and slow for an extended time, indicating a period of low volatility ("coiling").
|
|
* **The Signal:** When the price breaks out of this consolidation, watch for the DSMA to "wake up." A sharp change in its angle, as it begins to accelerate and track the price, serves as a strong **confirmation** that the breakout is valid and a new trend may be starting.
|