SL und PT mit atr für MultiCharts
2 Antworten
eastpeace
vor 4 Jahren #254805
Hallo, Mark,
Obwohl dieses Problem mit behobenem Status geschlossen wurde. Ich möchte den SL und PT mit ATR für Multicharts erneut diskutieren.
https://roadmap.strategyquant.com/tasks/sq4_5100
Der Code von MC sieht jetzt so aus.
———-
if(MarktPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = 0;
IntLongTS = 0;
Ende;
// StopLoss
IntLongSL = Round2Fraction(EntryPrice - (StopLossCoef * SQ_ATR(20)[1]));
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
….
————-
Im aktuellen Code ändert sich der ATR-Wert mit jedem Bar nach dem Einstieg. SL, PT und RR Ratio ändern sich ebenfalls, obwohl diese Änderung nicht allzu groß ist. Aber es ist auch schädlich.
Unter der Annahme, dass er eine Long-Position hält, wird der Stop-Loss bei abnehmender Volatilität und einem langsamen Rückgang des Marktes ausgeweitet.
Die meisten Strategien in MC laufen nach Balken und aktualisieren die Signale und Aktionen, nachdem der Balken geschlossen wurde. Wenn also der Stop-Entry-Auftrag ausgelöst wird, verwendet er den vorherigen ATR-Wert (Signal-Bar), nicht den aktuellen Bar (Entry-Bar).
Es ist also kein Problem für die MM-Berechnung. Es kann und sollte den festen ATR-Wert verwenden. Im Code von Mc sieht es so aus,
if(MarktPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = Einstiegspreis - AtrSLmulti * ATR-Wert[1] ;
IntLongPT = Einstiegspreis + AtrPTmulti * ATR-Wert[1] ;
Ende;
Dies stimmt vollständig mit dem ATR-Wert überein, der von der MM-Berechnung verwendet wird, wenn die Einstiegsbedingung erfüllt ist.
Das hat nichts mit globalen Variablen zu tun. Es funktioniert gut in MC. Und ich finde, dass Code von anderer Software generiert, es auch die SL in der if-Code-Block (BarsSinceEntry = 0) gesetzt
Bitte überdenken Sie diesen Ansatz noch einmal, danke.
tomas262
vor 4 Jahren #254893
Hallo,
Derzeit muss es so sein, wie es ist. Das heißt, der SL muss entsprechend dem ATR-Wert geändert werden. In Zukunft könnten wir dies ändern, aber jetzt in Bezug auf, wie TS funktioniert wir lieber halten es auf diese Weise arbeiten
eastpeace
vor 4 Jahren #254939
Ein weiterer Grund für die Notwendigkeit, die Umsetzung des anfänglichen Stop-Loss und Gewinns anzupassen.
Die Strategie verwendet Indikatorstufen als Stop-Loss. Der anfängliche Stop-Loss würde zu einem Trailing-Stop-Loss oder der Indikatorbedingung für den Ausstieg werden.
Dadurch wird die Wirkung der Ausstiegsregeln (Indikatorbedingung für den Ausstieg) oder der Trailing-Stop-Methode abgeschwächt oder es kommt zu logischer Verwirrung.
//--------
// Orders Exits (SL, PT, Trailing) für Regel: Long-Eintrag
//--------
if(MarktPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
IntLongSL = 0;
IntLongTS = 0;
Ende;
// StopLoss
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
Sell("LongSL") nächster Takt zum IntLongSL-Stop;
LongSLPlaced = true;
...
Wie in der Abbildung zu sehen ist, sollte der mittlere Stop-Loss nicht eintreten, wenn der anfängliche Stop-Loss nach der richtigen Logik abläuft.
Wenn ich die Codes in MC ändere. Die Strategie läuft logisch ab. Das Trailing-Stop-Modul wird die Rolle spielen, die es spielen sollte.
if(MarktPosition > 0) then begin
LongSLPlaced = false;
If BarsSinceEntry = 0 then begin
//IntLongSL = 0;
IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
IntLongTS = 0;
Ende;
// StopLoss
//IntLongSL = Round2Fraction(SQ_EMA(High, EMAPeriod2)[3]);
//IntLongSL = SQ_CorrectMinMaxSLPT(IntLongSL, MinimumSL, MaximumSL, true);
Sell("LongSL") nächster Takt zum IntLongSL-Stop;
LongSLPlaced = true;
…
Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)