#property  copyright ""
#property  link      ""


extern int MAGIC=123456;
extern double Lots=0.010000;
extern int MaxTrades=20;
extern int Pips=15;
extern double Doble=1.500000;
extern int TakeProfit1=40;
extern int InitialStop1=0;
extern int TrailingStop1=25;
extern int Revers=0;
extern string separator5="Закрываемый профит по всем позициям в валюте депозита";
extern int ProfitIndex=30;
extern string separator6="Кол-во закрываемых позиций по профитиндексу";
extern int ABG_Algoritm=20;
extern string separator16="Параметры индикаторов OsMA,ZeroLag MACD,MACD";
extern int FastEMA=12;
extern int SlowEMA=26;
extern int SignalSMA=9;

string v4C="Торговать по рынку или отложенными лимит ордерами";
bool v54=true;
string v58="Алгоритм закрытия позиций IR или WQ";
bool v60=true;
string v64="Ждать ли закрытия бара перед началом торгов";
bool v6C=false;
string v70="Меджик номер ордера";
string v7C="Общие параметры советника";
bool v84=false;
string vC8="Если Doble2=0 то размер позиции по ордерам выставляется в ручную";
string vD0="Параметры ордера 2";
int vD8=10;
double vDC=0.010000;
double vE4=2.000000;
int vEC=40;
int vF0=0;
int vF4=30;
string vF8="Параметры ордера 3";
int v100=10;
double v104=0.010000;
double v10C=2.000000;
int v114=40;
int v118=0;
int v11C=30;
string v120="Параметры ордера 4";
int v128=10;
double v12C=0.010000;
double v134=2.000000;
int v13C=40;
int v140=0;
int v144=30;
string v148="Параметры ордера 5";
int v150=10;
double v154=0.010000;
double v15C=2.000000;
int v164=40;
int v168=0;
int v16C=30;
string v170="Параметры ордера 6";
int v178=10;
double v17C=0.010000;
double v184=2.000000;
int v18C=40;
int v190=0;
int v194=30;
string v198="Параметры ордера 7";
int v1A0=10;
double v1A4=0.010000;
double v1AC=2.000000;
int v1B4=20;
int v1B8=0;
int v1BC=30;
string v1C0="Параметры ордера 8";
int v1C8=10;
double v1CC=0.010000;
double v1D4=2.000000;
int v1DC=40;
int v1E0=0;
int v1E4=30;
string v1E8="Параметры ордера 9";
int v1F0=10;
double v1F4=0.010000;
double v1FC=2.000000;
int v204=20;
int v208=0;
int v20C=30;
string v210="Параметры ордера 10";
int v218=10;
double v21C=0.010000;
double v224=2.000000;
int v22C=20;
int v230=0;
int v234=30;
int v24C=1;
int v250=0;
int v254=3;
int v258=2;
bool v300=true;

int v264, v268, v26C, v270, v274, v278, v27C, v280, v284, v314, v304, v25C, v260, v308;
double v288, v290, v298, v2A0, v2A8, v2B0, v2B8, v2C0, v2C8, v2D0, v2D8, v2E0, v2E8, v2F0, v2F8;

int init()
{
   v298=MarketInfo(Symbol(), MODE_MAXLOT);
   v2A0=MarketInfo(Symbol(), MODE_MINLOT);
   v2A8=MarketInfo(Symbol(), MODE_LOTSTEP);
   
   v314=Time[0]; v270=MAGIC*10;
   v2F8=MarketInfo(Symbol(), MODE_TICKVALUE);

	return(0);
}


int start()
{
   int v0;
  
   if (!IsTesting())
   {
      if (!IsExpertEnabled())
      {
         Comment("В торговом терминале запрещён запуск экспертов.");
         return (0);
      }
      else
      {
         if (!IsTradeAllowed())
         {
            Comment("Торговля советниками запрещена или торговый поток занят.");
            return (0);   
         }
      }   
   }
   //268
   if ((Time[0]==v314) && v6C) return (0);

   //2C4
   if (v250!=0)
   {
      v2C0=(AccountFreeMargin()/1000) * (v258/100);   
   }
   else
   {
      v2C0=Lots;
   }
   //348 
   
   if (v2C0<v2A0)
   {
      v2C0=v2A0;
   }
   else 
   {
      if (v2C0>v298)
      {
         v2C0=v298;
      }
      else
      {
         v2C0=NormalizeDouble(v2C0/v2A8, 0) * v2A8;
      }
   }
   
   //3D0
   v26C=MarketInfo(Symbol(),MODE_STOPLEVEL);  
   v2F0=0; v304=0; v25C=0;
   
   //448
   for (v260=0; v260<OrdersTotal(); v260++)
   {
      OrderSelect(v260, 0);
      
 
      if ((OrderSymbol()==Symbol()) || (OrderMagicNumber()>v270) || (OrderMagicNumber()<(v270+9)))
      {
         //518    
         if (OrderType()>1)
         {
            v304=1;  
         }
         else
         {
            v0=OrderTicket();
            v25C++;    
            
            InitParam(OrderMagicNumber());
            
            if (OrderType() == OP_BUY)
            {
               //5A0
               v2F0=v2F0+((OrderLots()*(OrderClosePrice()-OrderOpenPrice()))/Point);
               
               if ((OrderTakeProfit()==0)&&(OrderStopLoss()==0)&&(v278!=0 || v27C!=0))
               {
                  if (v278==0)
                  {
                     v290=0;
                  }
                  else
                  {
                     if (OrderTakeProfit()==0)
                     {
                        v290=NormalizeDouble(OrderOpenPrice()+v278*Point, Digits);                     
                     }
                     else
                     {
                        //758
                        v290=NormalizeDouble(OrderTakeProfit(), Digits);   
                     }
                  }
                  //798
                  if (v27C==0)
                  {
                     v288=0;   
                  }
                  else
                  {
                     v288=NormalizeDouble(OrderOpenPrice()-v27C*Point,Digits);
                  }
                  //828
                  OrderModify(OrderTicket(), OrderOpenPrice(), v288, v290, 0);
               }
            }
            //8A8
            if (OrderType()==OP_SELL)
            {
               //8C0
               v2F0=v2F0+((OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point);
               
               if ((OrderTakeProfit()==0)&&(OrderStopLoss()==0)&&((v278!=0)||(v27C!=0)))
               {
                  v290=0;
               }
               else
               {
                  if (OrderTakeProfit()==0)
                  {
                     v290=NormalizeDouble(OrderOpenPrice()-v278*Point, Digits);   
                  }
                  {
                     //A78
                     v290=NormalizeDouble(OrderTakeProfit(), Digits);
                  }
               }
               //AB8 
               if (v27C==0)
               {
                  v288=0;
               }
               else
               {
                  v288=NormalizeDouble(OrderOpenPrice()+v27C*Point, Digits);
               }
               //B48
               OrderModify(OrderTicket(), OrderOpenPrice(), v288, v290, 0);           
            }           
         }      
      }
   }    
   //0BE0
   string v30C="Суммарный профит по ордерам в пунктах*лот ="+v2F0; //
   v2F0=v2F0*v2F8;
   Comment(v30C+". Суммарный профит по ордерам= $"+v2F0+";Открыто ордеров- "+v25C+";MaxTrades-ABG_Algoritm="+(MaxTrades-ABG_Algoritm)+";ProfitIndex="+ProfitIndex);

   //D1C
   if (v268>v25C)
   {
      v308=0;
      if (v60)
      {
         for (v260=OrdersTotal()-1; v260>=0; v260--)
         {
            //D74
            OrderSelect(v260, 0);
            
            if ( (OrderSymbol()==Symbol()) || (OrderMagicNumber()>v270) || (OrderMagicNumber()<(v270+9)))
            {
               if (OrderType()==OP_BUY)
               {
                  OrderClose(OrderTicket(), OrderLots(), Bid, v254, 16711680);  
               }
               else
               {
                  //EB8
                  if (OrderType()==OP_SELL)
                  {
                     OrderClose(OrderTicket(), OrderLots(), Ask, v254, 255);
                  }
                  else
                  {
                     OrderDelete(OrderTicket());
                  }                  
               }
               //F6C
               v308=1;
            }         
         }
      }
      else 
      {
         //F98
         v260=0;
         for (v260=0; v260<OrdersTotal(); v260++)
         {
            OrderSelect(v260, 0);
            if ( (OrderSymbol()==Symbol()) || (OrderMagicNumber()>v270) || OrderMagicNumber()<(v270+9) )
            {
               if (OrderType()==OP_BUY)
               {
                  OrderClose(OrderTicket(), OrderLots(), Bid, v254, 16711680);
               }  
               else
               {
                  //1108
                  if (OrderType()==OP_SELL)
                  {
                     OrderClose(OrderTicket(), OrderLots(), Ask, v254, 255);
                  }
                  else
                  {
                     //1194
                     OrderDelete(OrderTicket());
                  }
               }
               //11BC
               v308=1;
            }
         }
      }
      //11E8
      if (v308==1) return (0);
   }
   //1208   
   v268=v25C;
   if ( (v25C>=(MaxTrades-Pips))&&v24C==1)
   {
      if (v2F0>=ProfitIndex)
      {
         OrderSelect(v0,1);
         if (OrderType()==OP_BUY)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, v254, 65535);   
         }
         else
         {
            if (OrderType()==OP_SELL)
            {
               OrderClose(OrderTicket(), OrderLots(), Ask, v254, 65535);
            }
            v300=0;   
         }
         //13C0  
         return (0);
      }
   }
   
   //13D4
   if (v25C>=MaxTrades)
   {
      v300=0;
   }
   else
   {
      v300=1;
   }
   
   //1404
   if (v2D0==0)
   {
      v2D0=0;
      for (v260=0; v260<OrdersTotal(); v260++)
      {
         OrderSelect(v260, 0);
         if ( (OrderSymbol()==Symbol()) || (OrderMagicNumber()>v270) || (OrderMagicNumber()<(v270+9)) )
         {
            if (OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT)
            {
               v264=2;
               if ( v2D0>OrderOpenPrice() || v2D0==0 )
               {
                  v2D8=OrderLots(); v2D0=OrderOpenPrice();   
               }
            }
            else
            {
               if (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT) 
               {
                  v264=1;
                  if ( v2D0<OrderOpenPrice() )
                  {
                     v2D8=OrderLots(); v2D0=OrderOpenPrice();
                  }
               } 
            }
         }
      }
   }
   
   
   //1698
   if (v25C==0)
   {
      v264=3;
      double v4=iCustom(NULL,0,"OsMA",FastEMA,SlowEMA,SignalSMA,0,0);
      double vC=iCustom(NULL,0,"OsMA",FastEMA,SlowEMA,SignalSMA,0,1);
      double v14=iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,1,0,0);
      double v1C=iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,1,0,1);
      double v24=iMACD(NULL,0,FastEMA,SlowEMA,1,0,0,0);
      double v2C=iMACD(NULL,0,FastEMA,SlowEMA,1,0,0,1);
      
      //196C
      if ((v4>vC)&&(v14>v1C)&&(v24>v2C))
      {
         v264=2;
      }
      //19D4
      if ((v4<vC)&&(v14<v1C)&&(v24<v2C))
      {
         v264=1;
      }
      
      if (Revers==1)
      {
         if (v264==1) v264=2;
         if (v264==2) v264=1;
      }      
   }
   //1A8C
   if (v60)
   {
      for (v260=OrdersTotal()-1; v260>=0; v260--)
      {
         OrderSelect(v260, 0);
         
         if (OrderSymbol()==Symbol() || OrderMagicNumber()>v270 || OrderMagicNumber()<(v270+9) || OrderType()>1 )
         {
            InitParam(OrderMagicNumber());
            if (v280!=0)
            {
               //1BE0
               if (OrderType()==OP_SELL)
               {
                  if ((OrderOpenPrice()-Ask)>=(v280+v284*Point) && (NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+Point*v280, Digits) || OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(), OrderStopLoss(), NormalizeDouble(Ask+v280*Point,Digits),OrderTakeProfit(),8388736);
                  }
               }
               else
               {
                  //1E20
                  if (OrderType()==OP_BUY)
                  {
                     if ((Bid-OrderOpenPrice())>=((v280+v284)*Point) && NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*v280,Digits))
                     {
                        OrderModify(OrderTicket(), OrderTakeProfit(), NormalizeDouble(Bid-Point*v280, Digits), OrderTakeProfit(),65535);
                     }
                  }
               }
            }   
         }
         //2028
      }   
   }
   else
   {
      //2048
      if (!v60)
      {
         for (v260=0; v260<OrdersTotal(); v260++)
         {
            OrderSelect(v260, 0);
            
            if (OrderSymbol()==Symbol() || OrderMagicNumber()>v270 || OrderMagicNumber()<(v270+9) || OrderType()>1)
            {
               InitParam(OrderMagicNumber());
               if (v280!=0)
               {
                  if (OrderType()==OP_SELL)
                  {
                     if ( (OrderOpenPrice()-Ask)>=(v280+v284*Point) && NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+Point*v280, Digits) || OrderStopLoss()==0)
                     {
                        OrderModify(OrderTicket(), OrderStopLoss(), NormalizeDouble(Ask+v280*Point,Digits),OrderTakeProfit(),8388736);
                     }      
                  }
                  else
                  {
                     //23E4
                     if (OrderType()==OP_BUY)
                     {
                        if ((Bid-OrderOpenPrice())>=(v280+v284*Point) && NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*v280,Digits))
                        {
                           OrderModify(OrderTicket(), OrderTakeProfit(), NormalizeDouble(Bid-Point*v280, Digits), OrderTakeProfit(),65535);
                        }
                     }
                  }
               }   
            }         
            //25EC
         }
      }
   }

   //260C 
   if ( (v264==1) && v300)
   {
      if (v25C==0)
      {
         v2D0=0; v2C8=v2C0;
         
         if (v2C8<v2A0)
         {
            v2C8=v2A0;
         }
         else
         {
            if (v2C8>v298)
            {
               v2C8=v298;
            }
            else
            {
               v2C8=NormalizeDouble(v2C8/v2A8,0)*v2A8;
            }  
         }
         //26E8
         OrderSend(Symbol(), OP_SELL, v2C8, Bid, v254, 0,0,"Martin-Profit-Expert"+MAGIC,v270,0,255);
         return (0);
      }
      else
      {
         //27C4
         if (!v304)
         {
            InitParam(v270+v25C);
            
            if (v2E0==0)
            {
               v2C8=v2E8;
            }
            else
            {
               v2C8=v2D8*v2E0;
            }
            //2848
            if (v2C8<v2A0)
            {
               v2C8=v2A0;
            }
            else
            {
               if (v2C8>v298)
               {
                  v2C8=v298;
               }
               else
               {
                  v2C8=NormalizeDouble(v2C8/v2A8,0)*v2A8;
               }
            }
            //28D0
            v2B8=v2D0+v284*Point;
            if ( ((Bid+v26C*Point)<=v2B8) && !v54 )
            {
               OrderSend(Symbol(), OP_SELLLIMIT, v2C8, v2B8, 0,0,0,"Martin-Profit-Expert"+MAGIC,v274,0,255);
            }
            else
            {
               //2A30
               if ((Bid-v2D0)>=(v284*Point))
               {
                  OrderSend(Symbol(), OP_SELL, v2C8, Bid, 0,0,0,"Martin-Profit-Expert"+MAGIC,v274,0,255);               
               }               
            }
            //2B34
            v2D0=0;
            return (0);
         }
      }
   }
   
   //2B54
   if ((v264==2)&&v300)
   {
      if (v25C==0)
      {
         v2D0=0; v2C8=v2C0;
         
         if (v2C8<v2A0)
         {
            v2C8=v2A0;
         }
         else
         {
            if (v2C8>v298)
            {
               v2C8=v298;   
            }
            else
            {
               v2C8=NormalizeDouble(v2C8/v2A8,0)*v2A8;
            }
         }
         //2C30
         OrderSend(Symbol(), OP_BUY, v2C8, Ask, v254, 0,0,"Martin-Profit-Expert"+MAGIC,v270,0,16711680);
         return (0);
      }
      else
      {
         //2D0C
         if (!v304)
         {
            InitParam(v270+v25C);
            
            if (v2E0==0)
            {
               v2C8=v2E8;
            }
            else
            {
               v2C8=v2D8*v2E0;
            }
            //2D90
            if (v2C8<v2A0)
            {
               v2C8=v2A0;
            }
            else
            {
               if (v2C8>v298)
               {
                  v2C8=v298;
               }
               else
               {
                  v2C8=NormalizeDouble(v2C8/v2A8,0)*v2A8;               
               }            
            }
            //2E18
            v2B0=v2D0-v284*Point;
            if ((Ask-v26C*Point)>=v2B0 && !v54)
            {
               OrderSend(Symbol(), OP_BUYLIMIT, v2C8, v2B0, 0,0,0,"Martin-Profit-Expert"+MAGIC,v274,0,16711680);
               return (0);            
            }
            else
            {
               //2F78
               if ((v2D0-Ask)>=(v284*Point))
               {
                 OrderSend(Symbol(), OP_BUY, v2C8, Ask, 0,0,0,"Martin-Profit-Expert"+MAGIC,v274,0,16711680);  
               }               
            }
            v2D0=0;
            return (0);
         }
      }
   }

	return(0);
}

void InitParam(int v0)
{
   if (!v84)
   {
      v284=Pips;
      v2E8=Lots; v2E0=Doble;
      v278=TakeProfit1;
      v27C=InitialStop1;
      v280=TrailingStop1;
      v274=v270;
   }
   
   if (v0==v270)
   {
      v278=TakeProfit1;
      v2E8=Lots;
      v27C=InitialStop1;
      v280=TrailingStop1;
   }
   
   if (v0==(v270+1))
   {
      v284=vD8;
      v2E8=vDC;
      v2E0=vE4;
      v278=vEC;
      v27C=vF0;
      v280=vF4;
      v274=v270+1;
   }
   
   if (v0==(v270+2))
   {
      v284=v100;
      v2E8=v104;
      v2E0=v10C;
      v278=v114;
      v27C=v118;
      v280=v11C;
      v274=v270+2;
   }
   
   if (v0==(v270+3))
   {
      v284=v128;
      v2E8=v12C;
      v2E0=v134;
      v278=v13C;
      v27C=v140;
      v280=v144;
      v274=v270+3;
   }
   
   if (v0==(v270+4))
   {
      v284=v150;
      v2E8=v154;
      v2E0=v15C;
      v278=v164;
      v27C=v168;
      v280=v16C;
      v274=v270+4;
   }
   
   if (v0==(v270+5))
   {
      v284=v178;
      v2E8=v17C;
      v2E0=v184;
      v278=v18C;
      v27C=v190;
      v280=v194;
      v274=v270+5;
   }
   
   if (v0==(v270+6))
   {
      v284=v1A0;
      v2E8=v1A4;
      v2E0=v1AC;
      v278=v1B4;
      v27C=v1B8;
      v280=v1BC;
      v274=v270+6;
   }
   
   if (v0==(v270+7))
   {
      v284=v1C8;
      v2E8=v1CC;
      v2E0=v1D4;
      v278=v1DC;
      v27C=v1E0;
      v280=v1E4;
      v274=v270+7;
   }
   
   if (v0==(v270+8))
   {
      v284=v1F0;
      v2E8=v1F4;
      v2E0=v1FC;
      v278=v204;
      v27C=v208;
      v280=v20C;
      v274=v270+8;
   }
   
   v284=v218;
   v2E8=v21C;
   v2E0=v224;
   v278=v22C;
   v27C=v230;
   v280=v234;
   v274=v270+8;
}