/*
   Generated by EX4-TO-MQ4 decompiler V4.0.224.1 []
   Website: http://purebeam.biz
   E-mail : purebeam@gmail.com
*/
#property copyright "MT4 release WizardSerg <wizardserg@mail.ru>, ?? ??????? ForexMagazine #104"
#property link      "wizardserg@mail.ru"

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Crimson
#property indicator_color2 DarkGreen
#property indicator_color3 Violet
#property indicator_color4 Aqua
#property indicator_color5 Violet
#property indicator_color6 Aqua
#property indicator_color7 Crimson
#property indicator_color8 DarkGreen

int gi_unused_76 = 2;
int gi_unused_80 = 1;
int gi_84 = 2;
int gi_88 = 1;
int gi_92 = 2;
int gi_96 = 1;
int gi_unused_100 = 60;
int gi_unused_104 = 900;
int gi_unused_108 = 1800;
int gi_unused_112 = 3600;
int gi_unused_116 = 5400;
int gi_unused_120 = 7200;
int gi_unused_124 = 1;
int gi_unused_128 = 2;
int gi_unused_132 = 3;
int gi_unused_136 = 4;
int gi_unused_140 = 1;
int gi_unused_144 = 2;
int gi_unused_148 = 3;
int gi_unused_152 = 0;
string gsa_156[] = {"blank", "Waiting", "Preset", "Entry", "Manage"};
string gsa_160[] = {"blank", "SHORT", "LONG"};
string gsa_164[] = {"blank", "Below", "Above"};
string gsa_168[] = {"blank", "Check", "Clear", "Set"};
string gsa_172[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
string gsa_176[] = {"Manual", "Auto"};
string gsa_180[] = {"Micro", "Mini", "Standard"};
extern bool CommentLine = TRUE;
extern int Period1 = 22;
extern int Period2 = 44;
extern int Period3 = 55;
extern int Period4 = 77;
extern int method = 3;
extern int price = 0;
extern int SlopeWidth = 5;
double g_ibuf_216[];
double g_ibuf_220[];
double g_ibuf_224[];
double g_ibuf_228[];
double g_ibuf_232[];
double g_ibuf_236[];
double g_ibuf_240[];
double g_ibuf_244[];
double gda_unused_248[];
double gda_unused_252[];
double gda_unused_256[];
double gda_unused_260[];
int gi_264 = 65;
int gi_268 = 10;
int gi_272 = 15;
int gi_276 = 60;
string gsa_280[4] = {"Super  ", "Super  ", "  Big  ", "  Big  ",
   "blank"};
int gia_284[4];
int gia_288[2];
int gia_292[4];
int g_fontsize_296 = 10;

int init() {
   string ls_0 = "TSR Trendlines()";
   IndicatorBuffers(8);
   SetIndexBuffer(7, g_ibuf_216);
   SetIndexBuffer(6, g_ibuf_220);
   SetIndexBuffer(5, g_ibuf_224);
   SetIndexBuffer(4, g_ibuf_228);
   SetIndexBuffer(3, g_ibuf_232);
   SetIndexBuffer(2, g_ibuf_236);
   SetIndexBuffer(1, g_ibuf_240);
   SetIndexBuffer(0, g_ibuf_244);
   SetIndexStyle(7, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(6, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
   SetIndexLabel(7, ls_0 + " " + Period1 + " UP");
   SetIndexLabel(6, ls_0 + " " + Period1 + " DN");
   SetIndexLabel(5, ls_0 + " " + Period2 + " UP");
   SetIndexLabel(4, ls_0 + " " + Period2 + " DN");
   SetIndexLabel(3, ls_0 + " " + Period3 + " UP");
   SetIndexLabel(2, ls_0 + " " + Period3 + " DN");
   SetIndexLabel(1, ls_0 + " " + Period4 + " UP");
   SetIndexLabel(0, ls_0 + " " + Period4 + " DN");
   gia_292[3] = Period1;
   gia_292[2] = Period2;
   gia_292[1] = Period3;
   gia_292[0] = Period4;
   IndicatorShortName(ls_0);
   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_0[];
   double lda_4[];
   double lda_8[];
   double lda_12[];
   double lda_16[];
   double lda_20[];
   double lda_24[];
   double lda_28[];
   double lda_32[];
   double lda_36[];
   double lda_40[];
   double lda_44[];
   int l_ind_counted_48 = IndicatorCounted();
   int li_52 = 0;
   int l_period_56 = MathSqrt(Period1);
   int l_period_60 = MathSqrt(Period2);
   int l_period_64 = MathSqrt(Period3);
   int l_period_68 = MathSqrt(Period4);
   int l_bars_72 = Bars;
   int l_bars_76 = Bars;
   int l_bars_80 = Bars;
   int l_bars_84 = Bars;
   if (l_ind_counted_48 < 0) return (-1);
   if (l_bars_72 > Bars) l_bars_72 = Bars;
   if (l_bars_76 > Bars) l_bars_76 = Bars;
   if (l_bars_80 > Bars) l_bars_80 = Bars;
   if (l_bars_84 > Bars) l_bars_84 = Bars;
   ArrayResize(lda_32, l_bars_72);
   ArraySetAsSeries(lda_32, TRUE);
   ArrayResize(lda_36, l_bars_76);
   ArraySetAsSeries(lda_36, TRUE);
   ArrayResize(lda_40, l_bars_80);
   ArraySetAsSeries(lda_40, TRUE);
   ArrayResize(lda_44, l_bars_84);
   ArraySetAsSeries(lda_44, TRUE);
   ArrayResize(lda_0, l_bars_72);
   ArraySetAsSeries(lda_0, TRUE);
   ArrayResize(lda_16, l_bars_72);
   ArraySetAsSeries(lda_16, TRUE);
   ArrayResize(lda_4, l_bars_76);
   ArraySetAsSeries(lda_4, TRUE);
   ArrayResize(lda_20, l_bars_76);
   ArraySetAsSeries(lda_20, TRUE);
   ArrayResize(lda_8, l_bars_80);
   ArraySetAsSeries(lda_8, TRUE);
   ArrayResize(lda_24, l_bars_80);
   ArraySetAsSeries(lda_24, TRUE);
   ArrayResize(lda_12, l_bars_84);
   ArraySetAsSeries(lda_12, TRUE);
   ArrayResize(lda_28, l_bars_84);
   ArraySetAsSeries(lda_28, TRUE);
   for (li_52 = 0; li_52 < l_bars_72; li_52++) lda_0[li_52] = 2.0 * WMA(li_52, Period1 / 2) - WMA(li_52, Period1);
   for (li_52 = 0; li_52 < l_bars_76; li_52++) lda_4[li_52] = 2.0 * WMA(li_52, Period2 / 2) - WMA(li_52, Period2);
   for (li_52 = 0; li_52 < l_bars_80; li_52++) lda_8[li_52] = 2.0 * WMA(li_52, Period3 / 2) - WMA(li_52, Period3);
   for (li_52 = 0; li_52 < l_bars_84; li_52++) lda_12[li_52] = 2.0 * WMA(li_52, Period4 / 2) - WMA(li_52, Period4);
   for (li_52 = 0; li_52 < l_bars_72 - Period1; li_52++) lda_32[li_52] = iMAOnArray(lda_0, 0, l_period_56, 0, method, li_52);
   for (li_52 = 0; li_52 < l_bars_72 - Period2; li_52++) lda_36[li_52] = iMAOnArray(lda_4, 0, l_period_60, 0, method, li_52);
   for (li_52 = 0; li_52 < l_bars_72 - Period3; li_52++) lda_40[li_52] = iMAOnArray(lda_8, 0, l_period_64, 0, method, li_52);
   for (li_52 = 0; li_52 < l_bars_72 - Period4; li_52++) lda_44[li_52] = iMAOnArray(lda_12, 0, l_period_68, 0, method, li_52);
   for (li_52 = l_bars_72 - Period1; li_52 >= 0; li_52--) {
      lda_16[li_52] = lda_16[li_52 + 1];
      if (lda_32[li_52] > lda_32[li_52 + 1]) lda_16[li_52] = 1;
      if (lda_32[li_52] < lda_32[li_52 + 1]) lda_16[li_52] = -1;
      if (lda_16[li_52] > 0.0) {
         g_ibuf_216[li_52] = lda_32[li_52];
         if (lda_16[li_52 + 1] < 0.0) g_ibuf_216[li_52 + 1] = lda_32[li_52 + 1];
         g_ibuf_220[li_52] = EMPTY_VALUE;
         gia_284[3] = gi_84;
      } else {
         if (lda_16[li_52] < 0.0) {
            g_ibuf_220[li_52] = lda_32[li_52];
            if (lda_16[li_52 + 1] > 0.0) g_ibuf_220[li_52 + 1] = lda_32[li_52 + 1];
            g_ibuf_216[li_52] = EMPTY_VALUE;
            gia_284[3] = gi_88;
         }
      }
   }
   for (li_52 = l_bars_76 - Period2; li_52 >= 0; li_52--) {
      lda_20[li_52] = lda_20[li_52 + 1];
      if (lda_36[li_52] > lda_36[li_52 + 1]) lda_20[li_52] = 1;
      if (lda_36[li_52] < lda_36[li_52 + 1]) lda_20[li_52] = -1;
      if (lda_20[li_52] > 0.0) {
         g_ibuf_224[li_52] = lda_36[li_52];
         if (lda_20[li_52 + 1] < 0.0) g_ibuf_224[li_52 + 1] = lda_36[li_52 + 1];
         g_ibuf_228[li_52] = EMPTY_VALUE;
         gia_284[2] = gi_84;
      } else {
         if (lda_20[li_52] < 0.0) {
            g_ibuf_228[li_52] = lda_36[li_52];
            if (lda_20[li_52 + 1] > 0.0) g_ibuf_228[li_52 + 1] = lda_36[li_52 + 1];
            g_ibuf_224[li_52] = EMPTY_VALUE;
            gia_284[2] = gi_88;
         }
      }
   }
   for (li_52 = l_bars_80 - Period3; li_52 >= 0; li_52--) {
      lda_24[li_52] = lda_24[li_52 + 1];
      if (lda_40[li_52] > lda_40[li_52 + 1]) lda_24[li_52] = 1;
      if (lda_40[li_52] < lda_40[li_52 + 1]) lda_24[li_52] = -1;
      if (lda_24[li_52] > 0.0) {
         g_ibuf_232[li_52] = lda_40[li_52];
         if (lda_24[li_52 + 1] < 0.0) g_ibuf_232[li_52 + 1] = lda_40[li_52 + 1];
         g_ibuf_236[li_52] = EMPTY_VALUE;
         gia_284[1] = gi_84;
      } else {
         if (lda_24[li_52] < 0.0) {
            g_ibuf_236[li_52] = lda_40[li_52];
            if (lda_24[li_52 + 1] > 0.0) g_ibuf_236[li_52 + 1] = lda_40[li_52 + 1];
            g_ibuf_232[li_52] = EMPTY_VALUE;
            gia_284[1] = gi_88;
         }
      }
   }
   for (li_52 = l_bars_84 - Period4; li_52 >= 0; li_52--) {
      lda_28[li_52] = lda_28[li_52 + 1];
      if (lda_44[li_52] > lda_44[li_52 + 1]) lda_28[li_52] = 1;
      if (lda_44[li_52] < lda_44[li_52 + 1]) lda_28[li_52] = -1;
      if (lda_28[li_52] > 0.0) {
         g_ibuf_240[li_52] = lda_44[li_52];
         if (lda_28[li_52 + 1] < 0.0) g_ibuf_240[li_52 + 1] = lda_44[li_52 + 1];
         g_ibuf_244[li_52] = EMPTY_VALUE;
         gia_284[0] = gi_84;
      } else {
         if (lda_28[li_52] < 0.0) {
            g_ibuf_244[li_52] = lda_44[li_52];
            if (lda_28[li_52 + 1] > 0.0) g_ibuf_244[li_52 + 1] = lda_44[li_52 + 1];
            g_ibuf_240[li_52] = EMPTY_VALUE;
            gia_284[0] = gi_88;
         }
      }
   }
   if (lda_32[0] > lda_36[0] && gia_284[3] == gi_84 && gia_284[2] == gi_84) gia_288[0] = gi_92;
   else
      if (lda_32[0] < lda_36[0] && gia_284[3] == gi_88 && gia_284[2] == gi_88) gia_288[0] = gi_96;
   if (lda_40[0] > lda_44[0] && gia_284[1] == gi_84 && gia_284[0] == gi_84) gia_288[1] = gi_92;
   else
      if (lda_40[0] < lda_44[0] && gia_284[1] == gi_88 && gia_284[0] == gi_88) gia_288[1] = gi_96;
   DoData();
   return (0);
}

int DoData() {
   int l_count_0 = 0;
   int l_index_4 = 0;
   int l_count_8 = 0;
   int l_x_12 = gi_264;
   int l_y_16 = gi_268;
   if (!CommentLine) return (0);
   ObjectCreate("tsrTop" + l_count_0, OBJ_LABEL, 0, 0, 0);
   if (IsDemo()) ObjectSetText("tsrTop" + l_count_0, AccountName() + " Demo ", g_fontsize_296 + 4, "Times New Roman Bold Italic", Linen);
   else ObjectSetText("tsrTop" + l_count_0, "Live     ", g_fontsize_296 + 4, "Times New Roman Bold Italic", Linen);
   if (!IsConnected()) ObjectSetText("tsrTop" + l_count_0, "NO Connection ", g_fontsize_296 + 8, "Times New Roman Bold Italic", Yellow);
   ObjectSet("tsrTop" + l_count_0, OBJPROP_CORNER, 1);
   ObjectSet("tsrTop" + l_count_0, OBJPROP_XDISTANCE, l_x_12);
   ObjectSet("tsrTop" + l_count_0, OBJPROP_YDISTANCE, l_y_16);
   l_count_0++;
   l_y_16 += gi_272;
   l_y_16 += gi_272;
   int l_index_20 = 0;
   int li_24 = 1;
   while (l_index_20 < 4) {
      ObjectCreate("tsrTL" + l_count_0, OBJ_LABEL, 0, 0, 0);
      ObjectSetText("tsrTL" + l_count_0, gsa_280[l_index_4] + gia_292[l_index_20], g_fontsize_296, "Arial Bold", LightSteelBlue);
      ObjectSet("tsrTL" + l_count_0, OBJPROP_CORNER, 1);
      ObjectSet("tsrTL" + l_count_0, OBJPROP_XDISTANCE, l_x_12);
      ObjectSet("tsrTL" + l_count_0, OBJPROP_YDISTANCE, l_y_16);
      l_count_0++;
      l_index_4++;
      ObjectCreate("tsrTL" + l_count_0, OBJ_LABEL, 0, 0, 0);
      if (gia_284[l_index_20] == gi_84 && gia_288[li_24] == gi_92) ObjectSetText("tsrTL" + l_count_0, "+LONG", g_fontsize_296, "Arial Bold", Lime);
      else {
         if (gia_284[l_index_20] == gi_88 && gia_288[li_24] == gi_96) ObjectSetText("tsrTL" + l_count_0, "+SHORT", g_fontsize_296, "Arial Bold", Orange);
         else {
            if (gia_284[l_index_20] == gi_84) ObjectSetText("tsrTL" + l_count_0, " LONG", g_fontsize_296, "Arial Bold", Lime);
            else
               if (gia_284[l_index_20] == gi_88) ObjectSetText("tsrTL" + l_count_0, " SHORT", g_fontsize_296, "Arial Bold", Orange);
         }
      }
      ObjectSet("tsrTL" + l_count_0, OBJPROP_CORNER, 1);
      ObjectSet("tsrTL" + l_count_0, OBJPROP_XDISTANCE, l_x_12 - gi_276);
      ObjectSet("tsrTL" + l_count_0, OBJPROP_YDISTANCE, l_y_16);
      l_count_0++;
      l_count_8++;
      l_y_16 += gi_272;
      if (l_index_20 == 1) li_24--;
      l_index_20++;
   }
   return (0);
}
