From 141a5459c7581c2db8d7517d8b8e532ff4d4547e Mon Sep 17 00:00:00 2001 From: Toh4iem9 Date: Sun, 21 Jun 2026 19:32:31 +0200 Subject: [PATCH] docs: VWMA --- Indicators/MyIndicators/KeltnerChannel_Pro.md | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/Indicators/MyIndicators/KeltnerChannel_Pro.md b/Indicators/MyIndicators/KeltnerChannel_Pro.md index b74b7a1..c992e97 100644 --- a/Indicators/MyIndicators/KeltnerChannel_Pro.md +++ b/Indicators/MyIndicators/KeltnerChannel_Pro.md @@ -2,7 +2,7 @@ ## 1. Summary (Introduction) -The Keltner Channel is a volatility-based indicator, with the modern version popularized by Linda Bradford Raschke. It consists of three lines: a central moving average line, an upper band, and a lower band, with the channel width determined by the Average True Range (ATR). It is primarily used to identify trend direction and spot potential breakouts. +The Keltner Channel is a volatility-based channel indicator, with the modern version popularized by Linda Bradford Raschke. It consists of three lines: a central moving average line (Basis), an upper band, and a lower band, with the channel width determined by the Average True Range (ATR). It is primarily used to identify trend direction, measure volatility squeeze, and spot potential breakouts. Our `KeltnerChannel_Pro` implementation is a unified, professional version that combines three distinct calculation methodologies into a single, flexible indicator: @@ -10,60 +10,70 @@ Our `KeltnerChannel_Pro` implementation is a unified, professional version that 2. **HA-Hybrid:** A smoothed MA based on Heikin Ashi prices, with channel width based on standard, real-market ATR. 3. **HA-Pure:** A fully smoothed channel where both the MA and the ATR are calculated from Heikin Ashi data. +The entire suite features a highly optimized $O(1)$ real-time mathematical engine, Heikin Ashi price source integration, and a dynamic volume-routing pipeline to support volume-weighted moving averages (VWMA). + +--- + ## 2. Mathematical Foundations and Calculation Logic The Keltner Channel is constructed by creating a channel around a central moving average, with the width determined by market volatility. ### Required Components -* **Middle Line (Basis):** A moving average of a selected price. +* **Middle Line (Basis):** A moving average of a selected price (e.g., EMA or VWMA). * **ATR (Average True Range):** A measure of market volatility. * **Factor (Multiplier):** A user-defined multiplier that adjusts the channel width. ### Calculation Steps (Algorithm) -1. **Calculate the Middle Line:** Compute the moving average (e.g., 20-period EMA) of the selected source price. - $\text{Middle Line}_i = \text{MA}(\text{Source Price}, \text{MA Period})_i$ +1. **Calculate the Middle Line:** Compute the moving average of the selected source price. If VWMA is selected, the calculation is automatically weighted by volume: + $$\text{Middle Line}_i = \text{MA}(\text{Source Price}, \text{MA Period})_i$$ 2. **Calculate the Average True Range (ATR):** Compute the ATR for a given period (e.g., 10). -3. **Calculate the Upper and Lower Bands:** Add and subtract a multiple of the ATR from the middle line. - $\text{Upper Band}_i = \text{Middle Line}_i + (\text{Factor} \times \text{ATR}_i)$ - $\text{Lower Band}_i = \text{Middle Line}_i - (\text{Factor} \times \text{ATR}_i)$ +3. **Calculate the Upper and Lower Bands:** Add and subtract a multiple of the ATR from the middle line: + $$\text{Upper Band}_i = \text{Middle Line}_i + (\text{Multiplier} \times \text{ATR}_i)$$ + $$\text{Lower Band}_i = \text{Middle Line}_i - (\text{Multiplier} \times \text{ATR}_i)$$ + +--- ## 3. MQL5 Implementation Details -Our MQL5 implementation follows a modern, object-oriented design to ensure stability, reusability, and maintainability. +Our MQL5 implementation follows a modern, object-oriented design to ensure stability, reusability, and extreme execution speed. * **Modular Calculation Engine (`KeltnerChannel_Calculator.mqh`):** The entire calculation logic is encapsulated within a reusable include file. * **Composition Pattern:** The calculator orchestrates two powerful engines: - 1. **MA Engine:** It uses the `MovingAverage_Engine.mqh` for the Middle Line, enabling advanced smoothing types like DEMA or TEMA. - 2. **ATR Engine:** It uses the `ATR_Calculator.mqh` for precise volatility measurement. - * **ATR Source Logic:** The calculator internally checks the `InpAtrSource` parameter and decides whether to calculate the True Range from standard candles or from Heikin Ashi candles, providing all three logical variations within a clean, unified structure. + 1. **MA Engine:** It uses `MovingAverage_Engine.mqh` for the Middle Line, enabling advanced smoothing types (e.g., DEMA, TEMA, VWMA). + 2. **ATR Engine:** It uses `ATR_Calculator.mqh` for precise volatility measurement. + * **ATR Source Logic:** The calculator internally checks the `InpAtrSource` parameter and decides whether to calculate the True Range from standard candles or Heikin Ashi candles. + +* **Dynamic Volume Routing Pipeline:** + To support the volume-weighted moving average (**VWMA**) as the channel basis, `KeltnerChannel_Pro` implements an automatic volume-routing pipeline in its `OnCalculate()` handler. It queries `SYMBOL_VOLUME_LIMIT` to determine if the broker provides Real Volume. It then dynamically copies either Real Volume (`volume[]`) or Tick Volume (`tick_volume[]`) and routes it down to the calculator engine, ensuring seamless and mathematically sound VWMA calculations. * **Optimized Incremental Calculation (O(1)):** - Unlike basic implementations that recalculate the entire history on every tick, this indicator employs an intelligent incremental algorithm. - * It utilizes the `prev_calculated` state to determine the exact starting point for updates. - * **Persistent State:** The internal buffers persist their state between ticks. This allows recursive smoothing methods to continue seamlessly from the last known value without re-processing the entire history. - * This results in **O(1) complexity** per tick, ensuring instant updates and zero lag, even on charts with extensive history. + The indicator utilizes the `prev_calculated` state to determine the exact starting point for updates, performing calculations only on the active forming bar. The internal recursive filters (EMA, ATR, SMMA) persist their state between ticks, delivering a strict **O(1) complexity** per tick and eliminating CPU lag entirely. + +--- ## 4. Parameters The indicator's parameters are logically grouped for clarity: * **Middle Line (MA) Settings:** - * `InpMaPeriod`: The lookback period for the middle line. (Default: `20`). - * `InpMaMethod`: The type of moving average for the middle line. Supports: **SMA, EMA, SMMA, LWMA, TMA, DEMA, TEMA**. (Default: `EMA`). - * `InpSourcePrice`: The source price for the middle line. (Standard or Heikin Ashi). + * `InpMaPeriod`: The lookback period for the middle line (Default: `20`). + * `InpMaMethod`: The type of moving average for the middle line. Supports: **SMA, EMA, SMMA, LWMA, TMA, DEMA, TEMA, VWMA**. (Default: `EMA`). + * `InpSourcePrice`: The source price for the middle line (Standard or Heikin Ashi). * **Channel (ATR) Settings:** - * `InpAtrPeriod`: The lookback period for the ATR calculation. (Default: `10`). - * `InpMultiplier`: The factor to multiply the ATR by. (Default: `2.0`). + * `InpAtrPeriod`: The lookback period for the ATR calculation (Default: `10`). + * `InpMultiplier`: The factor to multiply the ATR by (Default: `2.0`). * `InpAtrSource`: Determines the source for the ATR calculation (`Standard` or `Heikin Ashi`), allowing you to create "Hybrid" or "Pure" HA channels. +--- + ## 5. Usage and Interpretation * **Trend Identification:** The slope of the channel helps identify the trend. An upward-sloping channel suggests an uptrend, while a downward-sloping one suggests a downtrend. * **Breakouts:** A strong close above the upper band can signal the start or continuation of an uptrend. A strong close below the lower band can signal the start or continuation of a downtrend. -* **Overbought/Oversold (in Ranges):** In a sideways market, moves to the upper band can be seen as overbought, and moves to the lower band can be seen as oversold. -* **Caution:** Like all channel indicators, Keltner Channels can give false breakout signals. It is often used in conjunction with momentum oscillators to confirm the strength of a move. +* **Overbought/Oversold (in Ranges):** In a sideways, range-bound market, moves to the upper band can be seen as overbought, and moves to the lower band can be seen as oversold. +* **Volume-Weighted Basis (VWMA mode):** When the basis is set to `VWMA`, the middle line reacts faster during high-volume breakout bars and stays flatter during low-volume consolidations. This makes the channel highly adaptive to real institutional liquidity.