
#property copyright "Limited Maintenance Trading"
#property link      "http://www.lmt-forex-forula.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Red

extern int Periods = 80;
extern int Method = 3;
extern int Price = 0;
double g_ibuf_88[];
double g_ibuf_92[];
double g_ibuf_96[];

int init() {
   IndicatorBuffers(3);
   SetIndexBuffer(0, g_ibuf_88);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexBuffer(1, g_ibuf_92);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexBuffer(2, g_ibuf_96);
   ArraySetAsSeries(g_ibuf_96, TRUE);
   IndicatorShortName("Slope Direction Line (" + Periods + ")");
   return (0);
}

int deinit() {
   return (0);
}

double WMA(int ai_0, int a_period_4) {
   return (iMA(NULL, 0, a_period_4, 0, Method, Price, ai_0));
}

int start() {
   double lda_16[];
   double lda_20[];
   int l_ind_counted_0 = IndicatorCounted();
   if (l_ind_counted_0 < 0) return (-1);
   int li_4 = 0;
   int l_period_8 = MathSqrt(Periods);
   int li_12 = Bars - l_ind_counted_0 + Periods + 1;
   if (li_12 > Bars) li_12 = Bars;
   ArrayResize(lda_16, li_12);
   ArraySetAsSeries(lda_16, TRUE);
   ArrayResize(lda_20, li_12);
   ArraySetAsSeries(lda_20, TRUE);
   for (li_4 = 0; li_4 < li_12; li_4++) lda_16[li_4] = 2.0 * WMA(li_4, Periods / 2) - WMA(li_4, Periods);
   for (li_4 = 0; li_4 < li_12 - Periods; li_4++) g_ibuf_96[li_4] = iMAOnArray(lda_16, 0, l_period_8, 0, Method, li_4);
   for (li_4 = li_12 - Periods; li_4 >= 0; li_4--) {
      lda_20[li_4] = lda_20[li_4 + 1];
      if (g_ibuf_96[li_4] > g_ibuf_96[li_4 + 1]) lda_20[li_4] = 1;
      if (g_ibuf_96[li_4] < g_ibuf_96[li_4 + 1]) lda_20[li_4] = -1;
      if (lda_20[li_4] > 0.0) {
         g_ibuf_88[li_4] = g_ibuf_96[li_4];
         if (lda_20[li_4 + 1] < 0.0) g_ibuf_88[li_4 + 1] = g_ibuf_96[li_4 + 1];
         g_ibuf_92[li_4] = EMPTY_VALUE;
      } else {
         if (lda_20[li_4] < 0.0) {
            g_ibuf_92[li_4] = g_ibuf_96[li_4];
            if (lda_20[li_4 + 1] > 0.0) g_ibuf_92[li_4 + 1] = g_ibuf_96[li_4 + 1];
            g_ibuf_88[li_4] = EMPTY_VALUE;
         }
      }
   }
   return (0);
}