From fb76042fe07b8235a1fa445893a875ce8b33db89 Mon Sep 17 00:00:00 2001 From: Toh4iem9 Date: Mon, 29 Sep 2025 16:48:19 +0200 Subject: [PATCH] refactor: --- .../MyIncludes/Fibonacci_WMA_Calculator.mqh | 54 +++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/Include/MyIncludes/Fibonacci_WMA_Calculator.mqh b/Include/MyIncludes/Fibonacci_WMA_Calculator.mqh index 46a1b1d..3ad6b8c 100644 --- a/Include/MyIncludes/Fibonacci_WMA_Calculator.mqh +++ b/Include/MyIncludes/Fibonacci_WMA_Calculator.mqh @@ -9,7 +9,7 @@ //+==================================================================+ //| | -//| CLASS 1: CFibonacciWMACalculator (Standard) | +//| CLASS 1: CFibonacciWMACalculator (Base Class) | //| | //+==================================================================+ class CFibonacciWMACalculator @@ -52,7 +52,6 @@ bool CFibonacciWMACalculator::Init(int period) ArrayResize(m_weights, m_period); m_weight_sum = 0; -//--- Generate Fibonacci numbers long fib_numbers[]; ArrayResize(fib_numbers, m_period); @@ -70,14 +69,13 @@ bool CFibonacciWMACalculator::Init(int period) } } -//--- Assign weights in REVERSE order (largest weight for most recent price) for(int i = 0; i < m_period; i++) { m_weights[i] = (double)fib_numbers[m_period - 1 - i]; m_weight_sum += m_weights[i]; } - return (m_weight_sum != 0); + return (m_weight_sum > 0); } //+------------------------------------------------------------------+ @@ -87,7 +85,6 @@ void CFibonacciWMACalculator::Calculate(int rates_total, ENUM_APPLIED_PRICE pric { if(rates_total < m_period) return; - if(!PreparePriceSeries(rates_total, price_type, open, high, low, close)) return; @@ -96,7 +93,6 @@ void CFibonacciWMACalculator::Calculate(int rates_total, ENUM_APPLIED_PRICE pric double weighted_sum = 0; for(int j = 0; j < m_period; j++) { - //--- Corrected Logic: Most recent price (i-j) gets the highest weight (weights[j]) weighted_sum += m_price[i - j] * m_weights[j]; } wma_out[i] = weighted_sum / m_weight_sum; @@ -104,16 +100,13 @@ void CFibonacciWMACalculator::Calculate(int rates_total, ENUM_APPLIED_PRICE pric } //+------------------------------------------------------------------+ -//| CFibonacciWMACalculator: Prepares the source price series. | +//| CFibonacciWMACalculator: Prepares the standard source price. | //+------------------------------------------------------------------+ bool CFibonacciWMACalculator::PreparePriceSeries(int rates_total, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[]) { ArrayResize(m_price, rates_total); switch(price_type) { - case PRICE_CLOSE: - ArrayCopy(m_price, close, 0, 0, rates_total); - break; case PRICE_OPEN: ArrayCopy(m_price, open, 0, 0, rates_total); break; @@ -133,10 +126,11 @@ bool CFibonacciWMACalculator::PreparePriceSeries(int rates_total, ENUM_APPLIED_P break; case PRICE_WEIGHTED: for(int i=0; i