#property version   "1.00"
#property strict
extern int nLimitOrders = 5;
extern int MAPeriod = 20;
extern double Lot = 0.01;
extern double StopLoss = 300;
extern double TakeProfitA = 300;
extern double TakeProfitB = 400;
extern double TakeProfitC = 500;
extern double TakeProfitD = 600;
extern double TakeProfitE = 700;
extern int EXP = 10;
double Sl,Tp;
bool Send,Select,Modify;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  int X = GetLastError();
Comment(
"\nSpred = ", NormalizeDouble((Ask-Bid)/Point(),0),
"\nError = ",X);
if (OrdersTotal()>0)
   {
   for(int i=0;i<OrdersTotal();i++)
      {
      Select = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderType()==OP_BUYLIMIT && OrderOpenPrice()<NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits))
      {
         if (OrderMagicNumber()==1)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitA*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==2)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitB*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==3)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitC*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==4)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitD*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==5)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitE*Point(),Digits),0,clrNONE);
         }
      }
      if (OrderType()==OP_SELLLIMIT && OrderOpenPrice()>NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits))
      {
         if (OrderMagicNumber()==1)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitA*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==2)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitB*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==3)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitC*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==4)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitD*Point(),Digits),0,clrNONE);
         }
         if (OrderMagicNumber()==5)
         {
         Modify = OrderModify(OrderTicket(),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitE*Point(),Digits),0,clrNONE);
         }
      }
      }
   }

if (OrdersTotal()==0)
{
   if (Bid>iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0))
   {
   if(nLimitOrders>=1)Send = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitA*Point(),Digits),NULL,1,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=2)Send = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitB*Point(),Digits),NULL,2,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=3)Send = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitC*Point(),Digits),NULL,3,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=4)Send = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitD*Point(),Digits),NULL,4,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=5)Send = OrderSend(Symbol(),OP_BUYLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+TakeProfitE*Point(),Digits),NULL,5,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   }
   
   if (Bid<iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,0))
   {
   if(nLimitOrders>=1)Send = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitA*Point(),Digits),NULL,1,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=2)Send = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitB*Point(),Digits),NULL,2,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=3)Send = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitC*Point(),Digits),NULL,3,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=4)Send = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitD*Point(),Digits),NULL,4,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   if(nLimitOrders>=5)Send = OrderSend(Symbol(),OP_SELLLIMIT,Lot,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1),Digits),10,NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)+StopLoss*Point(),Digits),NormalizeDouble(iMA(Symbol(),0,MAPeriod,0,MODE_SMA,PRICE_CLOSE,1)-TakeProfitE*Point(),Digits),NULL,5,TimeCurrent()+EXP*PeriodSeconds(),clrNONE);
   }
}

if (OrdersTotal() < nLimitOrders)
{
for(int i=0;i<OrdersTotal();i++)
{
Select = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
Modify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
}
}
  }
//+------------------------------------------------------------------+
