//+------------------------------------------------------------------+
//|                                                #TrendSL#56sl.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "DelanMarket"
#property link      "poligrafmt@yahoo.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Yellow
#property indicator_color2 Lime

extern int NumBars = 500;
double gd_unused_80 = 0.0;
double g_ibuf_88[];
double g_ibuf_92[];
double gd_96;

int init() {
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 115);
   SetIndexBuffer(0, g_ibuf_88);
   SetIndexEmptyValue(0, 0.0);
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexArrow(1, 115);
   SetIndexBuffer(1, g_ibuf_92);
   SetIndexEmptyValue(1, 0.0);
   gd_96 = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   double lda_52[100];
   int l_ind_counted_0 = IndicatorCounted();
   int li_4 = 7;
   double ld_8 = 0.7;
   int li_16 = 2000;
   int li_20 = 0;
   bool li_24 = TRUE;
   double ld_28 = 0;
   double ld_36 = 0;
   double ld_44 = 0;
   int l_index_56 = 0;
   double ld_60 = 0;
   int l_index_68 = 0;
   double ld_72 = 0;
   double ld_80 = 0;
   double ld_88 = 0;
   int li_96 = 0;
   int li_100 = 0;
   double ld_104 = 0;
   double ld_112 = 2;
   double ld_unused_120 = 10;
   double ld_unused_128 = 0;
   double ld_unused_136 = 0;
   double ld_unused_144 = 0;
   double ld_unused_152 = 0;
   double ld_unused_160 = 0;
   double ld_unused_168 = 0;
   double ld_unused_176 = 0;
   double ld_unused_184 = 0;
   double ld_unused_192 = 0;
   double ld_unused_200 = 0;
   double ld_unused_208 = 0;
   double ld_unused_216 = 0;
   double ld_unused_224 = 0;
   double ld_unused_232 = 0;
   double ld_unused_240 = 0;
   double ld_unused_248 = 0;
   double ld_unused_256 = 0;
   double ld_unused_264 = 0;
   double ld_unused_272 = 0;
   double ld_unused_280 = 0;
   double ld_unused_288 = 0;
   double ld_unused_296 = 0;
   double ld_unused_304 = 0;
   double ld_unused_312 = 0;
   if (Bars < NumBars) li_16 = Bars;
   else li_16 = NumBars;
   if (Close[li_16 - 2] > Close[li_16 - 1]) li_24 = TRUE;
   else li_24 = FALSE;
   ld_28 = Close[li_16 - 2];
   for (li_20 = li_16 - 3; li_20 >= 0; li_20--) {
      ld_44 = gd_96 + High[li_20] - Low[li_20];
      if (MathAbs(gd_96 + High[li_20] - (Close[li_20 + 1])) > ld_44) ld_44 = MathAbs(gd_96 + High[li_20] - (Close[li_20 + 1]));
      if (MathAbs(Low[li_20] - (Close[li_20 + 1])) > ld_44) ld_44 = MathAbs(Low[li_20] - (Close[li_20 + 1]));
      if (li_20 == li_16 - 3) for (l_index_68 = 0; l_index_68 <= li_4 - 1; l_index_68++) lda_52[l_index_68] = ld_44;
      lda_52[l_index_56] = ld_44;
      ld_60 = 0;
      ld_72 = li_4;
      li_100 = l_index_56;
      for (l_index_68 = 0; l_index_68 <= li_4 - 1; l_index_68++) {
         ld_60 += lda_52[li_100] * ld_72;
         ld_72 -= 1.0;
         li_100--;
         if (li_100 == -1) li_100 = li_4 - 1;
      }
      ld_60 = 2.0 * ld_60 / (li_4 * (li_4 + 1.0));
      l_index_56++;
      if (l_index_56 == li_4) l_index_56 = 0;
      ld_36 = ld_8 * ld_60;
      if (li_24 && Low[li_20] < ld_28 - ld_36) {
         li_24 = FALSE;
         ld_28 = gd_96 + High[li_20];
      }
      if (!li_24 && gd_96 + High[li_20] > ld_28 + ld_36) {
         li_24 = TRUE;
         ld_28 = Low[li_20];
      }
      if (li_24 && Low[li_20] > ld_28) ld_28 = Low[li_20];
      if (!li_24 && gd_96 + High[li_20] < ld_28) ld_28 = gd_96 + High[li_20];
      ld_104 = iATR(NULL, 0, 10, li_20) + gd_96 / 10.0;
      if (li_24) {
         if (Low[li_20] - ld_104 * ld_112 < ld_80 && ld_80 != 0.0) ld_88 = ld_80;
         else ld_88 = Low[li_20] - ld_104 * ld_112 / 3.0;
         if (li_96 == 2) ld_88 = Low[li_20] - ld_104 * ld_112 / 3.0;
         g_ibuf_88[li_20] = ld_88;
         g_ibuf_92[li_20] = 0;
         ld_80 = ld_88;
         li_96 = 1;
      } else {
         if (gd_96 + High[li_20] + ld_104 * ld_112 > ld_80 && ld_80 != 0.0) ld_88 = ld_80;
         else ld_88 = gd_96 + High[li_20] + ld_104 * ld_112 / 3.0;
         if (li_96 == 1) ld_88 = gd_96 + High[li_20] + ld_104 * ld_112 / 3.0;
         g_ibuf_88[li_20] = 0;
         g_ibuf_92[li_20] = ld_88;
         ld_80 = ld_88;
         li_96 = 2;
      }
   }
   return (0);
}