//+------------------------------------------------------------------+ //| eurusd.mq4 | //| Copyright © 2006-2007, Daniil | //| | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006 Daniil" #property link "npplus@mail.ru" #property link "http://www.fxmts.ru" //-----------------------------------------------------------| // EXTERN | //-----------------------------------------------------------| extern string rem0="Âûáîð ëîòà ñòîïà è ïðîôèòà"; extern double TakeProfit = 500; // îïòèìàëüíî extern double Profit_one = 70; // îïòèìàëüíî extern double Stop = 80; // îïòèìàëüíî extern double BezUbitok = 0; // ÷åðåç äàííîå êîëè÷åñòâî ïóíêòîâ ïðîôèòà ñòîï ïåðåäâèãàåòñÿ â óðîâåíü áåçóáûòî÷íîñòè extern double Lots = 1; // êîëè÷åñòâî ëîòîâ extern double chapter_lots = 5; extern string rem1="Óïðàâëåíèå êàïèòàëîì:"; extern bool MM = false; extern bool AccountIsMicro = false; extern double MaximumRisk = 0.01; extern double DecreaseFactor = 1; extern string rem3="Ïàðàìåòðû ñðåäíèõ:"; extern double Exp=55; extern double Simple=69; extern double HMA=15; extern double FilterMA=2; extern string rem4="Ïàðàìåòðû MACD:"; extern double a=2300; extern double b=4000; extern double c=800; //2300 4000 800 bool buy = True; bool sell =True; bool close_buy_signal=false; // ñèãíàë íà çàêðûòèå ïîêóïêè bool close_sell_signal=false; // ñèãíàë íà çàêðûòèå ïðîäàæè //int cnt; bool close_1=false; // çàêðûëàñü ëè ïåðâàÿ ÷àñòü (0.1 ëîò) bool close_2=false; // çàêðûëàñü ëè âòîðàÿ ÷àñòü (0.1 ëîò) bool close_3=false; // çàêðûëàñü ëè òðåòüÿ ÷àñòü (0.1 ëîò) bool close_4=false; // çàêðûëàñü ëè ÷åòâåðòàÿ ÷àñòü (0.1 ëîò) bool close_5=false; // çàêðûëàñü ëè ïÿòàÿ ÷àñòü (0.1 ëîò) //-----------------------------------------------------------| // LOT OPTIMIZATOR | //-----------------------------------------------------------| double LotsOptimized() { double lot=Lots; int orders=HistoryTotal(); int losses=0; lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1); if(DecreaseFactor>0) { for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue; //---- if(OrderProfit()>0) break; if(OrderProfit()<0) losses++; } if(losses==1) lot=NormalizeDouble(lot*2,1); if(losses==2) lot=NormalizeDouble(lot*3,1); if(losses==3) lot=NormalizeDouble(lot*4,1); if(losses==4) lot=NormalizeDouble(lot*5,1); if(losses==5) lot=NormalizeDouble(lot*6,1); if(losses>5) lot=NormalizeDouble(lot*7,1); } if(lot<0.1) lot=0.1; if(MM==false) lot=Lots; if(AccountIsMicro==true) lot=lot/10; //--- for CONTEST only // if(lot > 5) lot=5; return(lot); } //-----------------------------------------------------------| // START | //-----------------------------------------------------------| int start() { int cnt, ticket, total; //--- double FMA, FMAprev; double EMA,SMA; double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious; if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<2) { Print("TakeProfit less than 200"); return(0); // check TakeProfit } //-----------------------------------------------------------| // ÔÓÍÊÖÈÈ: | //-----------------------------------------------------------| //--- ôèëüòð FMA=iMA(NULL,0,FilterMA,0,MODE_LWMA,PRICE_CLOSE,0); FMAprev=iMA(NULL,0,FilterMA,0,MODE_LWMA,PRICE_CLOSE,2); //--- ñðåäíèå EMA=iMA(NULL,0,Exp,0,MODE_EMA,PRICE_CLOSE,0); SMA=iMA(NULL,0,Simple,0,MODE_SMA,PRICE_CLOSE,0); //--- MACD MacdCurrent=iMACD(NULL,0,a,b,c,PRICE_CLOSE,MODE_MAIN,2); MacdPrevious=iMACD(NULL,0,a,b,c,PRICE_CLOSE,MODE_MAIN,4); SignalCurrent=iMACD(NULL,0,a,b,c,PRICE_CLOSE,MODE_SIGNAL,2); SignalPrevious=iMACD(NULL,0,a,b,c,PRICE_CLOSE,MODE_SIGNAL,4); //---------------------\\ total=OrdersTotal(); if(total<1) { // no opened orders identified if(AccountFreeMargin()<(1000*LotsOptimized())) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //-----------------------------------------------------------| // OPEN BUY | //-----------------------------------------------------------| if(1==1) { // if( MacdCurrent>MacdPrevious && MacdPrevious<0 && MacdCurrent>0 ) if (MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) { ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,5,Ask-Stop*Point,Ask+TakeProfit*Point,"priceEX",16384,0,Green); sell=true; buy=false; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES } else Print("Error opening BUY order : ",GetLastError()); return(0); } } //-----------------------------------------------------------| // OPEN SELL | //-----------------------------------------------------------| if (1==1) { // if( MacdCurrent<MacdPrevious && MacdPrevious>0 && MacdCurrent<0 ) if (MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) { ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,5,Bid+Stop*Point,Bid-TakeProfit*Point,"priceEX",16384,0,Red); buy=true; sell=false; if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES } else Print("Error opening SELL order : ",GetLastError()); return(0); } } return(0); } //-----------------------------------------------------------| // CLOSE ORDER | //-----------------------------------------------------------| if (OrdersTotal()>0 && 1==1) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); //--- çàêðûòèå ïîëíîãî îðäåðà ïî îáëàêàì (ñèëüíåéøåìó ñèãíàëó) if (OrderType()==OP_BUY) { // if( MacdCurrent<MacdPrevious && MacdPrevious>0 && MacdCurrent<0 ) if (MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); close_1=false; close_2=false; Print("Çàêðûëè îðäåð íà ïîêóïêó ïîëíîñòüþ ïî ïðîòèâîïîëîæíîìó ñèãíàëó"); //buy=false; // return(0); } } if (OrderType()==OP_SELL ) // çàêðûâàåì îðäåð íà ïîêóïêó òàê êàê åñòü ñèãíàë { // if(MacdCurrent>MacdPrevious && MacdPrevious<0 && MacdCurrent>0 ) if (MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious) { OrderClose(OrderTicket(),OrderLots(),Ask,3,White); close_1=false; close_2=false; Print("Çàêðûëè îðäåð íà ïðîäàæó ïîëíîñòüþ ïî ïðîòèâîïîëîæíîìó ñèãíàëó"); // sell=false; // return(0); } } //--- çàêðûòèå ëîòà ïî ÷àñòÿì: // ---1--- ïåðâàÿ ÷àñòü if (OrderType()==OP_BUY && Profit_one>0) { // çàêðûâàåì ÷àñòü îðäåðà íà ïîêóïêó åñëè ïðîáèâàåòñÿ ëèíèÿ Kijun_sen if (Ask>OrderOpenPrice()+Profit_one*Point) // if (Open[1]>Kijun_sen && Close[1]>Kijun_sen && Open[2]>Kijun_sen && Close[2]>Kijun_sen && Ask<Kijun_sen ) { OrderClose(OrderTicket(),OrderLots()/2,Bid,3,White); close_1=true; Print("Çàêðûëè ïåðâîé ÷àñòè íà ïîêóïêó"); //buy=false; // return(0); } } if (OrderType()==OP_SELL && Profit_one>0) // çàêðûâàåì îðäåð íà ïîêóïêó òàê êàê åñòü ñèãíàë { // çàêðûâàåì ÷àñòü îðäåðà íà ïðîäàæó åñëè ïðîáèâàåòñÿ ëèíèÿ Kijun_sen if (Ask<OrderOpenPrice()-Profit_one*Point) // if (Open[1]<Kijun_sen && Close[1]<Kijun_sen && Open[2]<Kijun_sen && Close[2]<Kijun_sen && Ask>Kijun_sen) { OrderClose(OrderTicket(),OrderLots()/2,Ask,3,White); close_1=true; Print("Çàêðûëè ïåðâîé ÷àñòè íà ïðîäàæó"); // sell=false; // return(0); } } /* // ---2--- âòîðàÿ ÷àñòü if (OrderType()==OP_BUY && 1==2 && close_2==false && OrderProfit()>0) { // çàêðûâàåì ÷àñòü îðäåðà íà ïîêóïêó åñëè ïðîáèâàåòñÿ ëèíèÿ Kijun_sen if (Open[1]>Hull && Close[1]>Hull && Open[2]>Hull && Close[2]>Hull && Ask<Hull ) { OrderClose(OrderTicket(),0.4,Bid,3,White); close_2=true; Print("Çàêðûëè ïåðâîé ÷àñòè íà ïîêóïêó"); //buy=false; // return(0); } } if (OrderType()==OP_SELL && 1==2 && close_2==false && OrderProfit()>0) // çàêðûâàåì îðäåð íà ïîêóïêó òàê êàê åñòü ñèãíàë { // çàêðûâàåì ÷àñòü îðäåðà íà ïðîäàæó åñëè ïðîáèâàåòñÿ ëèíèÿ Kijun_sen if (Open[1]<Hull && Close[1]<Hull && Open[2]<Hull && Close[2]<Hull && Ask>Hull) { OrderClose(OrderTicket(),0.4,Ask,3,White); close_2=true; Print("Çàêðûëè ïåðâîé ÷àñòè íà ïðîäàæó"); // sell=false; // return(0); } } */ //-----------------------------------------------------------| // BEZUBITOK | //-----------------------------------------------------------| if (OrderType()==OP_BUY && BezUbitok>0) { if(OrderStopLoss()>0) //|| OrderStopLoss()-OrderOpenPrice()<2*Point) { if (Bid-OrderOpenPrice()>BezUbitok*Point) { OrderModify (OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Gold); } } } if (OrderType()==OP_SELL && BezUbitok>0) { if (OrderStopLoss()>0)// || OrderOpenPrice()-OrderStopLoss()<2*Point) { if (OrderOpenPrice()-Ask>BezUbitok*Point) { OrderModify (OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Gold); } } } } return(0); } //-----------------------------------------------------------| // THE END | //-----------------------------------------------------------|
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:
MACD Histogram
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
It Closes Orders by itself
Checks for the total of open orders
It automatically opens orders when conditions are reached
Other Features: