Zitat:
Zitat von traderdoc
Ein Fehler im EA.
traderdoc
|
Hallo traderdoc,
mein Code für den Trailing Stop definiert sich derzeit so:
Der SL soll immer abhängig sein vom ursprünglichen SL (in Punkten) und einem Faktor, den ich extern definiere. Als Beispiel: Wenn der SL 50 Punkte ist und ich einen Faktor von 3 definiere, soll der SL nachgezogen werden, sobald der Kurs 150 Punkte über dem aktuellen SL ist. Nachgezogen wird aber nicht bei jedem Tick, sondern bei jedem Close einer M1-Kerze (immer das Hoch, deshalb im Code auch iHigh).
Der Code dazu ist folgender:
//Trailing-Stop für LongOrder2:
static datetime timestamp;
datetime time = iTime(NULL, PERIOD_M1, 0); //Nachziehen des Trailing Stops nur bei jeder neuen M1-Kerze und NICHT jedem Tick!
if(timestamp != time)
{
timestamp = time;
double norm_OOP = NormalizeDouble(OrderOpenPrice(),1);
double norm_OSL = NormalizeDouble(OrderStopLoss(),1);
double Initial_SL_Long = (OrderTakeProfit() - OrderOpenPrice()) * SL_Prozent/TP_Prozent2; //Ursprünglicher SL in Punkten
double TS_Long_Punkte = NormalizeDouble(Initial_SL_Long * TS_Faktor,1); //Trailing Stop in Punkten;
if( iHigh(NULL,0,1) - TS_Long_Punkte >= OrderStopLoss() && OrdersTotal() == 1 && iHigh(NULL,0,1) > norm_OSL + TS_Long_Punkte)
{
//Erklärung:
//iHigh(NULL,0,1) - TS_Long_Punkte >= OrderStopLoss(): Wenn das Hoch der vorherigen Kerze - Trailing Stop Abstand >= aktuellem SL ist, dann weiter hochziehen.
//OrdersTotal() == 1: Nur, wenn eine LongOrder2 vorhanden ist! Musste komischerweise nochmal hinzugefügt werden, OrderSelect-Funktion oben reicht nicht aus.
//iHigh(NULL,0,1) > norm_OSL + TS_Long_Punkte: Nur dann weiter hochziehen, wenn die Kerze wirklich höher ist als alle vorangegangenen Kerzen. Notwendig, falls 2 Mal ein gleiches Hoch vorhanden ist.
bool TS_Long = OrderModify(OrderTicket(), OrderOpenPrice(), iHigh(NULL,0,1) - TS_Long_Punkte, OrderTakeProfit(), 0);
}
}
Wie vorher beschrieben, funktioniert der Trailing Stop eigentlich perfekt, eben nur ein einziges Mal nicht. Warum nicht, das weiß ich nicht. Beinhaltet der Code einen Fehler?
Lieben Gruß,
Michael