//V3.0

extern double  Lots          = 0.1;
extern int     StopLoss      = 60;
extern int     ForcePeriod   = 7;
extern int     ForceLevel    = 5;
extern int     ForceFilter   = 6;
extern int     SMA_Period    = 5;
extern int     Slippage      = 2;
extern int     MaxSpread     = 1;
extern int     MagicNumber   = 1618;

//--- Global scope
//+------------------------------------------------------------------+
static int prevtime=0; double xecn=1; string symbol;
//+------------------------------------------------------------------+

int start()
   {
//+------------------------------------------------------------------+
   xecn=1; if(Digits==5||Digits==3){xecn=10;}
   if((Ask-Bid)>MaxSpread*Point*xecn)return(0);
//+------------------------------------------------------------------+
   double Buy  = iForce(NULL,0,ForcePeriod,MODE_SMA,PRICE_OPEN,1)>ForceLevel;
   double Sell = iForce(NULL,0,ForcePeriod,MODE_SMA,PRICE_OPEN,1)<-ForceLevel;

   double SMA  = iMA(NULL,0,SMA_Period,0,MODE_SMA,PRICE_CLOSE,0);

   double FORFILTER = iForce(NULL,0,ForceFilter,MODE_SMA,PRICE_OPEN,1);

   double ForBuy  = (Buy && Close[0]>SMA && Open[0]>FORFILTER);
   double ForSell = (Sell && Close[0]<SMA && Open[0]<FORFILTER);
//+------------------------------------------------------------------+

   if(Time[0] == prevtime)
       return(0);
   prevtime = Time[0];
   int spread = 3;
//----
   if(IsTradeAllowed())
     {
       RefreshRates();
       spread = MarketInfo(Symbol(), MODE_SPREAD);
     }
   else
     {
       prevtime = Time[1];
       return(0);
     }
   int ticket = -1;

   int total = OrdersTotal();
//----
   for(int i = 0; i < total; i++)

     {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)); else;

       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
           int prevticket = OrderTicket();

           if(OrderType() == OP_BUY)
             {
                {
                    {
                       if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - StopLoss * Point * xecn, 0, 0, Blue))
                         {
                           Sleep(30000);
                           prevtime = Time[1];
                         }
                     }
                 }
             }
           else
             {
                {
                    {
                       if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + StopLoss * Point * xecn, 0, 0, Blue))
                         {
                           Sleep(30000);
                           prevtime = Time[1];
                         }
                     }
                 }
             }
           return(0);
         }
     }

    if(ForBuy)
     {
       ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage * xecn, Bid - StopLoss * Point * xecn, 0, "Slash", MagicNumber, 0, Blue);

       if(ticket < 0)
         {
           Sleep(30000);
           prevtime = Time[1];
         }
     }

    if(ForSell)
     {
       ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage * xecn, Ask + StopLoss * Point * xecn, 0, "Slash", MagicNumber, 0, Red);

       if(ticket < 0)
         {
           Sleep(30000);
           prevtime = Time[1];
         }
     }
   return(0);
  }