diff --git a/Indicators/MyIndicators/CutlerRSI_MA_HeikinAshi.mq5 b/Indicators/MyIndicators/CutlerRSI_MA_HeikinAshi.mq5 index 0d45d9a..ef96541 100644 --- a/Indicators/MyIndicators/CutlerRSI_MA_HeikinAshi.mq5 +++ b/Indicators/MyIndicators/CutlerRSI_MA_HeikinAshi.mq5 @@ -157,43 +157,53 @@ int OnCalculate(const int rates_total, } //--- STEP 3: Calculate the signal line (MA of Cutler's RSI) -// --- FIX: Correct starting position for the MA calculation --- int ma_start_pos = g_ExtPeriodRSI + g_ExtPeriodMA - 1; for(int i = ma_start_pos; i < rates_total; i++) { + // --- FIX: Full, robust switch block for all MA types --- switch(InpMethodMA) { case MODE_EMA: - if(i == ma_start_pos) - { - double sum = 0; - for(int j = 0; j < g_ExtPeriodMA; j++) - sum += BufferCutlerRSI[i - j]; - BufferCutlerRSI_MA[i] = sum / g_ExtPeriodMA; - } - else - { - double pr = 2.0 / (g_ExtPeriodMA + 1.0); - BufferCutlerRSI_MA[i] = BufferCutlerRSI[i] * pr + BufferCutlerRSI_MA[i-1] * (1.0 - pr); - } - break; case MODE_SMMA: if(i == ma_start_pos) { - double sum = 0; - for(int j = 0; j < g_ExtPeriodMA; j++) - sum += BufferCutlerRSI[i - j]; - BufferCutlerRSI_MA[i] = sum / g_ExtPeriodMA; + double sum=0; + for(int j=0; j0) + BufferCutlerRSI_MA[i]=lwma_sum/weight_sum; + } + break; default: // MODE_SMA - BufferCutlerRSI_MA[i] = SimpleMA(i, g_ExtPeriodMA, BufferCutlerRSI); - break; + { + double sum=0; + for(int j=0; j