Einzelnen Beitrag anzeigen
  #3 (permalink)  
Alt 31.05.19
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Arrow wie komme ich aus der Funktion raus

Ich habe das einigermaßen so hinbekommen, daß es schon mal funktioniert, ABER
jetzt brauche ich Hilfe, um aus dieser Funktion bei Bedarf rauszukommen.
Egal was ich versuche, einmal drin gibt es kein Entkommen mehr (außer SL ausgelöst; das ist zwar eigentlich Sinn und Zweck der Sache, aber wenn der Spike nicht sofort abgeht, ist es besser auszusteigen).
Es geht hier um einen Booster, der den SL verdammt schnell nachzieht, zu benutzen bei Spikes (wenn man schnell genug ist).
Der Aufbau vereinfacht am Beispiel Long:
1. 2 Buttons: 1x für LongBoost und 1x für Close
2. Beim LongBoost-Button wird die Variable BoostLongEnabled=true gesetzt und die BoostLong() aufgerufen
3. Beim Close-Button wird die Variable BoostLongEnabled=false gesetzt und die Close() Funktion aufgerufen
Das Problem dabei ist wie oben gesagt, daß ein BoostLongEnabled=false die BoostLong() Funktion nicht abbricht.
Code:
void BoostLong()
{
   double ordprofit=0;    // orders profit size to begin trailing, we use 2*(commission+swap)
   double rq_price=0;     // required price for stop loss setting (Bid or Ask)
   double rq_trail=0;     // distance of trailing stop to price
   
   TrailingStop=(double)StringToDouble(ObjectGetString(0,PFX+"TS<>",OBJPROP_TEXT)); //TSField
   DecreaseTS=DecreaseTS;
   
   ResetLastError();
   while(OpenPos(OP_BUY)>0 && BoostLongEnabled)                           //WhileWeHaveLongs
   {
      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_BUY )                                   //BuyOrder
            {                                                             //IsOneOfOurLongs:
               rq_price=MarketInfo(_Symbol,MODE_BID);                     //Getrequired price
               ordprofit=2*( OrderCommission()+OrderSwap() );             //CoverCostsCash
               if(OrderProfit()>ordprofit)                                //WeAreInProfit:
               {
                  while(TrailingStop>DecreaseTS && BoostLongEnabled )       //WhileTSBiggerDecrementor
                  {
                     rq_trail=NormalizeDouble(TrailingStop*_Point,_Digits); //NormalizeIt
                     _Debug(__FUNCTION__
                            +" rq_trail="+DoubleToStr(rq_trail,0) );
                     if(OrderStopLoss()<rq_price-rq_trail )                //SLBelow Bid-TrailDist
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),     //TrailShort
                                    rq_price-rq_trail,                     //ChangeSL:Bid-TSdist
                                    OrderTakeProfit(),0,ColorArrowShort) ) //BoostSuccess:
                           TrailingStop=TrailingStop-DecreaseTS;           //DecreaseStopDistance
                           _Log(" Buy boost.");
                           _Debug(__FUNCTION__
                                  +" TrailingStop="+DoubleToStr(TrailingStop,0) );
                  }
                  //TSReachedDecrementor+StillInTrade
                  rq_trail=NormalizeDouble(DecreaseTS*_Point,_Digits);    //NormalizeDecrementor
                  if(OrderStopLoss()<rq_price-rq_trail )                  //SLBelow Bid-TrailDist
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),       //TrailShort
                                   rq_price-rq_trail,                     //ChangeSL:Bid-TSdist
                                   OrderTakeProfit(),0,ColorArrowShort) ) //TrailSuccess:
                        _Log(" Buy boost.");
               }
            
            }
   }//WhileWeHaveLongs
   if(OpenPos(OP_BUY)==0) { BoostLongEnabled=false; return; } //NoLongPositionsOpenAnyMore
}
Kann mir bitte jemand sagen, wo der Fehler ist . Danke. AVT