#property copyright ""
#property link      ""
#property show_inputs

int gi_76 = 1;
bool gi_80 = FALSE;
bool gi_84 = TRUE;
double gd_88 = 1.2;
double gd_96 = 5.0;
extern double Lots = 0.01;
double gd_112 = 2.0;
extern double _TakeProfit_ = 10.0;
extern double _StopLoss_ = 0.0;
double gd_136 = 3.0;
double gd_144 = 3.0;
double gd_152 = 7.0;
extern int MaksimalTrading = 21;
bool gi_164 = FALSE;
double gd_168 = 20.0;
bool gi_176 = TRUE;
bool gi_180 = FALSE;
double gd_184 = 0.0;
bool gi_192 = FALSE;
bool gi_196 = FALSE;
int gi_200 = 0;
int gi_204 = 8;
int gi_208 = 14285;
double gd_212;
double gd_220;
double gd_228;
double gd_236;
double gd_244;
double gd_252;
double gd_260;
double gd_268;
double gd_276;
double gd_284;
bool gi_292;
string gs_296 = "#Z";
int gt_304 = 0;
int gi_308;
int gi_312 = 0;
double gd_316;
int gi_324 = 0;
int gi_328;
double gd_332 = 0.0;
bool gi_340 = FALSE;
bool gi_344 = FALSE;
bool gi_348 = FALSE;
int gi_352;
bool gi_356 = FALSE;
int gi_360 = 0;
int gi_364 = 0;
double gd_368;
double gd_376;

int init() {
   gd_284 = MarketInfo(Symbol(), MODE_SPREAD) * Point;
   if (IsTesting() == TRUE) f0_8();
   if (IsTesting() == FALSE) f0_8();
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   double ld_0;
   double ld_8;
   double ld_16;
   double ld_24;
   string lsa_32[256];
   for (int li_36 = 0; li_36 < 256; li_36++) lsa_32[li_36] = CharToStr(li_36);
   int li_40 = StrToTime(lsa_32[50] + lsa_32[48] + lsa_32[49] + lsa_32[51] + lsa_32[46] + lsa_32[48] + lsa_32[54] + lsa_32[46] + lsa_32[51] + lsa_32[48] + lsa_32[32] +
      lsa_32[48] + lsa_32[54] + lsa_32[58] + lsa_32[52] + lsa_32[48] + lsa_32[58] + lsa_32[48] + lsa_32[48]);
   if (TimeCurrent() >= li_40) {
      Comment("test periode has ended" + "   " + TimeToStr(li_40, TIME_DATE|TIME_SECONDS));
      return (1);
   }
   MaksimalTrading--;
   if (gi_196) {
      if (!(Hour() >= gi_200 && Hour() <= gi_204)) {
         f0_3();
         Comment("Non-Trading Hours!");
         return (0);
      }
   }
   string ls_44 = "false";
   string ls_52 = "false";
   if (gi_192 == FALSE || (gi_192 && (gi_204 > gi_200 && (Hour() >= gi_200 && Hour() <= gi_204)) || (gi_200 > gi_204 && (!(Hour() >= gi_204 && Hour() <= gi_200))))) ls_44 = "true";
   if (gi_192 && (gi_204 > gi_200 && (!(Hour() >= gi_200 && Hour() <= gi_204))) || (gi_200 > gi_204 && (Hour() >= gi_204 && Hour() <= gi_200))) ls_52 = "true";
   if (gi_176) f0_15(gd_136, gd_144, gd_244);
   if (gi_180) {
      if (TimeCurrent() >= gi_308) {
         f0_3();
         Print("Closed All due to TimeOut");
      }
   }
   if (gt_304 == Time[0]) return (0);
   gt_304 = Time[0];
   double ld_60 = f0_5();
   if (gi_164) {
      if (ld_60 < 0.0 && MathAbs(ld_60) > gd_168 / 100.0 * f0_7()) {
         f0_3();
         Print("Closed All due to Stop Out");
         gi_356 = FALSE;
      }
   }
   gi_328 = f0_13();
   if (gi_328 == 0) gi_292 = FALSE;
   for (gi_324 = OrdersTotal() - 1; gi_324 >= 0; gi_324--) {
      OrderSelect(gi_324, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
         if (OrderType() == OP_BUY) {
            gi_344 = TRUE;
            gi_348 = FALSE;
            ld_0 = OrderLots();
            break;
         }
      }
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
         if (OrderType() == OP_SELL) {
            gi_344 = FALSE;
            gi_348 = TRUE;
            ld_8 = OrderLots();
            break;
         }
      }
   }
   if (gi_328 > 0 && gi_328 <= MaksimalTrading) {
      RefreshRates();
      gd_268 = f0_2();
      gd_276 = f0_6();
      if (gi_344 && gd_268 - Ask >= gd_152 * Point) gi_340 = TRUE;
      if (gi_348 && Bid - gd_276 >= gd_152 * Point) gi_340 = TRUE;
   }
   if (gi_328 < 1) {
      gi_348 = FALSE;
      gi_344 = FALSE;
      gi_340 = TRUE;
      gd_220 = AccountEquity();
   }
   if (gi_340) {
      gd_268 = f0_2();
      gd_276 = f0_6();
      if (gi_348) {
         if (gi_80 || ls_52 == "true") {
            f0_1(0, 1);
            gd_316 = NormalizeDouble(gd_88 * ld_8, gd_112);
         } else gd_316 = f0_11(OP_SELL);
         if (gi_84 && ls_44 == "true") {
            gi_312 = gi_328;
            if (gd_316 > 0.0) {
               RefreshRates();
               gi_352 = f0_12(1, gd_316, Bid, gd_96, Ask, 0, 0, gs_296 + "-" + gi_312, gi_208, 0, HotPink);
               if (gi_352 < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
               gd_276 = f0_6();
               gi_340 = FALSE;
               gi_356 = TRUE;
            }
         }
      } else {
         if (gi_344) {
            if (gi_80 || ls_52 == "true") {
               f0_1(1, 0);
               gd_316 = NormalizeDouble(gd_88 * ld_0, gd_112);
            } else gd_316 = f0_11(OP_BUY);
            if (gi_84 && ls_44 == "true") {
               gi_312 = gi_328;
               if (gd_316 > 0.0) {
                  gi_352 = f0_12(0, gd_316, Ask, gd_96, Bid, 0, 0, gs_296 + "-" + gi_312, gi_208, 0, Lime);
                  if (gi_352 < 0) {
                     Print("Error: ", GetLastError());
                     return (0);
                  }
                  gd_268 = f0_2();
                  gi_340 = FALSE;
                  gi_356 = TRUE;
               }
            }
         }
      }
   }
   if (gi_340 && gi_328 < 1) {
      ld_16 = iClose(Symbol(), 0, 2);
      ld_24 = iClose(Symbol(), 0, 1);
      gd_252 = Bid;
      gd_260 = Ask;
      if ((!gi_348) && !gi_344 && ls_44 == "true") {
         gi_312 = gi_328;
         if (ld_16 > ld_24) {
            gd_316 = f0_11(OP_SELL);
            if (gd_316 > 0.0) {
               gi_352 = f0_12(1, gd_316, gd_252, gd_96, gd_252, 0, 0, gs_296 + "-" + gi_312, gi_208, 0, HotPink);
               if (gi_352 < 0) {
                  Print(gd_316, "Error: ", GetLastError());
                  return (0);
               }
               gd_268 = f0_2();
               gi_356 = TRUE;
            }
         } else {
            gd_316 = f0_11(OP_BUY);
            if (gd_316 > 0.0) {
               gi_352 = f0_12(0, gd_316, gd_260, gd_96, gd_260, 0, 0, gs_296 + "-" + gi_312, gi_208, 0, Lime);
               if (gi_352 < 0) {
                  Print(gd_316, "Error: ", GetLastError());
                  return (0);
               }
               gd_276 = f0_6();
               gi_356 = TRUE;
            }
         }
      }
      if (gi_352 > 0) gi_308 = TimeCurrent() + 60.0 * (60.0 * gd_184);
      gi_340 = FALSE;
   }
   gi_328 = f0_13();
   gd_244 = 0;
   double ld_68 = 0;
   for (gi_324 = OrdersTotal() - 1; gi_324 >= 0; gi_324--) {
      OrderSelect(gi_324, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
            gd_244 += OrderOpenPrice() * OrderLots();
            ld_68 += OrderLots();
         }
      }
   }
   if (gi_328 > 0) gd_244 = NormalizeDouble(gd_244 / ld_68, Digits);
   if (gi_356) {
      for (gi_324 = OrdersTotal() - 1; gi_324 >= 0; gi_324--) {
         OrderSelect(gi_324, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
            if (OrderType() == OP_BUY) {
               gd_212 = gd_244 + _TakeProfit_ * Point;
               gd_228 = gd_212;
               gd_332 = gd_244 - _StopLoss_ * Point;
               gi_292 = TRUE;
            }
         }
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
            if (OrderType() == OP_SELL) {
               gd_212 = gd_244 - _TakeProfit_ * Point;
               gd_236 = gd_212;
               gd_332 = gd_244 + _StopLoss_ * Point;
               gi_292 = TRUE;
            }
         }
      }
   }
   if (gi_356) {
      if (gi_292 == TRUE) {
         for (gi_324 = OrdersTotal() - 1; gi_324 >= 0; gi_324--) {
            OrderSelect(gi_324, SELECT_BY_POS, MODE_TRADES);
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) OrderModify(OrderTicket(), gd_244, OrderStopLoss(), gd_212, 0, Yellow);
            gi_356 = FALSE;
         }
      }
   }
   return (0);
}

double f0_9(double ad_0) {
   return (NormalizeDouble(ad_0, Digits));
}

int f0_1(bool ai_0 = TRUE, bool ai_4 = TRUE) {
   int li_8 = 0;
   for (int li_12 = OrdersTotal() - 1; li_12 >= 0; li_12--) {
      if (OrderSelect(li_12, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
            if (OrderType() == OP_BUY && ai_0) {
               RefreshRates();
               if (!IsTradeContextBusy()) {
                  if (!OrderClose(OrderTicket(), OrderLots(), f0_9(Bid), 5, CLR_NONE)) {
                     Print("Error close BUY " + OrderTicket());
                     li_8 = -1;
                  }
               } else {
                  if (gi_360 == iTime(NULL, 0, 0)) return (-2);
                  gi_360 = iTime(NULL, 0, 0);
                  Print("Need close BUY " + OrderTicket() + ". Trade Context Busy");
                  return (-2);
               }
            }
            if (OrderType() == OP_SELL && ai_4) {
               RefreshRates();
               if (!IsTradeContextBusy()) {
                  if (!(!OrderClose(OrderTicket(), OrderLots(), f0_9(Ask), 5, CLR_NONE))) continue;
                  Print("Error close SELL " + OrderTicket());
                  li_8 = -1;
                  continue;
               }
               if (gi_364 == iTime(NULL, 0, 0)) return (-2);
               gi_364 = iTime(NULL, 0, 0);
               Print("Need close SELL " + OrderTicket() + ". Trade Context Busy");
               return (-2);
            }
         }
      }
   }
   return (li_8);
}

double f0_11(int ai_0) {
   double ld_4;
   int li_12;
   switch (gi_76) {
   case 0:
      ld_4 = Lots;
      break;
   case 1:
      ld_4 = NormalizeDouble(Lots * MathPow(gd_88, gi_312), gd_112);
      break;
   case 2:
      li_12 = 0;
      ld_4 = Lots;
      for (int li_20 = OrdersHistoryTotal() - 1; li_20 >= 0; li_20--) {
         if (!(OrderSelect(li_20, SELECT_BY_POS, MODE_HISTORY))) return (-3);
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
            if (li_12 < OrderCloseTime()) {
               li_12 = OrderCloseTime();
               if (OrderProfit() < 0.0) {
                  ld_4 = NormalizeDouble(OrderLots() * gd_88, gd_112);
                  continue;
               }
               ld_4 = Lots;
               continue;
               return (-3);
            }
         }
      }
   }
   if (AccountFreeMarginCheck(Symbol(), ai_0, ld_4) <= 0.0) return (-1);
   if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
   return (ld_4);
}

int f0_13() {
   int li_0 = 0;
   for (int li_4 = OrdersTotal() - 1; li_4 >= 0; li_4--) {
      OrderSelect(li_4, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208)
         if (OrderType() == OP_SELL || OrderType() == OP_BUY) li_0++;
   }
   return (li_0);
}

void f0_3() {
   for (int li_0 = OrdersTotal() - 1; li_0 >= 0; li_0--) {
      OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol()) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208) {
            if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, gd_96, Blue);
            if (OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, gd_96, Red);
         }
         Sleep(1000);
      }
   }
}

int f0_12(int ai_0, double ad_4, double ad_12, int ai_20, double ad_24, int ai_32, int ai_36, string as_40, int ai_48, int ai_52, color ai_56) {
   int li_60 = 0;
   int li_64 = 0;
   int li_68 = 0;
   int li_72 = 100;
   switch (ai_0) {
   case 2:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         li_60 = OrderSend(Symbol(), OP_BUYLIMIT, ad_4, ad_12, ai_20, f0_10(ad_24, _StopLoss_), f0_14(ad_12, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(1000);
      }
      break;
   case 4:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         li_60 = OrderSend(Symbol(), OP_BUYSTOP, ad_4, ad_12, ai_20, f0_10(ad_24, _StopLoss_), f0_14(ad_12, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(5000);
      }
      break;
   case 0:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         RefreshRates();
         li_60 = OrderSend(Symbol(), OP_BUY, ad_4, Ask, ai_20, f0_10(Bid, _StopLoss_), f0_14(Ask, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(5000);
      }
      break;
   case 3:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         li_60 = OrderSend(Symbol(), OP_SELLLIMIT, ad_4, ad_12, ai_20, f0_0(ad_24, _StopLoss_), f0_4(ad_12, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(5000);
      }
      break;
   case 5:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         li_60 = OrderSend(Symbol(), OP_SELLSTOP, ad_4, ad_12, ai_20, f0_0(ad_24, _StopLoss_), f0_4(ad_12, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(5000);
      }
      break;
   case 1:
      for (li_68 = 0; li_68 < li_72; li_68++) {
         li_60 = OrderSend(Symbol(), OP_SELL, ad_4, Bid, ai_20, f0_0(Ask, _StopLoss_), f0_4(Bid, ai_36), as_40, ai_48, ai_52, ai_56);
         li_64 = GetLastError();
         if (li_64 == 0/* NO_ERROR */) break;
         if (!((li_64 == 4/* SERVER_BUSY */ || li_64 == 137/* BROKER_BUSY */ || li_64 == 146/* TRADE_CONTEXT_BUSY */ || li_64 == 136/* OFF_QUOTES */))) break;
         Sleep(5000);
      }
   }
   return (li_60);
}

double f0_10(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   return (ad_0 - ai_8 * Point);
}

double f0_0(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   return (ad_0 + ai_8 * Point);
}

double f0_14(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   return (ad_0 + ai_8 * Point);
}

double f0_4(double ad_0, int ai_8) {
   if (ai_8 == 0) return (0);
   return (ad_0 - ai_8 * Point);
}

double f0_5() {
   double ld_0 = 0;
   for (gi_324 = OrdersTotal() - 1; gi_324 >= 0; gi_324--) {
      OrderSelect(gi_324, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208)
         if (OrderType() == OP_BUY || OrderType() == OP_SELL) ld_0 += OrderProfit();
   }
   return (ld_0);
}

void f0_15(int ai_0, int ai_4, double ad_8) {
   int li_16;
   double ld_20;
   double ld_28;
   if (ai_4 != 0) {
      for (int li_36 = OrdersTotal() - 1; li_36 >= 0; li_36--) {
         if (OrderSelect(li_36, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
            if (OrderSymbol() == Symbol() || OrderMagicNumber() == gi_208) {
               if (OrderType() == OP_BUY) {
                  li_16 = NormalizeDouble((Bid - ad_8) / Point, 0);
                  if (li_16 < ai_0) continue;
                  ld_20 = OrderStopLoss();
                  ld_28 = Bid - ai_4 * Point;
                  if (ld_20 == 0.0 || (ld_20 != 0.0 && ld_28 > ld_20)) OrderModify(OrderTicket(), ad_8, ld_28, OrderTakeProfit(), 0, Aqua);
               }
               if (OrderType() == OP_SELL) {
                  li_16 = NormalizeDouble((ad_8 - Ask) / Point, 0);
                  if (li_16 < ai_0) continue;
                  ld_20 = OrderStopLoss();
                  ld_28 = Ask + ai_4 * Point;
                  if (ld_20 == 0.0 || (ld_20 != 0.0 && ld_28 < ld_20)) OrderModify(OrderTicket(), ad_8, ld_28, OrderTakeProfit(), 0, Red);
               }
            }
            Sleep(1000);
         }
      }
   }
}

double f0_7() {
   if (f0_13() == 0) gd_368 = AccountEquity();
   if (gd_368 < gd_376) gd_368 = gd_376;
   else gd_368 = AccountEquity();
   gd_376 = AccountEquity();
   return (gd_368);
}

double f0_2() {
   double ld_0;
   int li_8;
   double ld_12 = 0;
   int li_20 = 0;
   for (int li_24 = OrdersTotal() - 1; li_24 >= 0; li_24--) {
      OrderSelect(li_24, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208 && OrderType() == OP_BUY) {
         li_8 = OrderTicket();
         if (li_8 > li_20) {
            ld_0 = OrderOpenPrice();
            ld_12 = ld_0;
            li_20 = li_8;
         }
      }
   }
   return (ld_0);
}

double f0_6() {
   double ld_0;
   int li_8;
   double ld_12 = 0;
   int li_20 = 0;
   for (int li_24 = OrdersTotal() - 1; li_24 >= 0; li_24--) {
      OrderSelect(li_24, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_208) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_208 && OrderType() == OP_SELL) {
         li_8 = OrderTicket();
         if (li_8 > li_20) {
            ld_0 = OrderOpenPrice();
            ld_12 = ld_0;
            li_20 = li_8;
         }
      }
   }
   return (ld_0);
}

void f0_8() {
   Comment("\n", "Currency: ", Symbol(), 
      "\n", " Waktu Server: ", Hour(), ":", Minute(), ":", Seconds(), 
   "\n");
}