//+------------------------------------------------------------------+
//|                                               WeeklyBreakout.mq4 |
//|                                            Copyright ?2007, Arui |
//|                                    http://www.ea-performance.com |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2007, Arui"
#property link      "http://www.ea-performance.com"
// This ea is based on SIBKIS's weekly breakout system


extern int    startTime = 0; // GMT time
extern int    startDay = 2;  // Tuesday
extern int    endTime = 19;  
extern int    endDay = 5;    //  Close all orders at the end of Friday


extern int    stopLoss = 100;
extern double lots = 0.1;
extern int    breakEven = 0;
extern int    magicNumber= 2007411;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
    
    if(DayOfWeek()==startDay && TimeCurrent() > StrToTime(startTime+":00")
      && TimeCurrent()< StrToTime(startTime+":10")
      )
    {
    
     if(currentOrders_By_Type(OP_BUYSTOP)==0)  // Send BuyStop order
     {
        
        
        double buyPrice  =  NormalizeDouble(Ask + 50*Point,Digits);
        double buyStopPrice =  NormalizeDouble(buyPrice - stopLoss*Point,Digits);
        
        
        OrderSend(Symbol(),OP_BUYSTOP,lots,buyPrice,3,buyStopPrice,0,"weekly breakout 1.0",magicNumber,0,Green);
        
        
        
        
     }
     if(currentOrders_By_Type(OP_SELLSTOP)==0) 
     {
       
        double sellPrice = NormalizeDouble(Bid - 50*Point,Digits);
        double sellStopPrice = NormalizeDouble(sellPrice + stopLoss*Point,Digits);
     
         OrderSend(Symbol(),OP_SELLSTOP,lots,sellPrice,3,sellStopPrice,0,"weekly breakout 1.0",magicNumber,0,Yellow);
     
     }
     
    
    }
    
    
    if(breakEven > 0)  moveToBreakeven();
    
    if(DayOfWeek()==endDay && TimeCurrent()>=StrToTime(endTime+":00")&& TimeCurrent()<=StrToTime(endTime+":10")) 
    {
    
     closeAll();
    
    }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

int currentOrders_By_Type(int type)
  {
   int cur_orders = 0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magicNumber && OrderType()==type)
        {
          cur_orders++;
        }
     }
    
    return(cur_orders);
}


void closeAll(){


    for(int i=0; i<OrdersTotal();i++)
    {
    
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicNumber)
     {
        
           
           
           if(OrderType()==OP_BUY)  
           {
            OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
           }
           else if(OrderType()==OP_SELL) 
           { 
            OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
           }
           else
           {
            OrderDelete(OrderTicket());
           }    
           
     }
    
   }//end for

}// end closeAll

void moveToBreakeven()
{
   for (int i=0;i<OrdersTotal();i++)
   { 
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  
      if ( OrderSymbol()==Symbol() && OrderMagicNumber()==magicNumber) 
      {
         if (OrderType()==OP_BUY) 
         {
		
			 if ( breakEven > 0 && Bid-OrderOpenPrice()> breakEven*Point && OrderOpenPrice()!= OrderStopLoss() )    
			 {
			    OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Orange);
			 }
         
         }//end buy   

         if (OrderType()==OP_SELL)
         {
          if ( breakEven > 0 && OrderOpenPrice()-Ask>breakEven*Point && OrderOpenPrice()!= OrderStopLoss())  
          {
              OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Orange);
          } 
            
         }//end sell
      }
   
   
   }//end for     



}// end trailing