//+------------------------------------------------------------------+ //| MACD multi .mq4 | //| Oleg Krinichny © 2009 | //| | //+------------------------------------------------------------------+ extern string Instrument = "EURUSD"; extern double Lots = 0.1; extern int TakeProfit = 50; extern int TrailingStop = 0; extern int StopLoss = 50; extern int FirstOpenLevel = 5; extern int LastOpenLevel = 20; extern int Slope = 2; extern int CloseLevel = 20; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent, SignalPrevious; int i, total, p1, p2, p3, p4, p5, p6, p7, p8, p9; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); p1=0; p2=0; p3=0; p4=0; p5=0; p6=0; p7=0; p8=0; p9=0; OrderSelect(0,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(1,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(2,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(3,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} OrderSelect(4,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()=="EURUSD") {p1=1;} if(OrderSymbol()=="GBPUSD") {p2=1;} if(OrderSymbol()=="USDCHF") {p3=1;} if(OrderSymbol()=="USDJPY") {p4=1;} if(OrderSymbol()=="EURCHF") {p5=1;} if(OrderSymbol()=="EURGBP") {p6=1;} if(OrderSymbol()=="AUDUSD") {p7=1;} if(OrderSymbol()=="USDCAD") {p8=1;} if(OrderSymbol()=="EURJPY") {p9=1;} total=OrdersTotal(); for(i=0;i<total;i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Instrument) { if(OrderType()==OP_BUY) { if(MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent>CloseLevel*0.1*Point) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } if(TrailingStop>0) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); } } } } if(OrderType()==OP_SELL) { if(SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent>CloseLevel*0.1*Point) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } if(TrailingStop>0) { if(OrderOpenPrice()-Ask>Point*TrailingStop) { if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } total=OrdersTotal(); if(total<5) { if((Instrument=="EURUSD" && p1<1) || (Instrument=="GBPUSD" && p2<1) || (Instrument=="USDCHF" && p3<1) || (Instrument=="USDJPY" && p4<1) || (Instrument=="EURCHF" && p5<1) || (Instrument=="EURGBP" && p6<1) || (Instrument=="AUDUSD" && p7<1) || (Instrument=="USDCAD" && p8<1) || (Instrument=="EURJPY" && p9<1)) { if(MacdCurrent<0 && MacdCurrent-SignalCurrent>SignalCurrent*FirstOpenLevel*(-0.01) && MacdCurrent-SignalCurrent<SignalCurrent*LastOpenLevel*(-0.01) && MacdCurrent-MacdPrevious>MacdPrevious*Slope*(-0.01) && MacdPrevious-SignalPrevious-MacdCurrent+SignalCurrent<(CloseLevel-10)*0.1*Point) { OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",0,0,Green); return(0); } if(MacdCurrent>0 && SignalCurrent-MacdCurrent>SignalCurrent*FirstOpenLevel*0.01 && SignalCurrent-MacdCurrent<SignalCurrent*LastOpenLevel*0.01 && MacdPrevious-MacdCurrent>MacdPrevious*Slope*0.01 && SignalPrevious-MacdPrevious-SignalCurrent+MacdCurrent<(CloseLevel-10)*0.1*Point) { OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",0,0,Red); return(0); } } } }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
MACD Histogram
Custom Indicators Used:
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: