MACD5MIN





//+------------------------------------------------------------------+
//|                                                     MACD5MIN.mq4 |
//|                                                     Igor Morozov |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Igor Morozov"
#property link      ""

//---- input parameters
extern int       FastEMA=10;
extern int       SlowEMA=26;
extern int       Divergence=8;
extern int       StopLoss=20;
extern int       TakeProfit=20;
extern int       MagicNumber=10268;

int ticket;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
//----
   
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
//----
   
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//----
	ticket=GetTicket(MagicNumber);
	switch(ticket)
	{
		case 0: // look for entry
		{
			double curMACD=iMACD(NULL,PERIOD_M5,FastEMA,SlowEMA,1,PRICE_CLOSE,0,1);
			double priMACD=iMACD(NULL,PERIOD_M5,FastEMA,SlowEMA,1,PRICE_CLOSE,0,2);
			// buy signal
			if(curMACD>=Divergence*Point&&priMACD<Divergence*Point) 
				OrderSend(Symbol(),OP_BUY,1,Ask,2,
						Ask-StopLoss*Point,Ask+TakeProfit*Point,"",
						MagicNumber,0,Blue);
			// sell signal
			if(curMACD<=Divergence*Point*(-1)&&priMACD>Divergence*Point*(-1)) 
				OrderSend(Symbol(),OP_SELL,1,Bid,2,
						Bid+StopLoss*Point,Bid-TakeProfit*Point,"",
						MagicNumber,0,Red);
			break;
		}
		default: // look for exit
		{
			if(OrderSelect(ticket,SELECT_BY_TICKET))
			{
				switch(OrderType())
				{
					case OP_BUY:
					{
						if(Bid-OrderOpenPrice()>TakeProfit*Point*0.8)
						{
							double newsl=MathMin(
									OrderOpenPrice()+TakeProfit*Point*0.5,
									Bid-(MarketInfo(Symbol(),MODE_STOPLEVEL)+1)*Point);
							OrderModify(ticket,0,newsl,OrderTakeProfit(),0,Aqua);
						}
						break;
					}
					case OP_SELL:
					{
						if(OrderOpenPrice()-Bid>TakeProfit*Point*0.8)
						{
							newsl=MathMax(
									OrderOpenPrice()-TakeProfit*Point*0.5,
									Ask+(MarketInfo(Symbol(),MODE_STOPLEVEL)+1)*Point);
							OrderModify(ticket,0,newsl,OrderTakeProfit(),0,Orange);
						}
						break;
					}
				}
			}
		}
	}	   
//----
   return(0);
}
//+------------------------------------------------------------------+

int GetTicket(int magic)
{
	for(int i=0;i<OrdersTotal();i++)
	{
		if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
		{
			if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
				return(OrderTicket());
		}
	}
	return(0);
}





Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

MACD Histogram


Custom Indicators Used:

Order Management characteristics:

It can change open orders parameters, due to possible stepping strategy
Checks for the total of open orders

Other Features: