//+------------------------------------------------------------------+ //| ft_prohvost.mq4 | //| Copyright 2012, FORTRADER.RU | //| http://fortrader.ru | //| http://fortrader.ru/services/ea/single?id=4 //+------------------------------------------------------------------+ #property copyright "Copyright 2012, FORTRADER.RU" #property link "http://fortrader.ru" extern int golova=10; extern int telo=0; extern int numbarclose=0; extern double InpLots =0.1; extern int EA_Magic=12354; int barnb,barns; extern int InpStopLoss =50; extern int maxopenbuy = 0; extern bool bbu_enable=true; extern bool tralingstop_enable=true; int bars; double bbu_size_buy, trailingstop_size_buy,bbu_size_sell, trailingstop_size_sell; int start() { if(Bars!=bars) { bars=Bars; double s_golova = golova; double s_telo = telo; double TKP = InpStopLoss; if(Digits==5 || Digits==3) { s_golova = golova*10; s_telo = telo*10; TKP = TKP*10; } if((High[1]-Close[1]>s_golova*Point) && (Close[1]-Open[1]>s_telo*Point) && timecontrol()==1 && (CountPos(1)<=maxopenbuy) /*&& Asks_golova*Point) && (Open[1]-Close[1]>s_telo*Point) && timecontrol()==1 && (CountPos(0)<=maxopenbuy) /*&& Ask>ma*/) { barns=0; OpenOrderOnMarket(1,TKP,Low[1]); bbu_size_sell=(Ask-Low[1])/2; trailingstop_size_sell=(Ask-Low[1])/2; } if((barnb>=numbarclose && SummPos(1)<0 && numbarclose>0) /*|| Ask>=ma*/){CloseAllPos(1);} if((barns>=numbarclose && SummPos(0)<0 && numbarclose>0) /*|| Ask<=ma*/){CloseAllPos(0);} barnb++; barns++; } if(bbu_enable==1){BBU();} if(tralingstop_enable==1){TrailingStop();} return(0); } int TrailingStop() {int i;bool err; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(trailingstop_size_buy>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol()) { Print("trailingstop_size_buy"+trailingstop_size_buy); if(Bid-OrderOpenPrice()>=trailingstop_size_buy && trailingstop_size_buy>0 && (Bid-trailingstop_size_buy)>OrderStopLoss()) { if(((Bid-trailingstop_size_buy)-OrderStopLoss())>=trailingstop_size_buy) { Print("ТРЕЙЛИМ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-trailingstop_size_buy,OrderTakeProfit(),0,Green); if(err==false){return(-1);} GlobalVariableSet(DoubleToStr(OrderTicket(),0),Bid); }//if(Bid>=OrderStopLoss() }//if(Bid-OrderOpenPrice() }//if(BBUSize>0 }//if(OrderSelect(i if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_SELL && OrderSymbol()==Symbol() ) { if(OrderOpenPrice()-Ask>=trailingstop_size_sell && trailingstop_size_sell>0 && OrderStopLoss()>(Ask+trailingstop_size_sell)) { if((OrderStopLoss()-(Ask+trailingstop_size_sell))>trailingstop_size_sell) { Print("ТРЕЙЛИМ"); err=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+trailingstop_size_sell,OrderTakeProfit(),0,Green); if(err==false){return(-1);} }//if(Ask<=OrderStopLoss() }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } //Проверяет ордера на безубыток int BBU() {int i;bool err; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(bbu_size_buy>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderStopLoss()=bbu_size_buy && bbu_size_buy>0 ) { Print("ПОРА В БезуБыток"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+1*Point,OrderTakeProfit(),0,Red); if(err==false){return(-1);} }//if(Bid-OrderOpenPrice() }//if(BBUSize>0 }//if(OrderSelect(i if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(bbu_size_sell>0 && OrderType()==OP_SELL && OrderSymbol()==Symbol() && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0) && OrderMagicNumber()==EA_Magic) { if(OrderOpenPrice()-Ask>=bbu_size_sell && bbu_size_sell>0) { Print("ПОРА В БезуБыток"); err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-1*Point,OrderTakeProfit(),0,Red); if(err==false){return(-1);} }//if(OrderOpenPrice() }//if(BBUSize>0 }// if(OrderSelect }// for( i=1; return(0); } //Цена последней открытия последней закрытой сделки double ProfitLastPosHist(int type) {int i;datetime time;double price; for( i=1; i<=OrdersHistoryTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderOpenTime()>time){time=OrderOpenTime();price=OrderProfit();} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderOpenTime()>time){time=OrderOpenTime();price=OrderProfit();} } } return(price); } //Цена последней открытия последней закрытой сделки double LotLastPosHist(int type) {int i;datetime time;double price; for( i=1; i<=OrdersHistoryTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS,MODE_HISTORY)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && type==1 && OrderOpenTime()>time){time=OrderOpenTime();price=OrderLots();} if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && type==0 && OrderOpenTime()>time){time=OrderOpenTime();price=OrderLots();} } } return(price); } //количество позиций int CountPos(int type) {int i,b,s; for( i=1; i<=OrdersTotal(); i++) { if(OrderSelect(i-1,SELECT_BY_POS)==true) { if(OrderType()==OP_BUY && OrderSymbol()==Symbol()){b=b+1;} if(OrderType()==OP_SELL && OrderSymbol()==Symbol()){s=s+1;} } } if(type==0){return(s);} if(type==1){return(b);} } extern int starttime = 0; extern int stoptime = 0; //Ограничение по времени int timecontrol() {// Подробное описание http://fxnow.ru/blog.php?user=Yuriy&blogentry_id=1 if ( ( (Hour()>=0 && Hour()<=stoptime-1) || (Hour()>=starttime && Hour()<=23)) && starttime>stoptime) { return(1); } if ( (Hour()>=starttime && Hour()<=stoptime-1) && starttime0){sl=op-slpips*Point;}if(tppips>0){tp=tppips;} err=OrderSend(Symbol(),OP_BUY,LotB,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"FORTRADER.RU",EA_Magic,0,Red); if(err<0){Print("OrderSend()- Ошибка OP_BUY. op "+op+" sl "+sl+" tp "+tp+" "+" LOT "+LotB+" "+GetLastError());return(-1);} } if(type==1) { op=Bid;if(slpips>0){sl=op+slpips*Point;}if(tppips>0){tp=tppips;} err=OrderSend(Symbol(),OP_SELL,LotS,NormalizeDouble(op,Digits),3,NormalizeDouble(sl,Digits),NormalizeDouble(tp,Digits),"FORTRADER.RU",EA_Magic,0,Red); if(err<0){Print("OrderSend()- Ошибка OP_SELL. op "+op+" sl "+sl+" tp "+tp+" "+" LOT "+LotS+" "+GetLastError());return(-1);} } return(0); }