
#property copyright "© 2008, London Forex Rush system"
#property link      "www.LondonForexRush.com"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Fuchsia

extern double AccountSize = 10000.0;
extern int TokyoStart = 0;
extern int TokyoEnd = 8;
extern color TokyoHighColor = Aqua;
extern color TokyoLowColor = Fuchsia;
extern int LondonStart = 9;
extern int Countdown = 2;
extern color CountdownColor = Aqua;
extern color TextColor = Yellow;
extern double RiskRatio = 0.03;
int g_color_124 = LimeGreen;
int g_color_128 = OrangeRed;
int g_color_132 = Gray;
int g_fontsize_136 = 30;
string gs_arial_140 = "Arial";
string gs_mainind1_148 = "MainInd1";
int g_fontsize_156 = 12;
string gs_arial_160 = "Arial";
string g_name_168 = "Countdown1";
int g_fontsize_176 = 10;
string gs_arial_180 = "Arial";
double g_ibuf_188[];
double g_ibuf_192[];
int gi_196 = 1;
int gi_200 = 0;
bool gi_204 = TRUE;
int gi_208 = 0;
double gd_212 = 0.0;
double gd_220 = 0.0;

void objectCreate(string a_name_0, int a_x_8, int a_y_12, string a_text_16 = "-", int a_fontsize_24 = 40, string a_fontname_28 = "Arial", color a_color_36 = -1) {
   int l_window_40 = WindowOnDropped();
   ObjectCreate(a_name_0, OBJ_LABEL, l_window_40, 0, 0);
   ObjectSet(a_name_0, OBJPROP_CORNER, 0);
   ObjectSet(a_name_0, OBJPROP_COLOR, a_color_36);
   ObjectSet(a_name_0, OBJPROP_XDISTANCE, a_x_8);
   ObjectSet(a_name_0, OBJPROP_YDISTANCE, a_y_12);
   ObjectSetText(a_name_0, a_text_16, a_fontsize_24, a_fontname_28, a_color_36);
}

int HourToTime(int ai_0, int ai_4 = 0, int ai_8 = -1) {
   int li_ret_12;
   int l_index_16 = 0;
   if (ai_0 < 0 || ai_0 > 23) return (0);
   if (ai_8 == -1) li_ret_12 = StrToTime(DoubleToStr(Year(), 0) + "." + DoubleToStr(Month(), 0) + "." + DoubleToStr(Day(), 0) + " " + DoubleToStr(ai_0, 0) + ":00");
   else {
      li_ret_12 = StrToTime(DoubleToStr(TimeYear(Time[ai_8]), 0) + "." + DoubleToStr(TimeMonth(Time[ai_8]), 0) + "." + DoubleToStr(TimeDay(Time[ai_8]), 0) + " " + DoubleToStr(ai_0, 0) +
         ":00");
   }
   if (ai_4 == -1) {
      for (l_index_16 = ai_8; l_index_16 < Bars && TimeDay(Time[ai_8]) == TimeDay(Time[l_index_16]); l_index_16++) {
      }
      li_ret_12 = StrToTime(DoubleToStr(TimeYear(Time[l_index_16]), 0) + "." + DoubleToStr(TimeMonth(Time[l_index_16]), 0) + "." + DoubleToStr(TimeDay(Time[l_index_16]), 0) +
         " " + DoubleToStr(ai_0, 0) + ":00");
   } else
      if (ai_4 == 1) li_ret_12 += 86400;
   return (li_ret_12);
}

int init() {
   SetIndexBuffer(0, g_ibuf_188);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 4, TokyoHighColor);
   SetIndexBuffer(1, g_ibuf_192);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 4, TokyoLowColor);
   string ls_0 = "Main Indicator";
   IndicatorShortName(ls_0);
   SetIndexLabel(0, "Tokyo High");
   SetIndexLabel(1, "Tokyo Low");
   gi_208 = LondonStart + Countdown;
   if (gi_208 > 23) gi_208 -= 24;
   return (0);
}

int deinit() {
   ObjectDelete(gs_mainind1_148);
   ObjectDelete(g_name_168);
   ObjectDelete("lmn1");
   ObjectDelete("lmn2");
   ObjectDelete("lmn3");
   ObjectDelete("lmn4");
   ObjectDelete("lmn5");
   ObjectDelete("lmn6");
   ObjectDelete("lmn7");
   return (0);
}

int start() {
   double ld_16;
   double ld_24;
   string l_dbl2str_40;
   string ls_48;
   double ld_104;
   double ld_112;
   double ld_120;
   double ld_128;
   if (TokyoStart < 0 || TokyoStart > 23) return (1);
   if (TokyoEnd < 0 || TokyoEnd > 23) return (1);
   if (LondonStart < 0 || LondonStart > 23) return (2);
   if (gi_208 < 0 || gi_208 > 23) return (2);
   if (Countdown < 0 || Countdown > 24) return (2);
   if (Bars < 50) return (3);
   double ld_0 = 0.9 * iATR(NULL, PERIOD_D1, 14, 0);
   int l_index_8 = 0;
   int l_index_12 = 0;
   int li_32 = 0;
   int li_36 = 0;
   string l_dbl2str_56 = "";
   int li_64 = 0;
   int li_68 = 0;
   int li_72 = 0;
   int li_76 = 0;
   int li_80 = 0;
   int li_84 = 0;
   int li_88 = 0;
   int li_92 = 0;
   int li_96 = 0;
   int li_100 = 0;
   double l_spread_136 = 0;
   double l_tickvalue_144 = 0;
   bool li_152 = FALSE;
   bool li_156 = FALSE;
   int l_ind_counted_160 = IndicatorCounted();
   int li_164 = Bars - l_ind_counted_160;
   double ld_168 = 0;
   if (l_ind_counted_160 > 0) li_164++;
   if (gi_204) {
      objectCreate(gs_mainind1_148, 10, 25, "", g_fontsize_136, gs_arial_140, g_color_132);
      objectCreate(g_name_168, 10, 70, "", g_fontsize_156, gs_arial_160, CountdownColor);
      objectCreate("lmn1", 10, 110, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn2", 10, 140, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn3", 10, 160, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn4", 10, 190, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn5", 10, 210, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn6", 10, 240, "-", g_fontsize_176, gs_arial_180, TextColor);
      objectCreate("lmn7", 10, 260, "-", g_fontsize_176, gs_arial_180, TextColor);
   }
   for (l_index_8 = li_164; l_index_8 >= 0; l_index_8--) {
      li_84 = HourToTime(TokyoStart, 0, l_index_8);
      if (TokyoStart > TokyoEnd) li_88 = HourToTime(TokyoEnd, 1, l_index_8);
      else li_88 = HourToTime(TokyoEnd, 0, l_index_8);
      li_96 = HourToTime(TokyoEnd, 0, l_index_8);
      if (TokyoStart > TokyoEnd) li_92 = HourToTime(TokyoStart, -1, l_index_8);
      else li_92 = HourToTime(TokyoStart, 0, l_index_8);
      li_152 = FALSE;
      if (Time[l_index_8] >= li_84 && Time[l_index_8] <= li_88) {
         li_152 = TRUE;
         li_100 = li_84;
      }
      if (Time[l_index_8] >= li_92 && Time[l_index_8] <= li_96) {
         li_152 = TRUE;
         li_100 = li_92;
      }
      if (li_152) {
         if (g_ibuf_188[l_index_8 + 1] != EMPTY_VALUE) {
            if (High[l_index_8] <= g_ibuf_188[l_index_8 + 1]) g_ibuf_188[l_index_8] = g_ibuf_188[l_index_8 + 1];
            else {
               g_ibuf_188[l_index_8] = High[l_index_8];
               for (l_index_12 = l_index_8 + 1; Time[l_index_12] >= li_100 && l_index_12 < Bars; l_index_12++) g_ibuf_188[l_index_12] = High[l_index_8];
            }
         } else g_ibuf_188[l_index_8] = High[l_index_8];
         if (g_ibuf_192[l_index_8 + 1] != EMPTY_VALUE) {
            if (Low[l_index_8] >= g_ibuf_192[l_index_8 + 1]) g_ibuf_192[l_index_8] = g_ibuf_192[l_index_8 + 1];
            else {
               g_ibuf_192[l_index_8] = Low[l_index_8];
               for (l_index_12 = l_index_8 + 1; Time[l_index_12] >= li_100 && l_index_12 < Bars; l_index_12++) g_ibuf_192[l_index_12] = Low[l_index_8];
            }
         } else g_ibuf_192[l_index_8] = Low[l_index_8];
      }
   }
   int l_count_176 = 0;
   int l_count_180 = 0;
   for (l_index_8 = 1; l_index_8 <= 20; l_index_8++) {
      if (iMA(NULL, PERIOD_H1, 10, 0, MODE_SMA, PRICE_CLOSE, l_index_8 - 1) - iMA(NULL, PERIOD_H1, 30, 0, MODE_SMA, PRICE_CLOSE, l_index_8 - 1) > 0.0) l_count_176++;
      else
         if (iMA(NULL, PERIOD_H1, 10, 0, MODE_SMA, PRICE_CLOSE, l_index_8 - 1) - iMA(NULL, PERIOD_H1, 30, 0, MODE_SMA, PRICE_CLOSE, l_index_8 - 1) < 0.0) l_count_180++;
   }
   if (l_count_176 >= 20) gi_196 = 1;
   else {
      if (l_count_180 >= 20) gi_196 = 2;
      else gi_196 = 3;
   }
   ld_168 = gd_212 - gd_220;
   if (gi_196 == 1 && ld_168 < ld_0 / 2.0) gi_200 = 1;
   else {
      if (gi_196 == 2 && ld_168 < ld_0 / 2.0) gi_200 = 2;
      else gi_200 = 3;
   }
   li_64 = HourToTime(LondonStart);
   if (LondonStart > gi_208) li_68 = HourToTime(gi_208, 1, 0);
   else li_68 = HourToTime(gi_208);
   li_76 = HourToTime(gi_208);
   if (LondonStart > gi_208) li_72 = HourToTime(LondonStart, -1, 0);
   else li_72 = HourToTime(LondonStart);
   li_156 = FALSE;
   if (TimeCurrent() >= li_64 && TimeCurrent() <= li_68) {
      li_156 = TRUE;
      li_80 = li_68;
   }
   if (TimeCurrent() >= li_72 && TimeCurrent() <= li_76) {
      li_156 = TRUE;
      li_80 = li_76;
   }
   if (li_156) {
      li_32 = MathFloor((li_80 - TimeCurrent()) / 3600);
      li_36 = MathFloor((li_80 - TimeCurrent() - 3600 * li_32) / 60) + 1.0;
      l_dbl2str_40 = DoubleToStr(li_32, 0);
      if (li_36 < 10) ls_48 = "0" + DoubleToStr(li_36, 0);
      else ls_48 = DoubleToStr(li_36, 0);
      ObjectSetText(g_name_168, "COUNTDOWN: " + l_dbl2str_40 + ":" + ls_48, g_fontsize_156, gs_arial_160, CountdownColor);
   } else {
      ObjectSetText(g_name_168, "COUNTDOWN: -", g_fontsize_156, gs_arial_160, CountdownColor);
      gi_200 = 3;
   }
   l_spread_136 = MarketInfo(Symbol(), MODE_SPREAD);
   l_tickvalue_144 = MarketInfo(Symbol(), MODE_TICKVALUE);
   if (gi_200 == 1) {
      for (l_index_12 = 0; l_index_12 < Bars && g_ibuf_188[l_index_12] == EMPTY_VALUE; l_index_12++) {
      }
      if (g_ibuf_188[l_index_12] != EMPTY_VALUE) {
         gd_212 = g_ibuf_188[l_index_12];
         gd_220 = g_ibuf_192[l_index_12];
         ld_104 = gd_212 + 5.0 * Point;
         ld_112 = gd_220 + (gd_212 - gd_220) / 2.0 - 5.0 * Point;
         ld_120 = gd_220 - 5.0 * Point;
         ObjectSetText("lmn1", "Entry: " + DoubleToStr(ld_104, Digits), g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn2", "Aggressive Stop Loss: " + DoubleToStr(ld_112, Digits), g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn3", "Conservative Stop Loss: " + DoubleToStr(ld_120, Digits), g_fontsize_176, gs_arial_180, TextColor);
         ld_128 = gd_220 + ld_0;
         ObjectSetText("lmn4", "Aggressive Target: " + DoubleToStr(ld_128, Digits), g_fontsize_176, gs_arial_180, TextColor);
         l_dbl2str_56 = DoubleToStr(ld_128, Digits);
         ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, StringLen(l_dbl2str_56) - 2, 2));
         if (ld_16 >= 0.0 && ld_16 <= 15.0) ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, 0, StringLen(l_dbl2str_56) - 2) + "00") - 5.0 * Point;
         else {
            if (ld_16 >= 50.0 && ld_16 <= 65.0) ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, 0, StringLen(l_dbl2str_56) - 2) + "50") - 5.0 * Point;
            else ld_16 = ld_128;
         }
         ObjectSetText("lmn5", "Conservative Target: " + DoubleToStr(ld_16, Digits), g_fontsize_176, gs_arial_180, TextColor);
         ld_16 = (ld_104 - ld_112) / Point + l_spread_136;
         ld_16 *= l_tickvalue_144;
         ld_16 = RiskRatio * AccountSize / ld_16;
         ld_24 = (ld_104 - ld_120) / Point + l_spread_136;
         ld_24 *= l_tickvalue_144;
         ld_24 = RiskRatio * AccountSize / ld_24;
         ObjectSetText("lmn6", "Aggressive Lot Size Multiplier: " + DoubleToStr(ld_16, 2), g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn7", "Conservative Lot Size Multiplier: " + DoubleToStr(ld_24, 2), g_fontsize_176, gs_arial_180, TextColor);
      }
   } else {
      if (gi_200 == 2) {
         for (l_index_12 = 0; l_index_12 < Bars && g_ibuf_188[l_index_12] == EMPTY_VALUE; l_index_12++) {
         }
         if (g_ibuf_188[l_index_12] != EMPTY_VALUE) {
            gd_212 = g_ibuf_188[l_index_12];
            gd_220 = g_ibuf_192[l_index_12];
            ld_104 = gd_220 - 5.0 * Point;
            ld_112 = gd_220 + (gd_212 - gd_220) / 2.0 + 5.0 * Point;
            ld_120 = gd_212 + 5.0 * Point;
            ObjectSetText("lmn1", "Entry: " + DoubleToStr(ld_104, Digits), g_fontsize_176, gs_arial_180, TextColor);
            ObjectSetText("lmn2", "Aggressive Stop Loss: " + DoubleToStr(ld_112, Digits), g_fontsize_176, gs_arial_180, TextColor);
            ObjectSetText("lmn3", "Conservative Stop Loss: " + DoubleToStr(ld_120, Digits), g_fontsize_176, gs_arial_180, TextColor);
            ld_128 = gd_212 - ld_0;
            ObjectSetText("lmn4", "Aggressive Target: " + DoubleToStr(ld_128, Digits), g_fontsize_176, gs_arial_180, TextColor);
            l_dbl2str_56 = DoubleToStr(ld_128, Digits);
            ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, StringLen(l_dbl2str_56) - 2, 2));
            if (ld_16 >= 85.0 && ld_16 <= 0.0) ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, 0, StringLen(l_dbl2str_56) - 2) + "00") + 5.0 * Point;
            else {
               if (ld_16 >= 35.0 && ld_16 <= 50.0) ld_16 = StrToDouble(StringSubstr(l_dbl2str_56, 0, StringLen(l_dbl2str_56) - 2) + "50") + 5.0 * Point;
               else ld_16 = ld_128;
            }
            ObjectSetText("lmn5", "Conservative Target: " + DoubleToStr(ld_16, Digits), g_fontsize_176, gs_arial_180, TextColor);
            ld_16 = (ld_112 - ld_104) / Point + l_spread_136;
            ld_16 *= l_tickvalue_144;
            ld_16 = RiskRatio * AccountSize / ld_16;
            ld_24 = (ld_120 - ld_104) / Point + l_spread_136;
            ld_24 *= l_tickvalue_144;
            ld_24 = RiskRatio * AccountSize / ld_24;
            ObjectSetText("lmn6", "Aggressive Lot Size Multiplier: " + DoubleToStr(ld_16, 2), g_fontsize_176, gs_arial_180, TextColor);
            ObjectSetText("lmn7", "Conservative Lot Size Multiplier: " + DoubleToStr(ld_24, 2), g_fontsize_176, gs_arial_180, TextColor);
         }
      } else {
         ObjectSetText("lmn1", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn2", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn3", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn4", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn5", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn6", "", g_fontsize_176, gs_arial_180, TextColor);
         ObjectSetText("lmn7", "", g_fontsize_176, gs_arial_180, TextColor);
      }
   }
   if (gi_200 == 1) ObjectSetText(gs_mainind1_148, "LONG TRADE", g_fontsize_136, gs_arial_140, g_color_124);
   else {
      if (gi_200 == 2) ObjectSetText(gs_mainind1_148, "SHORT TRADE", g_fontsize_136, gs_arial_140, g_color_128);
      else {
         if (gi_200 == 3) ObjectSetText(gs_mainind1_148, "NO TRADE", g_fontsize_136, gs_arial_140, g_color_132);
         else ObjectSetText(gs_mainind1_148, "", g_fontsize_136, gs_arial_140, g_color_124);
      }
   }
   return (0);
}