Code:
extern string _INVISIBLE_TRAIL = "__________INVISIBLE TRAIL_____________________"; extern bool Use_Money_Trail = true;//ENABLE extern double Money_Trail_Start=5;//TP input double TrailingStop = 2; // SL input double TrailingStep = 3;//STEP double TrallB = 0; double TrallS = 0; double price=0; double PROFIT_SUM1=0; double Trail_Stop ; double Trail_Step ; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if( Use_Money_Trail = true) {INVISIBLE_TRAIL();}; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int INVISIBLE_TRAIL() { string pair = Symbol(); TrailingStart = Money_Trail_Start; /* * (MarketInfo(pair,MODE_TICKVALUE) /MarketInfo(pair,MODE_TICKSIZE))*(StringFind("JPY", _Symbol)<0?0.0001:0.01) ; */ Trail_Stop = TrailingStop * (MarketInfo(pair,MODE_TICKVALUE) /MarketInfo(pair,MODE_TICKSIZE))*(StringFind("JPY", _Symbol)<0?0.0001:0.01); // length אורך כןלל של הטרייל; Trail_Step =TrailingStep* (MarketInfo(pair,MODE_TICKVALUE) /MarketInfo(pair,MODE_TICKSIZE))*(StringFind("JPY", _Symbol)<0?0.0001:0.01); // step גורל צעד. Print("TrailingStart",TrailingStart); double OOP=0; double SL=0; double TP=0; int b=0,s=0,tip, TicketB=0,TicketS=0; PROFIT_SUM1=0; for(int j=OrdersTotal(); j>0; j--) { if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType() == OP_BUY || OrderType() == OP_SELL) { PROFIT_SUM1 = PROFIT_SUM1 + OrderProfit(); } Print("PROFIT_SUM",PROFIT_SUM1); if(PROFIT_SUM1>= TrailingStart) { PRICE_ASK_BID=PROFIT_SUM1* (MarketInfo(pair,MODE_TICKVALUE) /MarketInfo(pair,MODE_TICKSIZE))*(StringFind("JPY", _Symbol)<0?0.0001:0.01); Print("PRICE_ASK_BID",PRICE_ASK_BID); tip = OrderType(); { if(tip==OP_BUY) { b++; } if(tip==OP_SELL) { s++; } } if((b>s)||(b==s)) { //----------------------------------------------BUY UP-------------------------------------------------------- // OOP = Ask-PRICE_ASK_BID; OOP = NormalizeDouble(OrderOpenPrice(),Digits); Print("Ask",Ask); Print("OOP",OOP); //----------------------------------------------TAKE PROFIT-------------------------------------------------------- TP=NormalizeDouble(Ask+Trail_Stop*pips,Digits); if(TP>=OOP+TrailingStart*pips && (TRAIL_TAKE_PROFIT==0 || TRAIL_TAKE_PROFIT+Trail_Step*pips<TP)) // if(TRAIL_TAKE_PROFIT <TP) TRAIL_TAKE_PROFIT=TP; Print("TP", TRAIL_TAKE_PROFIT); //----------------------------------------------STOP LOSS-------------------------------------------------------- SL=NormalizeDouble(Bid-Trail_Stop*pips,Digits); if(SL>=OOP-TrailingStart*pips && (TRAIL_STOP_LOSS==0 || TRAIL_STOP_LOSS-Trail_Step*pips<SL)) // if(TRAIL_STOP_LOSS <SL) TRAIL_STOP_LOSS=SL; Print("SL",TRAIL_STOP_LOSS); } if(b<s) { //----------------------------------------------SELL DOWN-------------------------------------------------------- // OOP = Ask+PRICE_ASK_BID; OOP = NormalizeDouble(OrderOpenPrice(),Digits); Print("Ask",Ask); Print("OOP",OOP); //----------------------------------------------TAKE PROFIT-------------------------------------------------------- TP=NormalizeDouble(Bid-Trail_Stop*pips,Digits); if(TP>=OOP-TrailingStart*pips && (TRAIL_TAKE_PROFIT==0 || TRAIL_TAKE_PROFIT-Trail_Step*pips<TP)) // if(TRAIL_TAKE_PROFIT <TP) TRAIL_TAKE_PROFIT=TP; Print("TP", TRAIL_TAKE_PROFIT); //----------------------------------------------STOP LOSS-------------------------------------------------------- SL=NormalizeDouble(Bid+Trail_Stop*pips,Digits); if(SL>=OOP-TrailingStart*pips && (TRAIL_STOP_LOSS==0 || TRAIL_STOP_LOSS-Trail_Step*pips<SL)) // if(TRAIL_STOP_LOSS <SL) TRAIL_STOP_LOSS=SL; Print("SL",TRAIL_STOP_LOSS); } } } } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(OrdersTotal()>1) { if(b>s||b==s) { if(TRAIL_TAKE_PROFIT!=0) { Comment("Trail order TP"); DrawHline("TP", TRAIL_TAKE_PROFIT,clrBlue,1); if(Bid>= TRAIL_TAKE_PROFIT) { RemoveAllOrders();} } //--- if(TRAIL_STOP_LOSS!=0) { Comment("Trail order SL"); DrawHline("SL",TRAIL_STOP_LOSS,clrRed,1); if(Ask<=TRAIL_STOP_LOSS) {RemoveAllOrders();} } } //--- if(b<s) { if(TRAIL_TAKE_PROFIT!=0) { Comment("Trail order TP"); DrawHline("TP", TRAIL_TAKE_PROFIT,clrBlue,1); if(Bid<= TRAIL_TAKE_PROFIT) {RemoveAllOrders();} } //--- if(TRAIL_STOP_LOSS!=0) { Comment("Trail order SL"); DrawHline("SL",TRAIL_STOP_LOSS,clrRed,1); if(Ask>=TRAIL_STOP_LOSS) {RemoveAllOrders();} } } } else if(b==0&&s==0) { TRAIL_TAKE_PROFIT=0; TRAIL_STOP_LOSS=0; ObjectDelete("TP"); ObjectDelete("SL"); } return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void DrawHline(string name,double P,color clr,int WIDTH) { if(ObjectFind(name)!=-1) ObjectDelete(name); ObjectCreate(name,OBJ_HLINE,0,0,P,0,0,0,0); ObjectSet(name,OBJPROP_COLOR,clr); ObjectSet(name,OBJPROP_STYLE,2); ObjectSet(name,OBJPROP_WIDTH,WIDTH); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ // CLOSE && Remove All Orders //+------------------------------------------------------------------+ void RemoveAllOrders() { for(int i = OrdersTotal() - 1; i >= 0 ; i--) { if(!OrderSelect(i,SELECT_BY_POS)) Print("ERROR"); if(OrderSymbol() != Symbol()) continue; price = MarketInfo(OrderSymbol(),MODE_ASK); if(OrderType() == OP_BUY) price = MarketInfo(OrderSymbol(),MODE_BID); if(OrderType() == OP_BUY || OrderType() == OP_SELL) { if(!OrderClose(OrderTicket(), OrderLots(),price,5)) Print("ERROR"); } else { if(!OrderDelete(OrderTicket())) Print("ERROR"); } Sleep(100); int error = GetLastError(); // if(error > 0) // Print("Unanticipated error: ", ErrorDescription(error)); RefreshRates(); } } //+------------------------------------------------------------------+
Hello everyone,
I am 'm trying to build a trailing stop with money to close multiple trades
And encountered problems: it is blinking and not always closing trades .
I would appreciate any help.
This is the code: