//+------------------------------------------------------------------+ //| JK_BullP_AutoTrader.mq4 | //| Copyright © 2005, Johnny Kor | //| autojk@mail.ru | //| On-Line Testing http://vesna.on-plus.ru/forex/stat/69740/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Johnny Kor" #property link "autojk@mail.ru" //---- input parameters extern double TakeProfit = 7; extern double Lots = 1; extern double StopLoss = 30; extern int TrailingStop = 15; extern double Patr=9,Prange=5,Kstop=1.5,kts=2,Vts=2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int start() {double pos1pre, pos2cur, hzbul1, hzbul2, hzbear1, hzbear2; int cnt, ticket, total,TotalOpenOrders; pos1pre = iBullsPower(NULL, 0, 13,PRICE_CLOSE,2); pos2cur = iBullsPower(NULL, 0, 13,PRICE_CLOSE,1); //hzbear1 = iBearsPower(NULL, 0, 13,PRICE_WEIGHTED,1); //hzbear2 = iBearsPower(NULL, 0, 13,PRICE_CLOSE,0); // = ((hzbear1+hzbul1)/2); // = ((hzbear2+hzbul2)/2); total=OrdersTotal(); /* { int para; // - ïîðÿäêîâûé íîìåð äîðãóåìîé ïàðû double sl[11]; //- ìàññèâ StopLoss ïî êàæäîé ïàðå - ðàâåí äëèíå ñâå÷è íà íà÷àëî óòðåííåé ñåññèè double ts[11]; //- ìàññèâ òðåéëèíãîâ ïî êàæäîé ïàðå - äèíàìè÷åñêèé òðåéëèíã string arSym[12]; //---- // Ïîðÿäêîâûé íîìåð ïàðû if (Symbol()=="USDCHF") para=0; arSym[0]="ïî ôðàíêó"; if (Symbol()=="GBPUSD") para=1; arSym[1]="ïî Ôóíòó"; if (Symbol()=="USDJPY") para=2; arSym[3]="ïî åíå"; if (Symbol()=="EURUSD") para=3; arSym[3]="ïî åâðå"; if (Symbol()=="AUDUSD") para=4; arSym[3]="ïî àâñòðàëèéöó"; if (Symbol()=="USDCAD") para=5; arSym[3]="ïî êàíàäöó"; if (Symbol()=="EURGBP") para=6; arSym[3]="ïî åâðî ôóíòó"; if (Symbol()=="EURCHF") para=7; arSym[3]="ïî åâðî ôðàíêó"; if (Symbol()=="EURJPY") para=8; arSym[3]="ïî åâðî åíå"; if (Symbol()=="GBPJPY") para=9; arSym[3]="ïî Ôóíò åíå"; if (Symbol()=="GPBCHF") para=10; arSym[3]="ïî ôóíò ôðàíêó"; if (Symbol()=="#EPU4") para=11; arSym[3]="ïî Èíäåêñó"; double mode,ValATR,hi,lo; int prevBars,I,j2; int lang_mode=SPEECH_NATIVE; // Äâèãàåì ñòîïû ts[para]=TrailingStop; //------------------------------------------------------- if (prevBars != Bars) { ValATR=0; for ( I=1 ; I<=Patr;I++){ if (I<= Patr) ValATR += High[I]-Low[I]; } ValATR = NormalizeDouble(ValATR / Patr,4); hi=High[Highest(NULL,0,MODE_HIGH,Prange,Prange)]; lo=Low[Lowest(NULL,0,MODE_LOW,Prange,Prange)]; if (Vts==1) { ts[para]=NormalizeDouble(kts*ValATR,4); sl[para]=Kstop*ValATR; } if (Vts==2) { ts[para]=(hi-lo); sl[para]=Kstop*(hi-lo); } prevBars = Bars; } if (Vts<1 || Vts>2) return(0); //------------------------------------------------------- // int total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { // Âûñòàâëåíèå ïåðâîãî ñòîïà OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY && OrderSymbol()==Symbol()&& OrderStopLoss()== 0) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-sl[para],OrderTakeProfit(),0,Yellow); SpeechText("Còîï ëîñ"+ arSym[para]+" óñòàíîâëåí óñïåøíî!", lang_mode); return(0); } if(OrderType()<=OP_SELL && OrderSymbol()==Symbol() && OrderStopLoss()== 0) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+sl[para],OrderTakeProfit(),0,Yellow); SpeechText("Còîï ëîñ "+ arSym[para]+"óñòàíîâëåí óñïåøíî!", lang_mode); return(0); } // Ìîäèôèêàöèÿ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(ts[para]>0) { if(Bid-OrderOpenPrice()>TrailingStop*Point) { if(OrderStopLoss()<Bid-ts[para]|| OrderStopLoss()<OrderOpenPrice()) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-ts[para],OrderTakeProfit(),0,Blue); return(0); } } } } else { if(ts[para]>0) { if((OrderOpenPrice()-Ask)>TrailingStop*Point) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+ts[para])|| OrderStopLoss()>OrderOpenPrice()) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ts[para],OrderTakeProfit(),0,Red); return(0); } } } } } } } OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderType()==OP_BUY && OrderSymbol()==Symbol()&& OrderStopLoss()<Bid-ts[para]) { SpeechText("Îðäåð áàé"+ arSym[para]+" ìîäèôèöèðîâàí óñïåøíî!", lang_mode); } if ( OrderType()==OP_SELL && OrderSymbol()==Symbol()&& OrderStopLoss()>Ask+ts[para]){ SpeechText("Îðäåð ñåëë"+ arSym[para]+" ìîäèôèöèðîâàí óñïåøíî!", lang_mode);} //---- //---- //---- */ int H,L; for (cnt=0;cnt<30;cnt++) {if (H==0) {if (H<High[cnt]) H=High[cnt];}} for (cnt=0;cnt<30;cnt++) {if (L==0) { if (L>Low[cnt]) L=Low[cnt];}} Comment(" BullsPower - ",pos1pre," BearsPower - ",pos2cur); int j; for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && // ýòî îòêðûòàÿ ïîçèöèÿ? OP_BUY èëè OP_SELL OrderSymbol()==Symbol()) // èíñòðóìåíò ñîâïàäàåò? {j=2; if(OrderType()==OP_BUY) // îòêðûòà äëèííàÿ ïîçèöèÿ { // ïðîâåðèì - ìîæåò ìîæíî/íóæíî óæå òðåéëèíã ñòîï ñòàâèòü? if(TrailingStop>0) // ïîëüçîâàòåëü âûñòàâèë â íàñòðîéêàõ òðåéëèíãñòîï { // çíà÷èò ìû èäåì åãî ïðîâåðÿòü if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } else // èíà÷å ýòî êîðîòêàÿ ïîçèöèÿ { // ïðîâåðèì - ìîæåò ìîæíî/íóæíî óæå òðåéëèíã ñòîï ñòàâèòü? if(TrailingStop>0) // ïîëüçîâàòåëü âûñòàâèë â íàñòðîéêàõ òðåéëèíãñòîï { // çíà÷èò ìû èäåì åãî ïðîâåðÿòü if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) { if(OrderStopLoss()==0.0 || OrderStopLoss()>(Ask+Point*TrailingStop)) { OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); } } } } } } /*if (pos1pre > pos2cur) { for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_BUY && OrderSymbol()==Symbol()) { if (Bid>(OrderSelect(cnt,OrderOpenPrice(), MODE_TRADES)+TrailingStop*Point)) { OrderClose(OrderSelect(cnt,Symbol()),Lots,Bid,3,Violet); } } } } if (pos2cur<0) { for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if (Ask>(OrderSelect(cnt,OrderOpenPrice(), MODE_TRADES)-TrailingStop*Point)) { OrderClose(OrderSelect(cnt,Symbol()),Lots,Ask,3,Violet); } } } } */ if (pos1pre>pos2cur && pos2cur>0 && j<2) { OrderSend(Symbol(), OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,NULL,0,0,Red); } if (pos2cur<0 && j<1) { OrderSend(Symbol(), OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,0,0,Red); } // TRALiNG return(0); }
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Bulls Power indicator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself
It automatically opens orders when conditions are reached
Other Features: