#property copyright "KibizoiD Edition"

string gs_76 = "Progressor 1.9";
double gd_84 = 8074482.0;
int gi_92 = 345345;

extern string S__0 = "Открывать сделки в это время ------------------------------------------";
extern bool Working_Time = FALSE;
extern int OpenHour = 0;
extern int CloseHour = 24;
extern string S__1 = "Начальный системный лот ----------------------------";
extern double First_lot = 0.1;
extern string S__2 = "Не ждать закрытия свечей -------------------------------";
extern bool EachTickMode = TRUE;
extern string S__3 = "Торговать в пятницу-------------------------------------";
extern bool Trade_in_fri = TRUE;
extern string S__4 = "Диапазон между уровнями/Всего уровней ------------------";
extern double Distance = 34.0;
extern int Level = 10;
extern string S__5 = "Умножение дополнительных сделок ------------------------";
extern bool Martin_mode = TRUE;
extern double Multiplier = 2.0;
extern double Increament = 0.1;
extern double Lot_Multiplier_2 = 1.5;
extern int Lot_multi_2_level = 3;
extern string S__6 = "Использовать фиксированные TP/SL -----------------------";
extern bool Use_SL_TP = FALSE;
extern string S__7 = "Уровень прибыли(тейк профита)  в пунктах: --------------";
extern double TakeProfit = 30.0;
extern string S__8 = "Уровень стоп-лосс в пунктах: ---------------------------";
extern double StopLose = 60.0;
extern string S__9 = "Закрывать все сделки по достижении этих денег: --------";
extern double TP_in_money = 500.0;
extern string S__10 = "Трал общего профита --------";
extern bool   UseTrailing = false;
extern double percent_of_profit =33;
extern double minimum_profit = 50;
double profit,profit_off,profit_result;
bool trail_enable=false,close_start=false;
extern string x6_="******** Настройки Индикаторов *********";

extern string s1                    = "Moving Average";
extern bool   ma_on_of           = true;
extern int    ma_period1            = 300;
//extern int    ma_period2            = 36;
extern int    ma_period3            = 4;
extern int    ma_method             = MODE_LWMA;

extern string s2                    = "RSI";
extern bool   rsi_on_of             = true;
extern int    rsi_period            = 14;
extern double rsi_level_up          = 60.0;
extern double rsi_level_dn          = 40.0;

extern string s3                    = "ADX";
extern bool   adx_on_of             = true;
extern int    adx_period            = 14;
extern double adx_level             = 20.0;

extern string s4                    = "MACD";
extern bool   macd_on_of           = true;
extern bool   macd_trend           = true;
extern int    macd1_fast_ema_period = 8; 
extern int    macd1_slow_ema_period = 17; 

extern int    macd2_fast_ema_period = 12;
extern int    macd2_slow_ema_period = 26;

extern double macd_level_up        = 0.0003;
extern double macd_level_dn        = -0.0003;
extern string x7_="***********************";
extern string S_10 = "Режим НЕВИДИМКА ----------------------------------------";
extern bool Invisible_mode = TRUE;
extern string S_11 = "Информация о балансе и торговле--------------------------";
extern bool Info = TRUE;
//extern string S_11 = "Хеджинг ------------------------------------------------";
bool Hedge = TRUE;

int gi_324 = 0;
int gi_328 = 0;
int gi_332 = 0;
int gi_336 = 0;
int gi_340;
int gi_344;
int gi_348 = 12;
int gi_352 = 26;
int gi_356 = 9;
double gd_360;
double gd_376;
double gd_384;
double gd_392;
double gd_400;
double gd_416;
double gd_424;
double gd_432;
double gd_440;
double gd_448;
double gd_456;
double gd_464;
double gd_472;
double gd_480;
double gd_488;
double gd_496;
bool gi_504;
bool gi_508 = FALSE;
string gs_null_512 = "NULL";
color  WevesColor; 
color SignalColor;
string Signal;
int  mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
//int cnt,cu;

int init() {
   gi_340 = Bars;
   if (EachTickMode) gi_344 = 0;
   else gi_344 = 1;
   if (Digits == 3 || Digits == 5) gd_360 = 10.0 * Point;
   else gd_360 = Point;
   gd_376 = MarketInfo(Symbol(), MODE_MINLOT);
   gd_384 = MarketInfo(Symbol(), MODE_MAXLOT);
   gd_392 = MarketInfo(Symbol(), MODE_STOPLEVEL);
   if (First_lot < gd_376) Print("lotsize is to small.");
   if (StopLose < gd_392) Print("stoploss is to tight.");
   if (TakeProfit < gd_392) Print("takeprofit is to tight.");
   if (gd_376 == 0.01) gi_324 = 2;
   if (gd_376 == 0.1) gi_324 = 1;
   gd_400 = First_lot;
   //if (Hedge == FALSE) Hedge_start = 0;
   //gd_416 = H_lot_factor;
   //gd_424 = H_tp_factor * Distance * gd_360;
   gd_432 = Multiplier;
   gd_440 = Lot_Multiplier_2;
   gd_448 = Lot_multi_2_level;
   gd_456 = AccountEquity();
   profit_off=0;
   profit_result = 0;
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int li_20;
   int li_28;
   int li_32;
   int li_60;
   int MASignal;
   double ld_64;
   double ld_72;
   double ld_88;
   double ld_96;
   double ld_104;
   double ld_128;
   double ld_136;
   double ld_144;
   double fast_ma,slow_ma,trand_ma;
   if (!Trade_in_fri && DayOfWeek() == 5 && total() == 0) {
      Comment("\nstop trading in Friday.");
      return (0);
   }
   int li_0 = AccountNumber();
 //  int li_0 = 3034383;
 //  int li_4 = KEY;
   int li_4 = li_0 * 2 + 1000001;
   
   if (GetSignal()==OP_SELL) {
      Signal = "SELL";
      SignalColor=Red;
   } else if (GetSignal()==OP_BUY) {
      Signal = "BUY";
      SignalColor=Lime;
   } else {
      Signal = " ";
      SignalColor=White;
   }
   
  if(UseTrailing) {
         TrailingPositions();
  } 
   
   int li_8 = 0;
   int li_12 = 0;
   int li_16 = 0;
   int li_24 = 0;
   bool li_36 = FALSE;
   bool li_40 = FALSE;
   string ls_44 = "0";
   for (int li_52 = 0; li_52 <= OrdersTotal(); li_52++) {
      OrderSelect(li_52, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_92 && OrderType() < OP_BUYLIMIT) {
         li_8++;
         li_28 = OrderOpenTime();
         if (OrderType() == OP_BUY) li_12++;
         if (OrderType() == OP_SELL) li_16++;
         if (li_8 == 1 || li_28 < li_32) {
            li_32 = li_28;
            ls_44 = "B";
            if (OrderType() == OP_SELL) ls_44 = "S";
         }
      }
   }
   if (ls_44 == "B") {
      li_24 = li_12;
      li_20 = li_16;
      gs_null_512 = "BUY";
      //if (Hedge == TRUE && li_12 >= Hedge_start - 1) li_36 = TRUE;
   }
   if (ls_44 == "S") {
      li_24 = li_16;
      li_20 = li_12;
      gs_null_512 = "SELL";
     // if (Hedge == TRUE && li_16 >= Hedge_start - 1) li_40 = TRUE;
   }
   Multiplier = gd_432;
   if (gd_440 > 0.0 && li_24 >= gd_448 - 1.0) Multiplier = gd_440;
   if (li_8 == 0) gi_504 = FALSE;
   if (IsTradeTime() && li_24 == 0 && gi_328 == 0 && li_20 == 0) {
      if (IsTradeTime() && gi_504 == FALSE && GetSignal()==OP_BUY) {
         if (Invisible_mode) {
            if (Use_SL_TP) {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, Ask - StopLose * gd_360, Ask + TakeProfit * gd_360, gs_76, gi_92, 0, Blue);
            } else {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, 0, 0, gs_76, gi_92, 0, Blue);
            }
         } else {
            if (Use_SL_TP) {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, First_lot) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               if (OrderSend(Symbol(), OP_BUY, First_lot, Ask, 3, Ask - StopLose * gd_360, Ask + TakeProfit * gd_360, gs_76, gi_92, 0, Blue) > 0) {
                  for (int li_56 = 1; li_56 < Level; li_56++) {
                     if (Martin_mode) {
                        gd_400 = NormalizeDouble(First_lot * MathPow(Multiplier, li_56), gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_BUYLIMIT, gd_400, Ask - Distance * li_56 * gd_360, 3, Ask - Distance * li_56 * gd_360 - StopLose * gd_360, Ask - Distance * li_56 * gd_360 +
                           TakeProfit * gd_360, gs_76, gi_92, 0, Blue);
                     } else {
                        gd_400 = NormalizeDouble(First_lot + Increament * li_56, gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_BUYLIMIT, gd_400, Ask - Distance * li_56 * gd_360, 3, Ask - Distance * li_56 * gd_360 - StopLose * gd_360, Ask - Distance * li_56 * gd_360 +
                           TakeProfit * gd_360, gs_76, gi_92, 0, Blue);
                     }
                  }
               }
            } else {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, First_lot) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               if (OrderSend(Symbol(), OP_BUY, First_lot, Ask, 3, 0, 0, gs_76, gi_92, 0, Blue) > 0) {
                  for (li_56 = 1; li_56 < Level; li_56++) {
                     if (Martin_mode) {
                        gd_400 = NormalizeDouble(First_lot * MathPow(Multiplier, li_56), gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_BUYLIMIT, gd_400, Ask - Distance * li_56 * gd_360, 3, 0, 0, gs_76, gi_92, 0, Blue);
                     } else {
                        gd_400 = NormalizeDouble(First_lot + Increament * li_56, gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_BUYLIMIT, gd_400, Ask - Distance * li_56 * gd_360, 3, 0, 0, gs_76, gi_92, 0, Blue);
                     }
                  }
               }
            }
         }
         if (li_36 == TRUE) {
            if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400 * gd_416) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
               Print("No money for opening order");
               return;
            }
            gi_332 = OrderSend(Symbol(), OP_SELL, gd_400 * gd_416, Bid, 3, 0, Bid - gd_424, gs_76 + " h", gi_92, 0, Red);
         }
      }
      if (IsTradeTime() && gi_504 == FALSE && GetSignal()==OP_SELL) {
         if (Invisible_mode) {
            if (Use_SL_TP) {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, Bid + StopLose * gd_360, Bid - TakeProfit * gd_360, gs_76, gi_92, 0, Red);
            } else {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, 0, 0, gs_76, gi_92, 0, Red);
            }
         } else {
            if (Use_SL_TP) {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, First_lot) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               if (OrderSend(Symbol(), OP_SELL, First_lot, Bid, 3, Bid + StopLose * gd_360, Bid - TakeProfit * gd_360, gs_76, gi_92, 0, Red) > 0) {
                  for (li_56 = 1; li_56 < Level; li_56++) {
                     if (Martin_mode) {
                        gd_400 = NormalizeDouble(First_lot * MathPow(Multiplier, li_56), gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_SELLLIMIT, gd_400, Bid + Distance * li_56 * gd_360, 3, Bid + Distance * li_56 * gd_360 + StopLose * gd_360, Bid + Distance * li_56 * gd_360 - TakeProfit * gd_360, gs_76, gi_92, 0, Red);
                     } else {
                        gd_400 = NormalizeDouble(First_lot + Increament * li_56, gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_SELLLIMIT, gd_400, Bid + Distance * li_56 * gd_360, 3, Bid + Distance * li_56 * gd_360 + StopLose * gd_360, Bid + Distance * li_56 * gd_360 - TakeProfit * gd_360, gs_76, gi_92, 0, Red);
                     }
                  }
               }
            } else {
               gd_400 = First_lot;
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, First_lot) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               if (OrderSend(Symbol(), OP_SELL, First_lot, Bid, 3, 0, 0, gs_76, gi_92, 0, Red) > 0) {
                  for (li_56 = 1; li_56 < Level; li_56++) {
                     if (Martin_mode) {
                        gd_400 = NormalizeDouble(First_lot * MathPow(Multiplier, li_56), gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_SELLLIMIT, gd_400, Bid + Distance * li_56 * gd_360, 3, 0, 0, gs_76, gi_92, 0, Red);
                     } else {
                        gd_400 = NormalizeDouble(First_lot + Increament * li_56, gi_324);
                        if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                           Print("No money for opening order");
                           return;
                        }
                        gi_332 = OrderSend(Symbol(), OP_SELLLIMIT, gd_400, Bid + Distance * li_56 * gd_360, 3, 0, 0, gs_76, gi_92, 0, Red);
                     }
                  }
               }
            }
         }
         if (li_40 == TRUE) {
            if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400 * gd_416) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
               Print("No money for opening order");
               return;
            }
            gi_332 = OrderSend(Symbol(), OP_BUY, gd_400 * gd_416, Ask, 3, 0, Ask + gd_424, gs_76 + " h", gi_92, 0, Blue);
         }
      }
   }
   if (IsTradeTime() && Invisible_mode && li_24 > 0 && li_24 < Level && li_20 == 0) {
      for (li_56 = 0; li_56 < OrdersTotal(); li_56++) {
         OrderSelect(li_56, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92) continue;
         li_60 = OrderType();
         ld_64 = OrderOpenPrice();
         ld_72 = OrderLots();
      }
      if (li_60 == OP_BUY && Ask <= ld_64 - Distance * gd_360 && gi_504 == FALSE) {
         if (Use_SL_TP) {
            if (Martin_mode) {
               gd_400 = NormalizeDouble(ld_72 * Multiplier, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, Ask - StopLose * gd_360, Ask + TakeProfit * gd_360, gs_76, gi_92, 0, Blue);
            } else {
               gd_400 = NormalizeDouble(ld_72 + Increament, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, Ask - StopLose * gd_360, Ask + TakeProfit * gd_360, gs_76, gi_92, 0, Blue);
            }
         } else {
            if (Martin_mode) {
               gd_400 = NormalizeDouble(ld_72 * Multiplier, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, 0, 0, gs_76, gi_92, 0, Blue);
            } else {
               gd_400 = NormalizeDouble(ld_72 + Increament, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_BUY, gd_400, Ask, 3, 0, 0, gs_76, gi_92, 0, Blue);
            }
         }
         if (li_36 == TRUE) {
            if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400 * gd_416) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
               Print("No money for opening order");
               return;
            }
            gi_332 = OrderSend(Symbol(), OP_SELL, gd_400 * gd_416, Bid, 3, 0, Bid - gd_424, gs_76 + " h", gi_92, 0, Red);
         }
      }
      if (li_60 == OP_SELL && Bid >= ld_64 + Distance * gd_360 && gi_504 == FALSE) {
         if (Use_SL_TP) {
            if (Martin_mode) {
               gd_400 = NormalizeDouble(ld_72 * Multiplier, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, Bid + StopLose * gd_360, Bid - TakeProfit * gd_360, gs_76, gi_92, 0, Red);
            } else {
               gd_400 = NormalizeDouble(ld_72 + Increament, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, Bid + StopLose * gd_360, Bid - TakeProfit * gd_360, gs_76, gi_92, 0, Red);
            }
         } else {
            if (Martin_mode) {
               gd_400 = NormalizeDouble(ld_72 * Multiplier, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, 0, 0, gs_76, gi_92, 0, Red);
            } else {
               gd_400 = NormalizeDouble(ld_72 + Increament, gi_324);
               if (AccountFreeMarginCheck(Symbol(), OP_SELL, gd_400) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
                  Print("No money for opening order");
                  return;
               }
               gi_332 = OrderSend(Symbol(), OP_SELL, gd_400, Bid, 3, 0, 0, gs_76, gi_92, 0, Red);
            }
         }
         if (li_40 == TRUE) {
            if (AccountFreeMarginCheck(Symbol(), OP_BUY, gd_400 * gd_416) <= 0.0 || GetLastError() == 134/* NOT_ENOUGH_MONEY */) {
               Print("No money for opening order");
               return;
            }
            gi_332 = OrderSend(Symbol(), OP_BUY, gd_400 * gd_416, Ask, 3, 0, Ask + gd_424, gs_76 + " h", gi_92, 0, Blue);
         }
      }
   }
   double ld_80 = 0;
   li_52 = 0;
   for (li_52 = 0; li_52 <= OrdersTotal(); li_52++) {
      OrderSelect(li_52, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == gi_92 && OrderType() < OP_BUYLIMIT) {
         if ((ls_44 == "B" && OrderType() == OP_SELL) || (ls_44 == "S" && OrderType() == OP_BUY)) ld_88 += OrderLots();
         ld_96 += OrderLots();
         ld_80 = ld_96 - ld_88;
         ld_104 = ld_80 - ld_88;
      }
   }
   double ld_112 = AccountEquity();
   double ld_120 = ld_112 - gd_456;
   if (ld_120 > ld_128) ld_128 = ld_120;

   if(Info){
   if (AccountBalance()<0) WevesColor=Red; else WevesColor=Lime;
      ObjectSetText("БАЛАНС","  БАЛАНС: "+DoubleToStr(AccountBalance()/100,2)+" | Доступно: "+DoubleToStr(ld_112/100,2),11,"Arial",WevesColor);
      ObjectSetText("Инфо","  Ордеров:" + DoubleToStr(OrdersTotal(), 0) + " | Объем сделок: "+ DoubleToStr(ld_80, 2),9,"Arial",White);
   
   if (Signal != "") {ObjectSetText("Сигнал","  " + Signal + "  ",12,"Arial",SignalColor);} 
   
 
      ObjectCreate("БАЛАНС", OBJ_LABEL, 0, 0, 0);// Создание объ.
      ObjectSet("БАЛАНС", OBJPROP_CORNER, 2);      
      ObjectSet("БАЛАНС", OBJPROP_XDISTANCE, 2 ); 
      ObjectSet("БАЛАНС", OBJPROP_YDISTANCE, 45);// Координата Y
   
      ObjectCreate("Инфо", OBJ_LABEL, 0, 0, 0);// Создание объ.
      ObjectSet("Инфо", OBJPROP_CORNER, 2);      
      ObjectSet("Инфо", OBJPROP_XDISTANCE, 2 ); 
      ObjectSet("Инфо", OBJPROP_YDISTANCE, 25);// Координата Y 
      
      ObjectCreate("Сигнал", OBJ_LABEL, 0, 0, 0);// Создание объ.
      ObjectSet("Сигнал", OBJPROP_CORNER, 3);      
      ObjectSet("Сигнал", OBJPROP_XDISTANCE, 2 ); 
      ObjectSet("Сигнал", OBJPROP_YDISTANCE, 25);// Координата Y 
   }   
   if (Use_SL_TP && total() > 1) {
      for (li_56 = 0; li_56 < OrdersTotal(); li_56++) {
         OrderSelect(li_56, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92 || OrderType() > OP_SELL) continue;
         li_60 = OrderType();
         ld_136 = OrderStopLoss();
         ld_144 = OrderTakeProfit();
      }
      for (li_56 = OrdersTotal() - 1; li_56 >= 0; li_56--) {
         OrderSelect(li_56, SELECT_BY_POS, MODE_TRADES);
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92 || OrderType() > OP_SELL) continue;
         if (OrderType() == li_60)
            if (OrderStopLoss() != ld_136 || OrderTakeProfit() != ld_144) OrderModify(OrderTicket(), OrderOpenPrice(), ld_136, ld_144, 0, CLR_NONE);
      }
   }
   double ld_152 = 0;
   for (li_56 = 0; li_56 < OrdersTotal(); li_56++) {
      OrderSelect(li_56, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92 || OrderType() > OP_SELL) continue;
      ld_152 += OrderProfit();
   }
   if (ld_152 >= TP_in_money || gi_328 > 0) {
      closeall();
      closeall();
      closeall();
      gi_328++;
      if (total() == 0) gi_328 = 0;
   }
   if ((!Invisible_mode) && Use_SL_TP && total() < Level) closeall();
   return (0);
}
/*
double dailyprofit() {
   int li_0 = Day();
   double ld_4 = 0;
   for (int li_12 = 0; li_12 < OrdersHistoryTotal(); li_12++) {
      OrderSelect(li_12, SELECT_BY_POS, MODE_HISTORY);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92) continue;
      if (TimeDay(OrderOpenTime()) == li_0) ld_4 += OrderProfit();
   }
   return (ld_4);
}
*/
int total() {
   int li_0 = 0;
   for (int li_4 = 0; li_4 < OrdersTotal(); li_4++) {
      OrderSelect(li_4, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92) continue;
      li_0++;
   }
   return (li_0);
}

void closeall() {
   for (int li_0 = OrdersTotal() - 1; li_0 >= 0; li_0--) {
      OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != gi_92) continue;
      gi_504 = TRUE;
      if (OrderType() > OP_SELL) OrderDelete(OrderTicket());
      else {
         if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
         else OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
      }
   }
}

//**********************************************************
int GetSignal()
{
 if(buy())return(OP_BUY);
 if(sel())return(OP_SELL);
 return(-1);
}
bool buy()
{
 if(MA()!=OP_BUY) return(false);
 if(macd_on_of==true && MACD()!=OP_BUY)return(false);
 if(rsi_on_of==true && RSI()!=OP_BUY)return(false);
 if(adx_on_of==true && ADX()==false)return(false);
 if(Barrs()!=OP_BUY)return(false);
 //if(Signal_QQE()!= 1)return(false); 
 
 return(true);
}
bool sel()
{
 if(ma_on_of==true && MA()!=OP_SELL) return(false);
 if(macd_on_of==true && MACD()!=OP_SELL)return(false);
 if(rsi_on_of==true && RSI()!=OP_SELL)return(false);
 if(adx_on_of==true && ADX()==false)return(false);
 if(Barrs()!=OP_SELL) return(false);
 //if(Signal_QQE()!= -1)return(false);
 
 return(true);
}
int MA()
{
 double MA1,MA3; //MA2
 if (EachTickMode) {
   MA1 = iMA(Symbol(),0,ma_period1,0,ma_method,PRICE_CLOSE,1);
   //MA2 = iMA(Symbol(),0,ma_period2,0,ma_method,PRICE_CLOSE,1);
   MA3 = iMA(Symbol(),0,ma_period3,0,ma_method,PRICE_CLOSE,1);
 }else{
   MA1 = iMA(Symbol(),0,ma_period1,0,ma_method,PRICE_CLOSE,2);
   //MA2 = iMA(Symbol(),0,ma_period2,0,ma_method,PRICE_CLOSE,2);
   MA3 = iMA(Symbol(),0,ma_period3,0,ma_method,PRICE_CLOSE,2);
 }  
   if(Close[0]>MA1&&MA3>MA1)return(OP_BUY);
   if(Close[0]<MA1&&MA3<MA1)return(OP_SELL);
   
   return(-1);
}
int MACD()
{
 double MACD1,MACD2,MACD3,MACD4;
 if(macd_on_of){
 if (EachTickMode) {
   MACD1 = iMACD(Symbol(),0,macd1_fast_ema_period,macd1_slow_ema_period,9,PRICE_CLOSE,MODE_MAIN,0); 
   MACD2 = iMACD(Symbol(),0,macd1_fast_ema_period,macd1_slow_ema_period,9,PRICE_CLOSE,MODE_SIGNAL,0); 
 
   MACD3 = iMACD(Symbol(),0,macd2_fast_ema_period,macd2_slow_ema_period,9,PRICE_CLOSE,MODE_MAIN,0); 
   MACD4 = iMACD(Symbol(),0,macd2_fast_ema_period,macd2_slow_ema_period,9,PRICE_CLOSE,MODE_SIGNAL,0); 
 }else{ 
   MACD1 = iMACD(Symbol(),0,macd1_fast_ema_period,macd1_slow_ema_period,9,PRICE_CLOSE,MODE_MAIN,1); 
   MACD2 = iMACD(Symbol(),0,macd1_fast_ema_period,macd1_slow_ema_period,9,PRICE_CLOSE,MODE_SIGNAL,1); 
 
   MACD3 = iMACD(Symbol(),0,macd2_fast_ema_period,macd2_slow_ema_period,9,PRICE_CLOSE,MODE_MAIN,1); 
   MACD4 = iMACD(Symbol(),0,macd2_fast_ema_period,macd2_slow_ema_period,9,PRICE_CLOSE,MODE_SIGNAL,1);  
 }
 if(macd_trend)
 {
 if(MACD1>macd_level_up&&MACD1>MACD2)return(OP_BUY);
 if(MACD3<macd_level_dn&&MACD3<MACD4)return(OP_SELL);
 }
 else
 {
 if(MACD1>macd_level_up)return(OP_BUY);
 if(MACD3<macd_level_dn)return(OP_SELL);
 }
 }
 return(-1);
}
int RSI()
{
 double RSI;
 if(rsi_on_of){
 if (EachTickMode) {
   RSI = iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,0);
 }else{ 
   RSI = iRSI(Symbol(),0,rsi_period,PRICE_CLOSE,1);
 }
 
 if(RSI>rsi_level_up)return(OP_BUY);
 if(RSI<rsi_level_dn)return(OP_SELL);
 }
 return(-1);
}
bool ADX()
{
 double ADX;
 if(adx_on_of){
 if (EachTickMode) { 
   ADX = iADX(Symbol(),0,adx_period,PRICE_CLOSE,MODE_MAIN,0);
 }else{
   ADX = iADX(Symbol(),0,adx_period,PRICE_CLOSE,MODE_MAIN,1);
 }
 
 if(ADX>adx_level)return(true);
 }
 return(false);
}

bool Barrs()
{
 if(Open[2]<Close[2] && Open[1]<Close[1] && Open[2]<Open[1])return(OP_BUY);
 if(Open[2]>Close[2] && Open[1]>Close[1] && Open[2]>Open[1])return(OP_SELL);
 
 return(-1);
}

void TrailingPositions() {

      Sleep (50);
      RefreshRates(); 
//----
      if (close_start)
         {
         for (int i=OrdersTotal();i>=1;i--)
            {
            OrderSelect (i-1,SELECT_BY_POS,MODE_TRADES);
            //if (OrderSymbol() = Symbol() || OrderMagicNumber() != gi_92) continue;
               {
               if (OrderType()==OP_BUY && OrderSymbol() == Symbol())
                  {
                  double price = MarketInfo (OrderSymbol(),MODE_BID);
                  OrderClose (OrderTicket(),OrderLots(),price,3,0);
                  profit_result = OrderProfit()+profit_result;
                  }
               if (OrderType()==OP_SELL && OrderSymbol() == Symbol())
                  {
                  price = MarketInfo (OrderSymbol(),MODE_ASK);
                  OrderClose (OrderTicket(),OrderLots(),price,3,0);
                  profit_result = OrderProfit()+profit_result;
                  }
               }
            }
         }
      for (i=OrdersTotal();i>=1;i--)
         {
         OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES);
         if (OrderSymbol() != Symbol()) continue;
         profit = OrderProfit()+OrderSwap()+profit;
         }
      if (close_start&&OrdersTotal()==0)
         {
         trail_enable=false;
         close_start= false;
         Alert ("Закрыли позиции с результатом ", profit_result/100);
         profit_off=0;
         profit_result = 0;
         }
      if (!trail_enable&&OrdersTotal()!=0)
         {
         Comment ("Режим трала выключен." ,"\n","Начнем сопровождать ордера при росте прибыли до ",minimum_profit/100,
                  " текущая прибыль ", profit/100);
         }
      if ((profit_off==0&&minimum_profit < profit)||(profit_off!=0&&profit_off<profit-profit*(percent_of_profit/100)))
         {
         trail_enable=true;
         profit_off=profit-profit*(percent_of_profit/100);
         Comment("Режим трала включен." ,"\n","Закроем ордера при падении прибыли до ",profit_off/100);
         }
      if (trail_enable&&profit_off>profit)
         {
         close_start=true;
         }
      profit =0;
//----
   return(0);
}

//**********************************************************

int IsTradeTime() {
   if (!Working_Time) return (1);
   if (OpenHour < CloseHour && TimeHour(TimeCurrent()) < OpenHour || TimeHour(TimeCurrent()) >= CloseHour) return (0);
   if (OpenHour > CloseHour && (TimeHour(TimeCurrent()) < OpenHour && TimeHour(TimeCurrent()) >= CloseHour)) return (0);
   if (OpenHour == 0) CloseHour = 24;
   if (Hour() == CloseHour - 1 && Minute() >= 55) return (0);
   return (1);
}

