Zitat:
Zitat von Karabiner
Ich finde immer nur EA´s die den bereits vorhandenen SL aus dem aktiven Trade modifizieren, aber nie einen EA der den SL setzt und je nach Marktinfo versetzt, als Lösungsansatz.
|
Das ist aus meinen "Erinnerung wie's geht" Schnipseln: 2 Anfangspositionen, 1. Position fester SL + fester TP wird nicht mehr angerührt, 2. Position (um die geht es hier) anfangs genau derselbe SL + fester TP halben Block höher als die 1. Position.
Hat die 2. Position den Punkt erreicht, wo die erste das Ziel erreicht hat, wird zuerst ihr Ziel/TP rausgenommen (also open end), und dann nur noch dem aktuellen Preis mit TrailSL Abstand gefolgt, bis man rausfliegt.
Code:
// zu Anfang berechnete Werte:
// - ProfitMoney ist der Eurowert der 1. TP Position
// - LongBE ist Einstieg+Spread+2*Slippage
// - TrailSL ist der trailing Abstand zum Preis
// voher schon bekannt: es ist eine laufende Long Position
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)) // positions in "Trade"
{
//=== break even half range reached:
//=== half range order: should be closed by TP
//=== full range order: set order to BE auf Einstand
if ( LPosCnt==2 && LEveCnt==0 // not yet even
&& OrderProfit()>ProfitMoney // dist in €
&& Bid>LongBE // cur above entry
&& OrderStopLoss()<LongBE ) // SL below entry
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),
LongBE,OrderTakeProfit(),0,Ctrail) )
{ LEveCnt=1; // set even counter
Print(EAname+" LeC="+IntegerToString(LEveCnt,1) );
}
}
//=== trailing: SL was LongBE, TS=block
//=== take out TP if not yet counted as TPex Takeprofit rausnehmen
else if( LPosCnt==2 && LEveCnt==1 && TPxCnt==0
&& Bid>OrderOpenPrice()+(TrailSL) // above cur+block
&& OrderStopLoss()<Bid-TrailSL ) // below cur-block
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),
LongBE,0,0,Ctrail) )
{ LEveCnt=1; TPxCnt=1; // set TP ex counter
Print(EAname+" TPx="+IntegerToString(TPxCnt,1));
}
}
//=== activate trailing only nur Trailing
else if( LPosCnt==2 && LEveCnt==1 && TPxCnt==1
&& Bid>OrderOpenPrice()+(TrailSL) // above cur+block
&& OrderStopLoss()<Bid-TrailSL ) // below cur-block
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),
Bid-TrailSL,0,0,Ctrail) )
{ LEveCnt=1; Print(EAname+" Lmo."); }
}
} // == end OrderSelect(n,SELECT_BY_POS,MODE_TRADES)
Ich hoffe, das hilft Dir die Vorgehensweise zu sehen. Bitte nicht einfach abkupfern, die Art nur "if OrderModify ist ok" abzufragen sollte man so nicht einfach machen, sondern besser den Fehlercode holen falls etwas nicht klappt. AVT