From 2dbb903333c80c9453109e3646a5cf3c2ee6f596 Mon Sep 17 00:00:00 2001 From: Toh4iem9 Date: Sun, 19 Oct 2025 13:43:50 +0200 Subject: [PATCH] refactor: Ehlers time warp --- Include/MyIncludes/Laguerre_Engine.mqh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Include/MyIncludes/Laguerre_Engine.mqh b/Include/MyIncludes/Laguerre_Engine.mqh index 3b86c01..d797f12 100644 --- a/Include/MyIncludes/Laguerre_Engine.mqh +++ b/Include/MyIncludes/Laguerre_Engine.mqh @@ -26,7 +26,7 @@ public: bool Init(double gamma); void CalculateFilter(int rates_total, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[], - double &L0_buffer[], double &L1_buffer[], double &L2_buffer[], double &L3_buffer[]); + double &L0_buffer[], double &L1_buffer[], double &L2_buffer[], double &L3_buffer[], double &filt_buffer[]); }; //+------------------------------------------------------------------+ @@ -42,7 +42,7 @@ bool CLaguerreEngine::Init(double gamma) //| CLaguerreEngine: Core Filter Calculation | //+------------------------------------------------------------------+ void CLaguerreEngine::CalculateFilter(int rates_total, ENUM_APPLIED_PRICE price_type, const double &open[], const double &high[], const double &low[], const double &close[], - double &L0_buffer[], double &L1_buffer[], double &L2_buffer[], double &L3_buffer[]) + double &L0_buffer[], double &L1_buffer[], double &L2_buffer[], double &L3_buffer[], double &filt_buffer[]) { if(rates_total < 2) return; @@ -53,6 +53,7 @@ void CLaguerreEngine::CalculateFilter(int rates_total, ENUM_APPLIED_PRICE price_ ArrayResize(L1_buffer, rates_total); ArrayResize(L2_buffer, rates_total); ArrayResize(L3_buffer, rates_total); + ArrayResize(filt_buffer, rates_total); // --- Initialize filter components for the first bar --- double L0_prev = m_price[0], L1_prev = m_price[0], L2_prev = m_price[0], L3_prev = m_price[0]; @@ -60,6 +61,7 @@ void CLaguerreEngine::CalculateFilter(int rates_total, ENUM_APPLIED_PRICE price_ L1_buffer[0] = m_price[0]; L2_buffer[0] = m_price[0]; L3_buffer[0] = m_price[0]; + filt_buffer[0] = m_price[0]; // --- Full recalculation loop for stability --- for(int i = 1; i < rates_total; i++) @@ -70,6 +72,9 @@ void CLaguerreEngine::CalculateFilter(int rates_total, ENUM_APPLIED_PRICE price_ L2_buffer[i] = -m_gamma * L1_buffer[i] + L1_prev + m_gamma * L2_prev; L3_buffer[i] = -m_gamma * L2_buffer[i] + L2_prev + m_gamma * L3_prev; + // --- NEW: Calculate the final weighted filter output --- + filt_buffer[i] = (L0_buffer[i] + 2.0 * L1_buffer[i] + 2.0 * L2_buffer[i] + L3_buffer[i]) / 6.0; + // --- Update previous values for the next iteration --- L0_prev = L0_buffer[i]; L1_prev = L1_buffer[i];