/*

*/

#property indicator_chart_window

extern int TPeriod = 18;
extern int TLimit = 350;
extern bool AutoAdjust = TRUE;
extern int AutoTimeframe = 60;
extern bool HorizontalLines = FALSE;
extern color Support = DeepSkyBlue;
extern color Resistance = Red;
extern bool SoundAlert = FALSE;
extern int AlertPipRange = 10;
extern string AlertWav = "alert.wav";
int gi_120;
int gi_124;
int gi_128;
int gi_136;
int gi_140 = 0;

int init() {
   int li_0;
   gi_120 = TPeriod;
   gi_124 = TLimit;
   if (Period() < AutoTimeframe) {
      li_0 = AutoTimeframe / Period();
      gi_120 = TPeriod * li_0;
      gi_124 = TLimit * li_0;
   }
   gi_136 = 10;
   if (HorizontalLines) gi_136 = 24;
   color l_color_4 = Support;
   int li_8 = 2;
   for (gi_128 = 1; gi_128 <= gi_136; gi_128++) {
      if (gi_128 > 5) l_color_4 = Resistance;
      if (gi_128 > 10) {
         l_color_4 = Support;
         li_8 = 1;
      }
      if (gi_128 > 16) l_color_4 = Resistance;
      ObjectCreate("TrendLine_" + gi_128, li_8, 0, 0, 0, 0, 0);
      ObjectSet("TrendLine_" + gi_128, OBJPROP_COLOR, l_color_4);
   }
   return (0);
}

int deinit() {
   for (gi_128 = 1; gi_128 <= 24; gi_128++) ObjectDelete("TrendLine_" + gi_128);
   return (0);
}

int start() {
   double l_high_0;
   double ld_8;
   double ld_16;
   double ld_24;
   double ld_32;
   double ld_40;
   int li_48;
   int li_52;
   int li_56;
   int li_60;
   int li_64;
   int li_68;
   double l_low_72;
   double ld_80;
   double ld_88;
   double ld_96;
   double ld_104;
   double ld_112;
   int li_120;
   int li_124;
   int li_128;
   int li_132;
   int li_136;
   int li_140;
   double ld_144;
   if (Bars < gi_124) gi_124 = Bars - gi_120;
   for (gi_140 = gi_124; gi_140 > 0; gi_140--) {
      if (Low[gi_140 + (gi_120 - 1) / 2] == Low[iLowest(NULL, 0, MODE_LOW, gi_120, gi_140)]) {
         ld_112 = ld_104;
         ld_104 = ld_96;
         ld_96 = ld_88;
         ld_88 = ld_80;
         ld_80 = l_low_72;
         l_low_72 = Low[gi_140 + (gi_120 - 1) / 2];
         li_140 = li_136;
         li_136 = li_132;
         li_132 = li_128;
         li_128 = li_124;
         li_124 = li_120;
         li_120 = gi_140 + (gi_120 - 1) / 2;
      }
      if (High[gi_140 + (gi_120 - 1) / 2] == High[iHighest(NULL, 0, MODE_HIGH, gi_120, gi_140)]) {
         ld_40 = ld_32;
         ld_32 = ld_24;
         ld_24 = ld_16;
         ld_16 = ld_8;
         ld_8 = l_high_0;
         l_high_0 = High[gi_140 + (gi_120 - 1) / 2];
         li_68 = li_64;
         li_64 = li_60;
         li_60 = li_56;
         li_56 = li_52;
         li_52 = li_48;
         li_48 = gi_140 + (gi_120 - 1) / 2;
      }
   }
   ObjectMove("TrendLine_1", 1, Time[li_120], l_low_72);
   ObjectMove("TrendLine_1", 0, Time[li_124], ld_80);
   ObjectMove("TrendLine_2", 1, Time[li_124], ld_80);
   ObjectMove("TrendLine_2", 0, Time[li_128], ld_88);
   ObjectMove("TrendLine_3", 1, Time[li_128], ld_88);
   ObjectMove("TrendLine_3", 0, Time[li_132], ld_96);
   ObjectMove("TrendLine_4", 1, Time[li_132], ld_96);
   ObjectMove("TrendLine_4", 0, Time[li_136], ld_104);
   ObjectMove("TrendLine_5", 1, Time[li_136], ld_104);
   ObjectMove("TrendLine_5", 0, Time[li_140], ld_112);
   ObjectMove("TrendLine_6", 1, Time[li_48], l_high_0);
   ObjectMove("TrendLine_6", 0, Time[li_52], ld_8);
   ObjectMove("TrendLine_7", 1, Time[li_52], ld_8);
   ObjectMove("TrendLine_7", 0, Time[li_56], ld_16);
   ObjectMove("TrendLine_8", 1, Time[li_56], ld_16);
   ObjectMove("TrendLine_8", 0, Time[li_60], ld_24);
   ObjectMove("TrendLine_9", 1, Time[li_60], ld_24);
   ObjectMove("TrendLine_9", 0, Time[li_64], ld_32);
   ObjectMove("TrendLine_10", 1, Time[li_64], ld_32);
   ObjectMove("TrendLine_10", 0, Time[li_68], ld_40);
   if (HorizontalLines) {
      ObjectMove("TrendLine_11", 0, Time[li_120], l_low_72);
      ObjectMove("TrendLine_12", 0, Time[li_124], ld_80);
      ObjectMove("TrendLine_13", 0, Time[li_128], ld_88);
      ObjectMove("TrendLine_14", 0, Time[li_132], ld_96);
      ObjectMove("TrendLine_15", 0, Time[li_136], ld_104);
      ObjectMove("TrendLine_16", 0, Time[li_140], ld_112);
      ObjectMove("TrendLine_17", 0, Time[li_48], l_high_0);
      ObjectMove("TrendLine_18", 0, Time[li_52], ld_8);
      ObjectMove("TrendLine_19", 0, Time[li_56], ld_16);
      ObjectMove("TrendLine_20", 0, Time[li_60], ld_24);
      ObjectMove("TrendLine_21", 0, Time[li_64], ld_32);
      ObjectMove("TrendLine_22", 0, Time[li_68], ld_40);
   }
   bool li_152 = TRUE;
   for (gi_128 = 1; gi_128 <= gi_136; gi_128++) {
      ObjectSet("TrendLine_" + gi_128, OBJPROP_WIDTH, 1);
      ld_144 = ObjectGetValueByShift("TrendLine_" + gi_128, 0);
      if (gi_128 > 10) ld_144 = ObjectGet("TrendLine_" + gi_128, OBJPROP_PRICE1);
      if (Bid - AlertPipRange * Point <= ld_144 && Bid + AlertPipRange * Point >= ld_144) {
         ObjectSet("TrendLine_" + gi_128, OBJPROP_WIDTH, 2);
         if (SoundAlert && li_152) {
            PlaySound(AlertWav);
            li_152 = FALSE;
         }
      }
   }
   return (0);
}
