#property copyright "MrPip and jpkfox" #property link "" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 LimeGreen #property indicator_color2 Red #property indicator_color3 Yellow extern int MA_Period = 50; extern string m = "--Moving Average Types--"; extern string m0 = " 0 = SMA"; extern string m1 = " 1 = EMA"; extern string m2 = " 2 = SMMA"; extern string m3 = " 3 = LWMA"; extern int MA_Type = 0; extern string p = "--Applied Price Types--"; extern string p0 = " 0 = close"; extern string p1 = " 1 = open"; extern string p2 = " 2 = high"; extern string p3 = " 3 = low"; extern string p4 = " 4 = median(high+low)/2"; extern string p5 = " 5 = typical(high+low+close)/3"; extern string p6 = " 6 = weighted(high+low+close+close)/4"; extern int MA_AppliedPrice = 4; extern double AngleTreshold = 0.25; extern int PrevMAShift = 2; extern int CurMAShift = 0; int g_ma_method_208; string gs_212; double g_ibuf_220[]; double g_ibuf_224[]; double g_ibuf_228[]; int init() { SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2); SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2); IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS) + 2.0); if (!SetIndexBuffer(0, g_ibuf_220) && !SetIndexBuffer(1, g_ibuf_224) && !SetIndexBuffer(2, g_ibuf_228)) Print("cannot set indicator buffers!"); switch (MA_Type) { case 1: gs_212 = "EMA"; g_ma_method_208 = 1; break; case 2: gs_212 = "SMMA"; g_ma_method_208 = 2; break; case 3: gs_212 = "LWMA"; g_ma_method_208 = 3; break; case 4: gs_212 = "LSMA"; break; default: gs_212 = "SMA"; g_ma_method_208 = 0; } IndicatorShortName(gs_212 + "_Angle(" + MA_Period + "," + AngleTreshold + "," + PrevMAShift + "," + CurMAShift + ")"); return (0); } int start() { double l_ima_0; double l_ima_8; double ld_16; if (CurMAShift >= PrevMAShift) { Print("Error: CurMAShift >= PrevMAShift"); PrevMAShift = 6; CurMAShift = 0; } int li_48 = IndicatorCounted(); if (li_48 < 0) return (-1); if (li_48 > 0) li_48--; int li_40 = Bars - li_48; double ld_unused_32 = 0.0349065556; double ld_24 = 10000.0; string ls_64 = StringSubstr(Symbol(), 3, 3); if (ls_64 == "JPY") ld_24 = 100.0; int li_60 = PrevMAShift - CurMAShift; ld_24 /= li_60; for (int l_index_44 = 0; l_index_44 < li_40; l_index_44++) { l_ima_0 = iMA(NULL, 0, MA_Period, 0, g_ma_method_208, MA_AppliedPrice, l_index_44 + CurMAShift); l_ima_8 = iMA(NULL, 0, MA_Period, 0, g_ma_method_208, MA_AppliedPrice, l_index_44 + PrevMAShift); ld_16 = ld_24 * (l_ima_0 - l_ima_8) / 2.0; g_ibuf_224[l_index_44] = 0.0; g_ibuf_220[l_index_44] = 0.0; g_ibuf_228[l_index_44] = 0.0; if (ld_16 > AngleTreshold) g_ibuf_220[l_index_44] = ld_16; else { if (ld_16 < -AngleTreshold) g_ibuf_224[l_index_44] = ld_16; else g_ibuf_228[l_index_44] = ld_16; } } return (0); }