Einzelnen Beitrag anzeigen
  #9 (permalink)  
Alt 22.06.20
Michael_ Michael_ ist offline
Mitglied
 
Registriert seit: Jun 2020
Beiträge: 41
Michael_ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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