//+------------------------------------------------------------------+ //| Ðåêîìåíäóåòñÿ äëÿ 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: