//|                                                    GRDEAEUDO.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
extern int Interval= 15;
extern int NumStepGr= 7;
extern int Profit= 10500;
double MaxEqu=10100;
double MiddlDD=9750;
double MaxDD=9500;
extern double Lot= 0.1;
//
extern int NumStepV= 5;
extern double LotV= 0.5;
extern int IntervalV= 5;
extern double TPV= 8;
extern double SLV= 75;
int Vcounter = 1;
//
extern double SL= 150;
extern double TP= 25;
string CommOrder="mygrid";
extern int Magic= 222;
bool exitcontrgrid=false;
bool exitcontrV=false;
extern double Time_Opn=8;
extern double Time_Cls=17;
double StartBalance; 
int init()
  {
StartBalance=AccountBalance();   
return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void place_grid_upside()
 {
  for (int Cnt=1;Cnt<=NumStepGr;Cnt++)
      { 
       OrderSend(Symbol(), OP_BUYSTOP, Lot, Ask+(Cnt*Interval*point()), 0, Ask+(Cnt*Interval*point())-SL*point() ,Ask+(Cnt*Interval*point())+TP*point(), CommOrder, Magic, 0, Blue);
       OrderSend(Symbol(), OP_SELLLIMIT, Lot, Bid+(Cnt*Interval*point()), 0, Bid+(Cnt*Interval*point())+SL*point() ,Bid+(Cnt*Interval*point())-TP*point(), CommOrder, Magic+1, 0, Red);
       exitcontrgrid=true;
       } 
  }
//////////  
void place_grid_downside()
 {
  for (int Cnt=1;Cnt<=NumStepGr;Cnt++)
      { 
       OrderSend(Symbol(), OP_BUYLIMIT, Lot, Ask-(Cnt*Interval*point()), 0, Ask-(Cnt*Interval*point())-SL*point() ,Ask-(Cnt*Interval*point())+TP*point(), CommOrder, Magic, 0, Blue);
       OrderSend(Symbol(), OP_SELLSTOP, Lot, Bid-(Cnt*Interval*point()), 0, Bid-(Cnt*Interval*point())+SL*point() ,Bid-(Cnt*Interval*point())-TP*point(), CommOrder, Magic+1, 0, Red);
       exitcontrgrid=true;
       } 
  }
////////
double point()
  {
   double mypoint;
   if(Digits<4) mypoint=0.01;
   else         mypoint=0.0001;
   return(mypoint);
  }
/////
void place_V_buy_leg()
 {
  for (int Cnt=1;Cnt<=NumStepV;Cnt++)
      { 
       OrderSend(Symbol(), OP_BUYSTOP, (LotV*Cnt), Ask+(Cnt*IntervalV*point()), 0, Ask+(Cnt*IntervalV*point())-SLV*point() ,Ask+(Cnt*IntervalV*point())+TPV*point(), CommOrder, Magic, 0, Blue);
       exitcontrV=true;
       } 
  }
//////////  
void place_V_sell_leg()
 {
  for (int Cnt=1;Cnt<=NumStepV;Cnt++)
      { 
       OrderSend(Symbol(), OP_SELLSTOP, (LotV*Cnt), Bid-(Cnt*IntervalV*point()), 0, Bid-(Cnt*IntervalV*point())+SLV*point() ,Bid-(Cnt*IntervalV*point())-TPV*point(), CommOrder, Magic+1, 0, Red);
       } 
  }
///////////////////////
void CloseAll()
{
   bool   Result;
   int    i,Pos,Error;
   int    Total=OrdersTotal();
   RefreshRates();
   if(Total>0)
   {
     for(i=Total-1; i>=0; i--) 
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE) 
       { 
         double InfASK=MarketInfo(OrderSymbol(),MODE_ASK);
         double InfBID=MarketInfo(OrderSymbol(),MODE_BID);
         double InfPoint=MarketInfo(OrderSymbol(),MODE_POINT);
         int Slippage=((InfASK-InfBID)/InfPoint)+1;
         Pos=OrderType();
         if(Pos==OP_BUY)
         {Result=OrderClose(OrderTicket(), OrderLots(), InfBID, Slippage, CLR_NONE);}
         if(Pos==OP_SELL)
         {Result=OrderClose(OrderTicket(), OrderLots(), InfASK, Slippage, CLR_NONE);}
         if((Pos==OP_BUYSTOP)||(Pos==OP_SELLSTOP)||(Pos==OP_BUYLIMIT)||(Pos==OP_SELLLIMIT))
         {Result=OrderDelete(OrderTicket(), CLR_NONE);}
//---------------------------------------------
              if(Result!=true) 
               { 
                 Error=GetLastError(); 
                 Print(" dormimos  2,5 seundos por error = ",Error); 
                 Sleep (2500);
               }
               else Error=0;
//---------------------------------------------
       }   
     }
   }
}

int start()
{
   if(OrdersTotal()==0)
   {
      int Cur_Hour=Hour();
      if (Cur_Hour>=Time_Opn)    
      {
       if (exitcontrgrid==false)
       {
        place_grid_upside();
        place_grid_downside();
//        return;
       }
      }
    }  
    
      int Cur_HourV=Hour();
      if (Cur_HourV>=Time_Opn)  
        {
         if (exitcontrV==false)
          {
             place_V_buy_leg();
             place_V_sell_leg();
             Vcounter ++;
          }
        }
//     return(0);
// }
//
if( AccountEquity() > Profit)
 {
  CloseAll();
// return(0);
}
//
if( AccountEquity() < MaxDD)
 {
  CloseAll();
// return(0);
}
//if (Cur_Hour>=Time_Cls) 
//{
//   CloseAll();
//   return(0);
//}

//----
 
  }
//+--------------