#property indicator_separate_window #property indicator_minimum 0.0 #property indicator_maximum 1.0 #property indicator_buffers 2 #property indicator_color1 Blue #property indicator_color2 Black #property indicator_width1 2 #property indicator_level1 0.85 #property indicator_level2 0.45 #property indicator_level3 0.15 extern double gamma = 0.6; extern int MaxBars = 1000; extern int MA = 2; double gd_92 = 0.0; double gd_100 = 0.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 g_ibuf_180[]; double g_ibuf_184[]; int init() { IndicatorDigits(2); IndicatorBuffers(2); SetIndexBuffer(0, g_ibuf_180); SetIndexStyle(0, DRAW_LINE); SetIndexBuffer(1, g_ibuf_184); SetIndexStyle(1, DRAW_NONE); SetIndexLabel(1, NULL); string ls_0 = "Laguerre-ACS(" + DoubleToStr(gamma, 2); if (MA < 2) ls_0 = ls_0 + ")"; else ls_0 = ls_0 + "-MA" + MA + ")"; IndicatorShortName(ls_0); SetIndexLabel(0, ls_0 + "-" + Period() + "M"); return (0); } int deinit() { return (0); } int start() { int l_ind_counted_8 = IndicatorCounted(); double ld_12 = 0; if (MaxBars > Bars) MaxBars = Bars; SetIndexDrawBegin(0, Bars - MaxBars); for (int li_0 = MaxBars - 1; li_0 >= 0; li_0--) { ld_12 = 0; gd_124 = gd_92; gd_132 = gd_100; gd_140 = gd_108; gd_148 = gd_116; gd_92 = (1 - gamma) * Close[li_0] + gamma * gd_124; gd_100 = (-gamma) * gd_92 + gd_124 + gamma * gd_132; gd_108 = (-gamma) * gd_100 + gd_132 + gamma * gd_140; gd_116 = (-gamma) * gd_108 + gd_140 + gamma * gd_148; gd_164 = 0; gd_172 = 0; if (gd_92 >= gd_100) gd_164 = gd_92 - gd_100; else gd_172 = gd_100 - gd_92; if (gd_100 >= gd_108) gd_164 = gd_164 + gd_100 - gd_108; else gd_172 = gd_172 + gd_108 - gd_100; if (gd_108 >= gd_116) gd_164 = gd_164 + gd_108 - gd_116; else gd_172 = gd_172 + gd_116 - gd_108; if (gd_164 + gd_172 != 0.0) gd_156 = gd_164 / (gd_164 + gd_172); g_ibuf_184[li_0] = gd_156; if (MA < 2) g_ibuf_180[li_0] = g_ibuf_184[li_0]; else { for (int li_4 = li_0; li_4 < li_0 + MA; li_4++) ld_12 += g_ibuf_184[li_4]; g_ibuf_180[li_0] = ld_12 / MA; } } return (0); }