
#property show_inputs

extern bool TrailingLine = FALSE;
extern int TradeMagic = 1454877;
extern int Stop_Loss = 25;
extern int Take_Profit = 25;
int g_ticket_92;
double gd_96;

int start() {
   double l_price_16;
   double l_price_24;
   double l_price_32;
   double ld_48;
   bool li_56;
   string ls_88;
   int li_100;
   int li_0 = 10;
   if (Digits == 3 || Digits == 5) gd_96 = 10.0 * Point;
   else gd_96 = Point;
   int l_slippage_4 = 50;
   double ld_68 = WindowPriceOnDropped();
   for (int l_count_80 = 0; l_count_80 <= li_0; l_count_80++) {
      for (int l_pos_84 = 0; l_pos_84 < OrdersTotal(); l_pos_84++) {
         OrderSelect(l_pos_84, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() == Symbol() && TradeMagic == 0 || OrderMagicNumber() == TradeMagic) {
            if (MathAbs((ld_68 - OrderOpenPrice()) / gd_96) <= l_count_80) {
               li_56 = TRUE;
               break;
            }
         }
      }
      if (li_56 == TRUE) break;
   }
   int l_cmd_96 = OrderType();
   if (l_cmd_96 == OP_BUY) ls_88 = "BUY";
   else ls_88 = "SELL";
   g_ticket_92 = OrderTicket();
   double l_bid_8 = Bid;
   if (Stop_Loss > 0) {
      if (l_cmd_96 == OP_BUY) l_price_16 = l_bid_8 - Stop_Loss * gd_96;
      if (l_cmd_96 == OP_SELL) l_price_16 = l_bid_8 + Stop_Loss * gd_96;
      ObjectCreate("Stop_Loss_Line" + g_ticket_92, OBJ_HLINE, 0, 0, l_price_16, 0, 0, 0, 0);
      ObjectSet("Stop_Loss_Line" + g_ticket_92, OBJPROP_COLOR, Red);
      ObjectSetText("Stop_Loss_Line" + g_ticket_92, "Stop_Loss_Line", 6, "Arial", Red);
   } else l_price_16 = 0;
   if (Take_Profit > 0) {
      if (l_cmd_96 == OP_BUY) l_price_32 = l_bid_8 + Take_Profit * gd_96;
      if (l_cmd_96 == OP_SELL) l_price_32 = l_bid_8 - Take_Profit * gd_96;
      ObjectCreate("Take_Profit_Line" + g_ticket_92, OBJ_HLINE, 0, 0, l_price_32, 0, 0, 0, 0);
      ObjectSet("Take_Profit_Line" + g_ticket_92, OBJPROP_COLOR, Lime);
      ObjectSetText("Take_Profit_Line" + g_ticket_92, "Take_Profit_Line", 6, "Arial", Lime);
   } else l_price_32 = 0;
   double ld_60 = l_bid_8 - l_price_16;
   Print("OrderType - ", ls_88, " OrderTicket - ", g_ticket_92, " OpenPrice - ", l_bid_8, " StopLoss - ", l_price_16, " TakeProfit - ", l_price_32);
   ObjectsRedraw();
   while (li_100 < 1) {
      RefreshRates();
      if (ObjectFind("Stop_Loss_Line" + g_ticket_92) != -1) ld_48 = NormalizeDouble(ObjectGet("Stop_Loss_Line" + g_ticket_92, OBJPROP_PRICE1), MarketInfo(Symbol(), MODE_DIGITS));
      else {
         l_price_16 = 0;
         ld_48 = 0;
      }
      if (ObjectFind("Take_Profit_Line" + g_ticket_92) != -1) l_price_32 = NormalizeDouble(ObjectGet("Take_Profit_Line" + g_ticket_92, OBJPROP_PRICE1), MarketInfo(Symbol(), MODE_DIGITS));
      else l_price_32 = 0;
      if (l_price_16 == 0.0 && l_price_32 == 0.0) break;
      if (l_cmd_96 == OP_BUY) l_price_24 = Bid;
      else l_price_24 = Ask;
      if (l_price_16 != ld_48) ld_60 = Bid - ld_48;
      l_price_16 = ld_48;
      if (TrailingLine) {
         if (MathAbs(Bid - l_price_16) > MathAbs(ld_60) && l_price_16 != 0.0) {
            l_price_16 = Bid - ld_60;
            ObjectMove("Stop_Loss_Line" + g_ticket_92, 0, 10, l_price_16);
            ObjectsRedraw();
         }
      }
      Comment("Order ", ls_88, " - ", g_ticket_92, " StopLoss - ", l_price_16, " TakeProfit - ", l_price_32);
      if ((ld_60 < 0.0 && iHigh(NULL, PERIOD_M1, 0) >= l_price_16 && l_price_16 > 0.0) || (ld_60 > 0.0 && iLow(NULL, PERIOD_M1, 0) <= l_price_16) || (iHigh(NULL, PERIOD_M1, 1) < l_price_32 &&
         iHigh(NULL, PERIOD_M1, 0) >= l_price_32) || (iLow(NULL, PERIOD_M1, 1) > l_price_32 && iLow(NULL, PERIOD_M1, 0) <= l_price_32)) {
         for (int l_pos_104 = 0; l_pos_104 < OrdersTotal(); l_pos_104++) {
            OrderSelect(l_pos_104, SELECT_BY_POS, MODE_TRADES);
            if (g_ticket_92 == OrderTicket())
               if (OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(l_price_24,Digits), NormalizeDouble(l_slippage_4,Digits), CLR_NONE)) break;
         }
      }
      OrderSelect(g_ticket_92, SELECT_BY_TICKET, MODE_TRADES);
      if (OrderCloseTime() != 0) break;
      Sleep(2000);
   }
   return (-1);
}

int deinit() {
   ObjectDelete("Stop_Loss_Line" + g_ticket_92);
   ObjectDelete("Take_Profit_Line" + g_ticket_92);
   Comment("");
   return (0);
}