#property indicator_separate_window #property indicator_minimum 0.0 #property indicator_maximum 1.0 #property indicator_buffers 4 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 Black #property indicator_color4 Black #property indicator_width1 2 #property indicator_level1 0.85 #property indicator_width2 1 #property indicator_level2 0.5 #property indicator_level3 0.15 extern double gamma1 = 0.6; extern double gamma2 = 0.8; extern int MA1 = 2; extern int MA2 = 2; extern int MaxBars = 1000; extern int TimeFrame2 = 0; double gd_108 = 0.0; double gd_116 = 0.0; double gd_124 = 0.0; double gd_132 = 0.0; double gd_140 = 0.0; double gd_148 = 0.0; double gd_156 = 0.0; double gd_164 = 0.0; double gd_172 = 0.0; double gd_180 = 0.0; double gd_188 = 0.0; double gd_196 = 0.0; double gd_204 = 0.0; double gd_212 = 0.0; double gd_220 = 0.0; double gd_228 = 0.0; double gd_236 = 0.0; double gd_244 = 0.0; double gd_252 = 0.0; double gd_260 = 0.0; double g_ibuf_268[]; double g_ibuf_272[]; double g_ibuf_276[]; double g_ibuf_280[]; int g_timeframe_284; int g_timeframe_288; int g_shift_292; int init() { string ls_0; string ls_8; if (gamma1 == 0.0) gamma1 = 0.55; if (gamma2 == 0.0) gamma2 = gamma1; if (MaxBars < 20) MaxBars = 1000; g_timeframe_284 = Period(); if (TimeFrame2 == 0) TimeFrame2 = g_timeframe_284; IndicatorDigits(2); IndicatorBuffers(4); SetIndexBuffer(0, g_ibuf_268); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(1, g_ibuf_272); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(2, g_ibuf_276); SetIndexBuffer(3, g_ibuf_280); SetIndexStyle(2, DRAW_NONE); SetIndexLabel(2, NULL); SetIndexStyle(3, DRAW_NONE); SetIndexLabel(3, NULL); if (MA1 < 2) ls_0 = ""; else ls_0 = "-MA" + MA1; if (MA2 < 2) ls_8 = ""; else ls_8 = "-MA" + MA2; IndicatorShortName("Laguerre2-ACS(" + DoubleToStr(gamma1, 2) + ls_0 + ")" + "(" + DoubleToStr(gamma2, 2) + ls_8 + "-" + TimeFrame2 + "M" + ") "); SetIndexLabel(0, "Laguerre1ACS(" + DoubleToStr(gamma1, 2) + ls_0 + ")-" + g_timeframe_284 + "M"); SetIndexLabel(1, "Laguerre2ACS(" + DoubleToStr(gamma2, 2) + ls_8 + ")-" + TimeFrame2 + "M"); g_timeframe_288 = TimeFrame2; if (g_timeframe_288 > g_timeframe_284) return (0); if (g_timeframe_288 == g_timeframe_284) { if (gamma2 == gamma1) gamma2 = MathMin(gamma1 + 0.25, 0.99); return (0); } if (g_timeframe_284 == PERIOD_M1) g_timeframe_288 = 5; if (g_timeframe_284 == PERIOD_M5) g_timeframe_288 = 15; if (g_timeframe_284 == PERIOD_M15) g_timeframe_288 = 60; if (g_timeframe_284 == PERIOD_M30) g_timeframe_288 = 60; if (g_timeframe_284 == PERIOD_H1) g_timeframe_288 = 240; if (g_timeframe_284 == PERIOD_H4) g_timeframe_288 = 1440; if (g_timeframe_284 == PERIOD_D1) g_timeframe_288 = 10080; if (g_timeframe_284 == PERIOD_W1) g_timeframe_288 = 43200; IndicatorShortName("Laguerre2-ACS(" + DoubleToStr(gamma1, 2) + ls_0 + ")" + "(" + DoubleToStr(gamma2, 2) + ls_8 + "-" + g_timeframe_288 + "M" + ") "); SetIndexLabel(1, "Laguerre2ACS(" + DoubleToStr(gamma2, 2) + ls_8 + ")-" + g_timeframe_288 + "M"); return (0); } int deinit() { return (0); } int start() { int l_shift_4; int l_ind_counted_12 = IndicatorCounted(); double ld_16 = 0; double ld_24 = 0; if (MaxBars > Bars) MaxBars = Bars; for (int li_0 = MaxBars - 1; li_0 >= 0; li_0--) { ld_16 = 0; ld_24 = 0; gd_140 = gd_108; gd_148 = gd_116; gd_156 = gd_124; gd_164 = gd_132; gd_108 = (1 - gamma1) * Close[li_0] + gamma1 * gd_140; gd_116 = (-gamma1) * gd_108 + gd_140 + gamma1 * gd_148; gd_124 = (-gamma1) * gd_116 + gd_148 + gamma1 * gd_156; gd_132 = (-gamma1) * gd_124 + gd_156 + gamma1 * gd_164; gd_180 = 0; gd_188 = 0; if (gd_108 >= gd_116) gd_180 = gd_108 - gd_116; else gd_188 = gd_116 - gd_108; if (gd_116 >= gd_124) gd_180 = gd_180 + gd_116 - gd_124; else gd_188 = gd_188 + gd_124 - gd_116; if (gd_124 >= gd_132) gd_180 = gd_180 + gd_124 - gd_132; else gd_188 = gd_188 + gd_132 - gd_124; if (gd_180 + gd_188 != 0.0) gd_172 = gd_180 / (gd_180 + gd_188); g_ibuf_276[li_0] = gd_172; if (MA1 < 2) g_ibuf_268[li_0] = g_ibuf_276[li_0]; else { for (int li_8 = li_0; li_8 < li_0 + MA1; li_8++) ld_16 += g_ibuf_276[li_8]; g_ibuf_268[li_0] = ld_16 / MA1; } l_shift_4 = iBarShift(Symbol(), g_timeframe_288, Time[li_0], FALSE); if (g_shift_292 == l_shift_4 || li_0 == 0) { g_ibuf_272[li_0] = g_ibuf_272[li_0 + 1]; g_ibuf_280[li_0] = g_ibuf_280[li_0 + 1]; } else { g_shift_292 = l_shift_4; if (l_shift_4 != 0) { gd_228 = gd_196; gd_236 = gd_204; gd_244 = gd_212; gd_252 = gd_220; } gd_196 = (1 - gamma2) * iClose(Symbol(), g_timeframe_288, l_shift_4) + gamma2 * gd_228; gd_204 = (-gamma2) * gd_196 + gd_228 + gamma2 * gd_236; gd_212 = (-gamma2) * gd_204 + gd_236 + gamma2 * gd_244; gd_220 = (-gamma2) * gd_212 + gd_244 + gamma2 * gd_252; gd_180 = 0; gd_188 = 0; if (gd_196 >= gd_204) gd_180 = gd_196 - gd_204; else gd_188 = gd_204 - gd_196; if (gd_204 >= gd_212) gd_180 = gd_180 + gd_204 - gd_212; else gd_188 = gd_188 + gd_212 - gd_204; if (gd_212 >= gd_220) gd_180 = gd_180 + gd_212 - gd_220; else gd_188 = gd_188 + gd_220 - gd_212; if (gd_180 + gd_188 != 0.0) gd_260 = gd_180 / (gd_180 + gd_188); g_ibuf_280[li_0] = gd_260; if (MA2 < 2) g_ibuf_272[li_0] = g_ibuf_280[li_0]; else { for (li_8 = li_0; li_8 < li_0 + MA2; li_8++) ld_24 += g_ibuf_280[li_8]; g_ibuf_272[li_0] = ld_24 / MA2; } } } return (0); }