
//EUR/USD   5digits

#define EAName "Anthony_M"

extern double Lots=0.1;
extern double MinLots=0;
extern double MaxLots=1;


extern int TimeToTrade=18; 
extern int AndMinutes=0;
extern int PendingOrdersTime=49200; //time in milliseconds before deleting pending orders.(3hours=3x60x60=10800),(4hours=4x60x60=14400).

extern int sellorder=400;   //selllimit pips over the line at timetotrade
extern int buyorder=400;    //buylimit pips under the line at timetotrade
extern int profit=400;          
extern int loss=550;
extern int TrailingStop=0;
extern int TrailingStep=0;

extern int MaxOrders=1;
extern int Slippage=3;
extern int Magic=2010;

datetime PreviousBar1;
datetime PreviousBar2;


//initialize
int start()
{
 if(OrderOpenTime()<=TimeCurrent()-PendingOrdersTime) //time to delete pending orders/
 if (OrderType()==OP_BUYLIMIT || (OrderType()==OP_SELLLIMIT))
 OrderDelete(OrderTicket());
//trailing stop

   if(TrailingStop>0)MoveTrailingStop();


   


//signal conditions

   int limit=1;
   for(int i=1;i<=limit;i++)
   {
   
   //main signal
   RefreshRates();

double down = Open[0]-buyorder*Point;
   double up = Open[0]+sellorder*Point;

 double hourtime=Hour();
double minutetime=Minute();
      string BUY="false";
      string SELL="false";

      if( hourtime==TimeToTrade && minutetime==AndMinutes )  BUY="true"; 
      if( hourtime==TimeToTrade && minutetime==AndMinutes ) SELL="true";
      
      string SignalBUY="false";
      string SignalSELL="false";
      
      if(BUY=="true") SignalBUY="true";
      if(SELL=="true")SignalSELL="true";
            
   }
//open orders
   double SL,TP,ILots;
   int Ticket;
   SL=0;TP=0;ILots=Lots;
     
   if((CountOrders(OP_BUY,Magic)+CountOrders(OP_SELL,Magic))<MaxOrders) 
   {  
      if(SignalBUY=="true"&&NewBarB())
      {         
        
         
         Ticket=OrderSend(Symbol(),OP_BUYLIMIT,ILots,down,Slippage,SL,TP,EAName,Magic,0,Blue); 
                        
      }

   
      if(SignalSELL=="true"&&NewBarS())
      {                
         
         
         Ticket=OrderSend(Symbol(),OP_SELLLIMIT,ILots,up,Slippage,SL,TP,EAName,Magic,0,Red);
                 
      }
   }
CloseBuyOrders(Magic);
CloseSellOrders(Magic);
  
//no more money warning
   int err=0;
   if(Ticket<0)
   {
      if(GetLastError()==134)
      {
         err=1;
         Print("no more money");
      }
      return (-1);
   }
   return(0);
}

//close buy orders

int CloseBuyOrders(int Magic)
{      


   
  int total=OrdersTotal();

  for (int cnt=total-1;cnt>=0;cnt--)
  {
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_BUY)
       
      { if ( Ask<(OrderOpenPrice()-loss*Point)||  Bid>(OrderOpenPrice()+profit*Point)) 
        OrderClose(OrderTicket(),OrderLots(),Bid,3);   break;
      }
    }
  }
  return(0);
}
//close sell orders
int CloseSellOrders(int Magic)
{   
   
  int total=OrdersTotal();
  for(int cnt=total-1;cnt>=0;cnt--)
  { 
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol())
    {
      if(OrderType()==OP_SELL)
       
      {if (   Bid>(OrderOpenPrice()+loss*Point) || Ask<(OrderOpenPrice()-profit*Point)) 
        OrderClose(OrderTicket(),OrderLots(),Ask,3); break;
      }
    }
  }
  return(0);
}
//count orders
int CountOrders(int Type,int Magic)
{
   int _CountOrd;
   _CountOrd=0;
   for(int i=0;i<OrdersTotal();i++)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol())
      {
         if((OrderType()==Type&&(OrderMagicNumber()==Magic)||Magic==0))_CountOrd++;
      }
   }
   return(_CountOrd);
}
//trailing stop
void MoveTrailingStop()
{
   int cnt,total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
      {
         if(OrderType()==OP_BUY)
         {
            if(TrailingStop>0&&Ask>NormalizeDouble(OrderOpenPrice(),Digits))  
            {                 
               if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*(TrailingStop+TrailingStep),Digits))||(OrderStopLoss()==0))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue);
                  return(0);
               }
            }
         }
         else 
         {
            if(TrailingStop>0&&Bid<NormalizeDouble(OrderOpenPrice(),Digits))  
            {                 
               if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*(TrailingStop+TrailingStep),Digits)))||(OrderStopLoss()==0))
               {
                  OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                  return(0);
               }
            }
         }
      }
   }
}
//breakeven

//allow one trade/bar

bool NewBarB()
{
   if(PreviousBar1<Time[0])
   {
      PreviousBar1=Time[0];
      return(true);
   }
   return(false);
}

bool NewBarS()
{
   if(PreviousBar2<Time[0])
   {
      PreviousBar2=Time[0];
      return(true);
   }
   return(false);
}



