Dealers Trade v 7.89 ZeroLag MACD





//+------------------------------------------------------------------+
//|    Ðåêîìåíäóåòñÿ äëÿ 4H 1D                 dealers 7.49 MACD.mq4 |
//|                                         Copyright © 2006, Alex_N |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Alex_N"
#property link "asd-01@bk.ru"

extern int    MAGIC=12457814;
extern double TakeProfit = 30;         // Óðîâåíü òåéê ïðîôèòà â ïóíêòàõ 
extern double Lots = 0.1;              // Êîëëè÷åñòâî ëîòîâ íà÷àëüíîå
extern double InitialStop = 90;        // Óðîâåíü óñòàíîâêè ñòîï îðäåðà
extern double TrailingStop = 15;       // Óðîâåíü òðåéëèíã ñòîïà

extern int MaxTrades=5;                // Ìàêñèìàëüíîå êîëëè÷åñòâî îðäåðîâ
extern int Pips=4;                     // Èíòåðâàë ìåæäó îðäåðàìè
extern int SecureProfit=50;            // Ïî çàìûñëó ñîçäàòåëåé ýòî çàùèùàåìûé ïðîôèò â áàêñàõ,
                                       // ò.å. êîãäà ñóììàðíûé ïðîôèò ïî âñåì îðäåðàì äîñòèãàåò 
                                       // SecureProfit áàêñîâ, òî îäèí ïîñëåäíèé îðäåð çàêðûâàåòñÿ.
extern int AccountProtection=1;        // Âîò åñëè ýòîò ïàðàìåòð 1, òî îðäåð è çàêðûâàåòñÿ 
                                       // ïðè äîñòèæåíèè ïðîôèòà ñóììàðíîãî. À åñëè íåò, òî íåò.
extern int OrderstoProtect=3;          // à ýòî êîëè÷åñòâî ÿêîáû íåçàêðûâàåìûõ îðäåðîâ, íî
                                       // èç-çà îøèáîê â ïðîãðàììå òàì òàê ñäåëàíî. Îðäåðà çàêðûâàþòñÿ åñëè:
                                       // OpenOrders>=(MaxTrades-OrderstoProtect)
                                       // OpenOrders - êîëè÷åñòâî îòêðûòûõ íà äàííûé ìîìåíò îðäåðîâ âñåãî.
                                       // MaxTrades - çàäàíî âûøå, ïóñòü 5.
                                       // OrderstoProtect - ïóñòü 3.
                                       // Òàêèì îáðàçîì îðäåðà íà÷èíàþò çàêðûâàòüñÿ åñëè èõ áîëüøå èëè ðàâíî 2.
extern int ReverseCondition=0;         // Ýòî òàêàÿ ôè÷à, ïðè èçìåíåíèè êîòîðîé íà 1 îðäåðà íà÷íóò 
                                       // îòêðûâàòüñÿ ïðîòèâ ïðàâèë. Ò.å. ïðè 0 îðäåðà îòêðûâàþòñÿ ïî ïðàâèëàì,
                                       // à ïðè 1 â îáðàòíóþ ñòîðîíó. Òàê èíîãäà äåëàþò ïðîãðàììåðû íå óâåðåííûå 
                                       // â ñâîèõ ïðîãðàììàõ. Òèïà ðàç ñëèâàåò ñîâåòíèê, äàâàé ðàçâåðí¸ì åãî
                                       // è ïóñòü ïðîäà¸ò êîãäà íóæíî ïîêóïàòü è íàîáîðîò.
extern int FastEMA=14;    // Ïåðâûé ïàðàìåòð èíäèêàòîðà MACD
extern int SlowEMA=26;    // Âòîðîé ïàðàìåòð èíäèêàòîðà MACD
extern int SignalEMA = 9;
extern int mm=0;                       // Ñïîñîá óïðàâëåíèÿ ìàíè ìåíåäæìåíò ÌÌ=0 òîðãîâëÿ âèêñèðîâàííûì ëîòîì ÌÌ=1 ðàñ÷åò ïî ðèñêó
extern int slippage=2;                 // Ïðîñêàëüçûâàíèå
extern int risk=2;                     // Ðèñê ïðè ÌÌ=1
extern int MaxLots=5;                  // Ìàêñèìàëüíî âîçìîæíîå êîëëè÷êñòâî ëîòîâ â ïîçèöèè
extern int AccountisNormal=0;          // 0- ó áðîêåðà ðàçðåøåíû äðîáíûå ëîòû. 1-çàïðåùåíû.
extern double Doble=1.5;               // Ìíîæèòåëü ïîçèöèé êàæäàÿ ñëåäóþùÿÿ ïîçèöèÿ óìíîæàåòñÿ íà Doble
extern double USDCHFPipValue=10.5;     // Öåíà ïóíêòà ñèìâîëà
extern double USDCADPipValue=10.4;     // Öåíà ïóíêòà ñèìâîëà
extern double USDJPYPipValue=9.2;      // Öåíà ïóíêòà ñèìâîëà
extern double EURJPYPipValue=9.8;      // Öåíà ïóíêòà ñèìâîëà
extern double EURUSDPipValue=10.3;     // Öåíà ïóíêòà ñèìâîëà
extern double GBPUSDPipValue=10;       // Öåíà ïóíêòà ñèìâîëà
extern double AUDUSDPipValue=9.9;      // Öåíà ïóíêòà ñèìâîëà
extern double NZDUSDPipValue=8.9;      // Öåíà ïóíêòà ñèìâîëà 

int  OpenOrders=0, cnt=0;
double sl=0, tp=0;
double BuyPrice=0, SellPrice=0;
double lotsi=0, mylotsi=0;
int mode=0, myOrderType=0;
bool ContinueOpening=True;
double LastPrice=0;
int  PreviousOpenOrders=0;
double Profit=0;
int LastTicket=0, LastType=0;
double LastClosePrice=0, LastLots=0;
double Pivot=0;
double PipValue=0;
string text="", text2="";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   if (AccountisNormal==1)
   {
	  if (mm!=0) { lotsi=MathCeil(AccountBalance()*risk/10000); }
		else { lotsi=Lots; }
   } else {  // then is mini
    if (mm!=0) { lotsi=MathCeil(AccountBalance()*risk/10000)/10; }
		else { lotsi=Lots; }
   }

   if (lotsi>MaxLots){ lotsi=MaxLots; }
   
   OpenOrders=0;
   for(cnt=0;cnt<OrdersTotal();cnt++)   
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	  if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
	  {				
	  	  OpenOrders++;
	  }
   }     
   
   if (OpenOrders<1) 
   if (Symbol()=="USDCHF") { PipValue=USDCHFPipValue; }
   if (Symbol()=="USDCAD") { PipValue=USDCADPipValue; }
   if (Symbol()=="USDJPY") { PipValue=USDJPYPipValue; }
   if (Symbol()=="EURJPY") { PipValue=EURJPYPipValue; }
   if (Symbol()=="EURUSD") { PipValue=EURUSDPipValue; }
   if (Symbol()=="GBPUSD") { PipValue=GBPUSDPipValue; }
   if (Symbol()=="AUDUSD") { PipValue=AUDUSDPipValue; }
   if (Symbol()=="NZDUSD") { PipValue=NZDUSDPipValue; }
   if (PipValue==0) { PipValue=5; }
   
   if (PreviousOpenOrders>OpenOrders) 
   {	  
	  for(cnt=OrdersTotal();cnt>=0;cnt--)
	  {
	     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
		  if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) 
		  {
	  	   mode=OrderType();
			if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); }
			if (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red); }
			return(0);
		 }
	  }
   }

   PreviousOpenOrders=OpenOrders;
   if (OpenOrders>=MaxTrades) 
   {
	  ContinueOpening=False;
   } else {
	  ContinueOpening=True;
   }

   if (LastPrice==0) 
   {
	  for(cnt=0;cnt<OrdersTotal();cnt++)
	  {	
	    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
		 if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) 
		 {
		   mode=OrderType();	
			LastPrice=OrderOpenPrice();
			if (mode==OP_BUY) { myOrderType=2; }
			if (mode==OP_SELL) { myOrderType=1;	}
		 }
	  }
   }

   if (OpenOrders<1) 
   {
	  myOrderType=3;
	  if(iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,0,0)
	  >iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,0,1)) myOrderType=2;
	  if(iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,0,0)
	  <iCustom(NULL,0,"ZeroLag MACD",FastEMA,SlowEMA,SignalEMA,0,1)) myOrderType=1;
/*	  if (iMACD(NULL,0,FastEMA,SlowEMA,1,PRICE_CLOSE,MODE_MAIN,0)>iMACD
	  (NULL,0,FastEMA,SlowEMA,1,PRICE_CLOSE,MODE_MAIN,1)) { myOrderType=2; }
	  if (iMACD(NULL,0,FastEMA,SlowEMA,1,PRICE_CLOSE,MODE_MAIN,0)
	  <iMACD(NULL,0,FastEMA,SlowEMA,1,PRICE_CLOSE,MODE_MAIN,1)) { myOrderType=1; }*/
	  if (ReverseCondition==1)
	  {
	  	  if (myOrderType==1) { myOrderType=2; }
		  else { if (myOrderType==2) { myOrderType=1; } }
	  }
   }

   // if we have opened positions we take care of them
   for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	  if (OrderSymbol() == Symbol() && OrderMagicNumber()==MAGIC) 
	  {
	  	  if (OrderType()==OP_SELL) 
	  	  {
	  	  	  if (TrailingStop>0) 
			  {
				  if (OrderOpenPrice()-Ask>=(TrailingStop+Pips)*Point) 
				  {
					 if (OrderStopLoss()>(Ask+Point*TrailingStop))
					 {
					    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
					    OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,800,Purple);
	  					 return(0);	  					
	  				 }
	  			  }
			  }
	  	  }
   
	  	  if (OrderType()==OP_BUY)
	  	  {
	  		 if (TrailingStop>0) 
	  		 {
			   if (Bid-OrderOpenPrice()>=(TrailingStop+Pips)*Point) 
				{
					if (OrderStopLoss()<(Bid-Point*TrailingStop)) 
					{
					   OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
					   OrderClosePrice()+TakeProfit*Point+TrailingStop*Point,800,Yellow);
                  return(0);
					}
  				}
			 }
	  	  }
   	}
   }
   
   Profit=0;
   LastTicket=0;
   LastType=0;
	LastClosePrice=0;
	LastLots=0;	
	for(cnt=0;cnt<OrdersTotal();cnt++)
	{
	  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
	  if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) 
	  {
	  	   LastTicket=OrderTicket();
			if (OrderType()==OP_BUY) { LastType=OP_BUY; }
			if (OrderType()==OP_SELL) { LastType=OP_SELL; }
			LastClosePrice=OrderClosePrice();
			LastLots=OrderLots();
			if (LastType==OP_BUY) 
			{
				//Profit=Profit+(Ord(cnt,VAL_CLOSEPRICE)-Ord(cnt,VAL_OPENPRICE))*PipValue*Ord(cnt,VAL_LOTS);				
				if (OrderClosePrice()<OrderOpenPrice())
					{ Profit=Profit-(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
				if (OrderClosePrice()>OrderOpenPrice())
					{ Profit=Profit+(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
			}
			if (LastType==OP_SELL) 
			{
				//Profit=Profit+(Ord(cnt,VAL_OPENPRICE)-Ord(cnt,VAL_CLOSEPRICE))*PipValue*Ord(cnt,VAL_LOTS);
				if (OrderClosePrice()>OrderOpenPrice()) 
					{ Profit=Profit-(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
				if (OrderClosePrice()<OrderOpenPrice()) 
					{ Profit=Profit+(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
			}
			//Print(Symbol,":",Profit,",",LastLots);
	  }
   }
	
	Profit=Profit*PipValue;
	text2="Profit: $"+DoubleToStr(Profit,2)+" +/-";
   if (OpenOrders>=(MaxTrades-OrderstoProtect) && AccountProtection==1) 
   {	    
	     //Print(Symbol,":",Profit);
	     if (Profit>=SecureProfit) 
	     {
	        OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);		 
	        ContinueOpening=False;
	        return(0);
	     }
   }

      if (!IsTesting()) 
      {
	     if (myOrderType==3) { text="No conditions to open trades"; }
	     else { text="                         "; }
	     Comment("LastPrice=",LastPrice," Previous open orders=",PreviousOpenOrders,
	     "\nContinue opening=",ContinueOpening," OrderType=",myOrderType,"\n",text2,"\nLots=",lotsi,"\n",text);
      }

      if (myOrderType==1 && ContinueOpening) 
      {	
	     if ((Bid-LastPrice)>=Pips*Point || OpenOrders<1) 
	     {		
		    SellPrice=Bid;				
		    LastPrice=0;
		    if (TakeProfit==0) { tp=0; }
		    else { tp=SellPrice-TakeProfit*Point; }	
		    if (InitialStop==0) { sl=0; }
		    else { sl=SellPrice+InitialStop*Point;  }
		    if (OpenOrders!=0) 
		    {
			      mylotsi=lotsi;			
			      for(cnt=1;cnt<=OpenOrders;cnt++)
			      {
				     if (MaxTrades>MaxTrades) { mylotsi=NormalizeDouble(mylotsi*Doble,1); }
				     else { mylotsi=NormalizeDouble(mylotsi*Doble,1); }
			      }
		    } else { mylotsi=lotsi; }
		    if (mylotsi>MaxLots) { mylotsi=MaxLots; }
		    OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,NULL,MAGIC,0,Red);		    		    
		    return(0);
	     }
      }
      
      if (myOrderType==2 && ContinueOpening) 
      {
	     if ((LastPrice-Ask)>=Pips*Point || OpenOrders<1) 
	     {		
		    BuyPrice=Ask;
		    LastPrice=0;
		    if (TakeProfit==0) { tp=0; }
		    else { tp=BuyPrice+TakeProfit*Point; }	
		    if (InitialStop==0)  { sl=0; }
		    else { sl=BuyPrice-InitialStop*Point; }
		    if (OpenOrders!=0) {
			   mylotsi=lotsi;			
			   for(cnt=1;cnt<=OpenOrders;cnt++)
			   {
				  if (MaxTrades>MaxTrades) { mylotsi=NormalizeDouble(mylotsi*Doble,1); }
				  else { mylotsi=NormalizeDouble(mylotsi*Doble,1); }
			   }
		    } else { mylotsi=lotsi; }
		    if (mylotsi>MaxLots) { mylotsi=MaxLots; }
		    OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,sl,tp,NULL,MAGIC,0,Blue);		    
		    return(0);
	     }
      }   

//----
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:


MACD Histogram


Custom Indicators Used:
ZeroLag MACD

Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
It automatically opens orders when conditions are reached

Other Features: