//+------------------------------------------------------------------+
//|                                        Quantum London Trading EA |
//|                                      Copyright 2012, CompanyName |
//|              http://www.forexfactory.com/showthread.php?t=551382 |
//+------------------------------------------------------------------+ 
#property strict
#property link "http://www.forexfactory.com/showthread.php?t=551382"
input int mn=2015; //Magic Number
input string ffopen="07:00"; // Broker Start Time
input string closetrades="22:00"; // Broker Time to Close Trades
input int tf = 1;//Time Frame (minutes)
input int qd=325;//Quantum eintDepth3
input string l="-----------"; // Set up lots for trades
input double T1=0.01; //Trades 1-12
input double T2=0.02; //Trades 13-21
input double T3=0.05; //Trades 22-29
input double T4=0.13; //Trades 30-36
input double T5=0.34; //Trades 37-39
input double T6=0.89; //Trade 40 & >

double lots;
datetime curtime,prevtime,curday,prevday;
bool donefortheday;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {

   curday=iTime(Symbol(),PERIOD_D1,0);
   if(curday>prevday)
     {
      prevday=iTime(Symbol(),PERIOD_D1,0);
      donefortheday=false;
     }

   if(iTime(Symbol(),1,0)>=StrToTime(closetrades))
     {
      for(int d=OrdersTotal()-1;d>=0;d--)
        {
         if(!OrderSelect(d,SELECT_BY_POS,MODE_TRADES))
            continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
           {
            donefortheday=true;
            if(OrderType()==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,0,0))
                  Print("OrderClose Error: ",GetLastError());
              }
            if(OrderType()==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,0,0))
                  Print("OrderClose Error: ",GetLastError());
              }
           }
        }
     }

   bool closeonsell,closeonbuy;
   for(int a=OrdersTotal()-1;a>=0;a--)
     {
      if(!OrderSelect(a,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
        {
         if(OrderType()==OP_BUY)
           {
            closeonsell=true;
            break;
           }
         if(OrderType()==OP_SELL)
           {
            closeonbuy=true;
            break;
           }
        }
     }

   if(iTime(Symbol(),1,0)>StrToTime(ffopen)+3600 && closeonsell==true)
     {
      if(iCustom(Symbol(),tf,"Quantum",qd,1,1)>0)
        {
         for(int b=OrdersTotal()-1;b>=0;b--)
           {
            if(!OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
               continue;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn && OrderType()==OP_BUY)
              {
               donefortheday=true;
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,0,0))
                  Print("OrderClose Error: ",GetLastError());
              }
           }
        }
     }

   if(iTime(Symbol(),1,0)>StrToTime(ffopen)+3600 && closeonbuy==true)
     {
      if(iCustom(Symbol(),tf,"Quantum",qd,0,1)>0)
        {
         for(int c=OrdersTotal()-1;c>=0;c--)
           {
            if(!OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
               continue;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn && OrderType()==OP_SELL)
              {
               donefortheday=true;
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,0,0))
                  Print("OrderClose Error: ",GetLastError());
              }
           }

        }

     }

//Open trades after FF Open
   curtime=iTime(Symbol(),tf,0);
   if(iTime(Symbol(),1,0)>=StrToTime(ffopen) && curtime>prevtime && donefortheday==false)
     {
      if(iCustom(Symbol(),tf,"Quantum",qd,0,1)>0)
        {
         lots=GetLots();
         prevtime=iTime(Symbol(),tf,0);
         if(!OrderSend(Symbol(),OP_BUY,lots,Ask,0,0,0,NULL,2015,0,0))
            Print("OrderSend Error: ",GetLastError());
        }
      if(iCustom(Symbol(),tf,"Quantum",qd,1,1)>0)
        {
         lots=GetLots();
         prevtime=iTime(Symbol(),tf,0);
         if(!OrderSend(Symbol(),OP_SELL,lots,Bid,0,0,0,NULL,2015,0,0))
            Print("OrderSend Error: ",GetLastError());
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetLots()
  {
   int numtrades;
   double retlots;
   for(int c=OrdersTotal()-1;c>=0;c--)
     {
      if(!OrderSelect(c,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn)
        {
         numtrades+=1;
        }
     }

   if(numtrades>=0 && numtrades<12)
      retlots=T1;
   if(numtrades>=12 && numtrades<21)
      retlots=T2;
   if(numtrades>=21 && numtrades<29)
      retlots=T3;
   if(numtrades>=29 && numtrades<36)
      retlots=T4;
   if(numtrades>=36 && numtrades<39)
      retlots=T5;
   if(numtrades>=39)
      retlots=T6;

   if(retlots<0.01)
      retlots=0.01;

   return(retlots);
  }
//+------------------------------------------------------------------+
