Antwort

SL und PT mit atr für MultiCharts

2 Antworten

eastpeace

Kunde, bbp_participant, community, sq-ultimate, 305 Antworten.

Profil besuchen

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.

0

tomas262

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

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

0

eastpeace

Kunde, bbp_participant, community, sq-ultimate, 305 Antworten.

Profil besuchen

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;

 

 

Anhänge:
Sie müssen sein eingeloggt um angehängte Dateien anzuzeigen.

0

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)