Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 09.08.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Nicht im Betrieb gestest, evtl. mußt Du noch was anpassen.
Meine Lösung sähe erst mal so aus
Code:
void AdjustAllTPs() 
{ 
   double   NewestTP      =0.0;            //TPForTheLastOpenedTrade
   datetime NewestTime    =TimeCurrent();  //now
   
   // === newest running order has the highest number
   for(int i=OrdersTotal()-1; i>=0; i--)                               //LoopOverAllOrders
   {  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                     //SelectRunningOrders
      {  if(   OrderSymbol()==_Symbol                                  //OurMarket
            && OrderMagicNumber()==MagicNumber                         //OurEA
            && OrderType()<=OP_SELL             )                      //MarketOrdersOnly
         {
            if(OrderOpenTime()<NewestTime) NewestTP=OrderTakeProfit(); //1.OpenedBeforeNow:TryToGetTP
            if(NewestTP>0.0)               break;                      //HasValidTP:exitLoop
         }//OurMarket/EA/MarketOrders
      }//SelectRunningOrders
   }//LoopOverAllOrders
   
   // === set Newest TP to all
   for(int i=OrdersTotal()-1; i>=0; i--)                               //LoopOverAllOrders
   {  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                     //SelectRunningOrders
      {  if(   OrderSymbol()==_Symbol                                  //OurMarket
            && OrderMagicNumber()==MagicNumber                         //OurEA
            && OrderType()<=OP_SELL            )                       //MarketOrdersOnly
         {
            if( !OrderModify(OrderTicket(),                            //NothingToChange
                             OrderOpenPrice(),
                             OrderStopLoss(),
                             NormalizeDouble(NewestTP,_Digits),        //ForSafetyNormFoundValue
                             0,clrNONE                           ) )   //NoExpire,WhateverColor
               Print(__FUNCTION__,                                     //Failed:Message
                     " new TP(",DoubleToStr(NewestTP,_Digits),")",
                     " for order no ",(int)OrderTicket()," failed" );
         }//OurMarket/EA/MarketOrders
      }//SelectRunningOrders
   }//LoopOverAllOrders
}
Erst mal so, hoffe das hilft Dir als Idee.
AVT