qq_v2.2





// Because of my dismal stupidity not even named this EA 
#property copyright "RamilT" 
#property link "RamilT@bk.ru" 


//-----------------------------------Òèïà ïåðåìåííûå----------------------------------------------------------- 
extern int Magic = 1111;
extern int pr=11; 
extern int sl=35; 
extern int tp=75; 
extern int tz=60; 
extern int mm=1; 
extern int qq=10; 
extern int chas1=5; 
extern int chas2=17; 
extern double Lots=0.1;
extern double TrailingStop = 0;

double BuyStop=0, PrevBuyStop=0, SellStop=0, PrevSellStop=0;
double Slippage =3, TakeProfit=0, StopLoss =0; 
//------------------------------------------------------------------------------------------------------------- 


int start() 
{ 
   if(Hour()<=chas1||Hour()>=chas2)return(0); 
   if(Bars<100) 
   { 
   Print("bars less than 100"); 
   return(0); 
   } 
//-----------------------------------Ìîíýé ìåíäæìåíò----------------------------------------------------------- 
   //Print("Takeprofit=",GlobalVariableGet("takeprofit"), " Stoploss=",GlobalVariableGet("stoploss"));
   if (ScanTrades()>0 ) HideTrailStop();
   
   if (mm==1) 
   { 
   if(Lots<(MathCeil((AccountFreeMargin()/1000)*qq)/10)){Lots=(MathCeil((AccountFreeMargin()/10000)*qq)/10);if(Lots>100){Lots=100;}} 
   } 
//------------------------------------------------------------------------------------------------------------- 


//----------------------------------Ãëàâíûé àëãîðèòì----------------------------------------------------------- 
   if(Month()!=12 && DayOfWeek()!=1 && ScanTrades()<1)
   { 
      if (((iOpen(NULL,5,1)-iClose(NULL,5,pr))>(Point*tz))&&(Ask>iOpen(NULL,5,1))) 
      { 
      if( tp>0 ) TakeProfit = NormalizeDouble(Ask+tp*Point,Digits); else TakeProfit = 0;
      if( sl>0 ) StopLoss =  NormalizeDouble(Ask-sl*Point,Digits);  else StopLoss = 0;
      GlobalVariableSet("takeprofit",TakeProfit);
      GlobalVariableSet("stoploss",StopLoss);
      
      OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"qq-buy60",Magic,0,Blue); 
      } 


      if (((iOpen(NULL,5,1)-iClose(NULL,5,pr))<(-Point*tz))&&(Bid<iOpen(NULL,5,1))) 
      { 
      if( tp>0 ) TakeProfit = NormalizeDouble(Bid-tp*Point,Digits); else TakeProfit = 0;
      if( sl>0 ) StopLoss =  NormalizeDouble(Bid+sl*Point,Digits);  else StopLoss = 0;
      GlobalVariableSet("takeprofit",TakeProfit);
      GlobalVariableSet("stoploss",StopLoss);
      
      OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"qq-sell60",Magic,0,Red); 
      } 
   } 
return(0);
} 
//------------------------------------------------------------------------------------------------------------- 


 

int ScanTrades()
{   
   int total = OrdersTotal();
   int numords = 0;
      
   for(int cnt=0; cnt<total; cnt++) 
   {        
   OrderSelect(cnt, SELECT_BY_POS);            
   if(OrderSymbol() == Symbol() && OrderType()<=OP_SELLSTOP && OrderMagicNumber() == Magic) 
   numords++;
   }
   return(numords);
}  


void HideTrailStop()
{
   for (int cnt=0;cnt<OrdersTotal();cnt++)
   { 
   OrderSelect(cnt, SELECT_BY_POS);   
   int mode=OrderType();    
      if ( OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) 
      {
      TakeProfit = GlobalVariableGet("takeprofit");    
              
         if (mode==OP_BUY) 
         {
			   if ( TrailingStop > 0 )
			   {
			   
			   BuyStop = NormalizeDouble(Bid - TrailingStop*Point,Digits);
			     
			      if( OrderOpenPrice() > BuyStop ) BuyStop = GlobalVariableGet("stoploss");
			      else
			      {
			      PrevBuyStop = GlobalVariableGet("stoploss");
			      
			      if (BuyStop <= PrevBuyStop ) BuyStop = PrevBuyStop;
			      else GlobalVariableSet("stoploss",BuyStop); 
			      }
			   
			      if ( Bid <= BuyStop || (Bid >= TakeProfit && TakeProfit>0))
			      {
			      Print("BUY: TP = ",TakeProfit," BuyStop=", BuyStop," PrevStop=",PrevBuyStop);
			      OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
			      return(0);
			      }
            }
            else
            {
            StopLoss   = GlobalVariableGet("stoploss");   
               if ( (Bid >= TakeProfit && TakeProfit>0) || Bid <= StopLoss)
			      {
			     
			      OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);
			      return(0);
			      }
			   }      
         }   
// - SELL Orders          
         if (mode==OP_SELL)
         {
            //Print("SEll: TP = ",TakeProfit," SL=", StopLoss," Ask=", Ask);
            
            if ( TrailingStop >0 )
			   {
            
            SellStop = NormalizeDouble(Ask + Point * TrailingStop,Digits);   
               
               if( OrderOpenPrice() < SellStop ) SellStop = GlobalVariableGet("stoploss");
			      else
			      {
			      PrevSellStop = GlobalVariableGet("stoploss");
			      if (SellStop >= PrevSellStop ) SellStop = PrevSellStop;
			      else GlobalVariableSet("stoploss",SellStop); 
			      }
               
               if ( (Ask >= SellStop && SellStop > 0) || Ask <= TakeProfit )
               {
               Print("SELL: TP = ",TakeProfit," SellStop=", SellStop," PrevStop=",PrevSellStop);
               OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
               return(0);
               }
   			}
            else
            {
            StopLoss   = GlobalVariableGet("stoploss");  
               if ( Ask <= TakeProfit || ( Ask >= StopLoss && StopLoss > 0))
               {
               //Print("SEll: TP = ",TakeProfit," SL=", StopLoss);
               OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
               return(0);
               }
            }   
         }
      }     
   }   
}



Sample





Analysis



Market Information Used:

Series array that contains open prices of each bar
Series array that contains close prices for each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached
Checks for the total of open orders
It Closes Orders by itself

Other Features: