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