Hallo, in diesem Code soll der Take Profit berechnet werden, in dem die Distanz vom Entry-Preis zum LL x 2 genommen wird.
Leider greift der code für die Berechnung immer wieder auf das tiefere LLPrec zu, sodass der Take Profit zu weit weg ist, wie im Bild an der lilanen Linie erkennbar.
Der Trade müssste laut Code aber schon an der grünen Linie geschlossen werden.
Kann mir jemand sagen woran das liegt?
Vielen Dank!!
Hier ist der Code: Habe ich diesen richtig eingefügt??
// DEFPARAM und ONCE-Variablen
// defparam calculateonlastbars = 30000
ONCE HH = 0
ONCE HHprec = 0
ONCE LL = 0
ONCE LLprec = 0
// Initialisierung der neuen Stop-Variablen bei Systemstart
ONCE TrailActive = 0
ONCE Phase2Active = 0
ONCE DynStop = 0
// Reset der Stop-Variablen, wenn wir nicht im Markt sind
IF NOT OnMarket THEN
TrailActive = 0
Phase2Active = 0
DynStop = 0
// Ausstiegspreise zurücksetzen, wenn keine Position offen ist
TPPRICE = 0
SLPRICE = 0
ENDIF
cp = 3
IF TradePrice = 0 THEN
PositionSize1 = 1
ELSE
PositionSize1 = 1000 / sp // Compute PositionSize
ENDIF
ONCE lastpoint = 0
IF high[cp] >= highest[2*cp+1](high) THEN
PEAK = 1
ELSE
PEAK = 0
ENDIF
IF low[cp] <= lowest[2*cp+1](low) THEN
TROUGH = -1
ELSE
TROUGH = 0
ENDIF
IF PEAK = 1 THEN
TOPy = high[cp]
TOPx = barindex[cp]
ENDIF
IF TROUGH = -1 THEN
BOTy = low[cp]
BOTx = barindex[cp]
ENDIF
IF PEAK > 0 AND (lastpoint = -1 OR lastpoint = 0) THEN
lastpoint = 1
lastX = TOPx
lastY = TOPy
HHprec = HH
HH = TOPy
HHbar = TOPx
ENDIF
IF TROUGH < 0 AND (lastpoint = 1 OR lastpoint = 0) THEN
lastpoint = -1
lastX = BOTx
lastY = BOTy
LLprec = LL
LL = BOTy
LLbar = BOTx
ENDIF
// TREND ATTEMPT (Vergleich mit Vorperiode korrigiert)
atr = AverageTrueRange[14](close)
IF TOPy > TOPy[1] AND topy <> lasttop THEN
lasttop = topy
trendup = 1
ELSE
trendup = 0
ENDIF
sp = close - 0
// ==========================================
// LONG-EINSTIEG (BOMBENFESTE MUSTER-BERECHNUNG)
// ==========================================
IF NOT LongOnMarket AND Close CROSSES OVER HH AND (HH > 0) AND (LL > LLprec) AND (LLprec > 0) AND (HH > HHprec) AND (HH > LL) AND (HHprec > LLprec) THEN
BUY PositionSize1 Contract at Market
// MATHEMATISCHE ABSICHERUNG:
// Wir messen den Abstand direkt zwischen dem Ausbruchs-Level (HH) und dem echten Tief (LL).
// Dadurch kann ProRealTime die Variablen im Hintergrund verschieben wie es will - der Abstand bleibt exakt!
RiskDistance = abs(HH - LL)
TPPRICE = HH + (RiskDistance * 2)
// 50% Katastrophen-Stop basierend auf dem Ausbruchs-Level
SLPRICE = HH * 0.50
ENDIF
// ==========================================
// DAUERHAFTE AUSSTIEGSÜBERWACHUNG
// ==========================================
IF LongOnMarket THEN
SET STOP PRICE SLPRICE
SET TARGET PRICE TPPRICE
ENDIF
// Grafische Ausgaben im Chart zur Überprüfung
graphonprice LL COLOURED(255,0,0,255)
graphonprice TPPRICE COLOURED(255,0,200,255)
Ich habe Ihren Code noch nicht vollständig untersucht, aber mir ist aufgefallen, dass Sie Fraktale zur Positionsbestimmung verwenden; allerdings werden Fraktale in der Vergangenheit berechnet, sodass im gegenwärtigen Moment nicht das zuletzt bekannte Fraktal dasjenige ist, das später auf der Orderkerze angezeigt wird, sondern dasjenige, das gerade in der Vergangenheit gefunden wurde.
Zusammenfassend lässt sich also sagen: Betrachtet man ein historisches Diagramm, so entsprechen die Orders dem aktuellen Fraktal, welches nicht dem der aktuellen Kerze, sondern einem der letzten entspricht.
Ich weiß nicht, ob das der eigentliche Grund für dein Problem ist, aber meiner Meinung nach solltest du dort ansetzen…
Ok, aber in einem normalen Trendfolgesystem bestimmt man ja ein LL (LowerLow) und steigt dann z.B beim Takeprofit von 2:1 aus. Lässt sich das nicht codieren?? Was anderes ist doch dieser Code auch nicht??
Ich versuche, es verständlicher zu machen. Ihr Code ist KORREKT. Sie verwenden das letzte bekannte Swing-Tief für Ihren Stop-Loss und das Doppelte davon für Ihren Take-Profit.
Wenn Sie die Position einnehmen, ist das “LL” nicht das, das ich durchgestrichen habe, sondern das vorherige.
Dies geschieht NUR deshalb, weil Sie sich für die Verwendung von Fraktalen zur Platzierung Ihrer Stop-Loss-Orders entschieden haben, die eine Bestätigung durch X Kerzen erfordern, bevor sie platziert werden können.
Alternativ könnten Sie einen Donchian-Kanal mit einer definierten Periode verwenden und dessen Werte nutzen, um Ihren Stop-Loss zu platzieren und Ihren Take-Profit zu berechnen.
Das „Problem“ mit Fraktalen oder anderen Berechnungen, die Hoch- und Tiefpunkte korrekt erkennen, besteht darin, dass sie X Kerzen benötigen, um zu bestätigen, dass ein Tiefpunkt tatsächlich ein Tiefpunkt ist; in Echtzeit ist das unmöglich zu wissen! 😉
Ich hoffe, ich konnte Ihnen helfen.
JSParticipant
Master
Ich denke, du solltest berücksichtigen, dass Indikatoren und Backtest-Systeme nicht synchron laufen…
Ein Indikator kann sich bereits beim „Close“ einer Bar ändern, während im Backtest die Bedingung auf Basis des „Close“ dieser Bar berechnet wird und erst für die nächste Bar als wahr oder falsch gilt…
Dadurch entsteht bereits ein Unterschied von einer Bar…
Wenn du anschließend den Zeitpunkt der Positionseröffnung betrachtest, liegt dieser wiederum eine Bar später, da eine Position standardmäßig zum „Open“ der nächsten Bar eröffnet wird…
Vereinfacht dargestellt:
Indikator: Bedingung wird wahr → +1 Bar → Backtest: Bedingung wird wahr → +1 Bar → Eröffnung der Position
Ok, habe ich es so richtig verstanden, dass die Berechnung immer falsch ist, wenn der Trade gleich nach dem LL startet also früher als die 3 kerzen die es braucht um dass LL anzuzeigen
sie empfehlen daher den takeprofit mit dem donchian zu berechnen?
Können sie mir bitte schreiben wie diese berechnung im code aussehen würde..
Das heißt dann aber auch, das mit PRT genau genommen, ein verlässlicher Backtest eines klassichen Trendfolgesystem, bei dem dass letzte LL zur bestimmtung des TP herangezogen wird, nicht möglich ist?? Ist das richtig?
JSParticipant
Master
Es ist jedoch möglich…
Die Berechnung für den Backtest muss lediglich an diesen Unterschied angepasst werden…
Zum Beispiel:
IF PEAK = 1 THEN
TOPy = high[cp+1]
TOPx = barindex[cp+1]
ENDIF
IF TROUGH = -1 THEN
BOTy = low[cp+1]
BOTx = barindex[cp+1]
ENDIF
Damit wird die Berechnung um eine Bar verschoben, sodass die zeitliche Verschiebung zwischen dem Indikator und dem Backtest berücksichtigt wird…
Danke, jedoch nein, wenn ich diese Änderungen im code vornehme, dann stimmen warum auch immer die Stopabstände nicht mehr.
Man erkennt es an den Linien die druch graphonprice im chart gezeichnet werden…
JSParticipant
Master
Die verschiedenen Werte (BOTy, BOTx, Low[…]) stimmen in dieser grundlegenden Ausführung durchaus…
cp = 3
IF high[cp] >= highest[2*cp+1](high) THEN
PEAK = 1
ELSE
PEAK = 0
ENDIF
IF low[cp] <= lowest[2*cp+1](low) THEN
TROUGH = -1
ELSE
TROUGH = 0
ENDIF
IF PEAK = 1 THEN
TOPy = high[cp]
TOPx = barindex[cp]
ENDIF
IF TROUGH = -1 THEN
BOTy = low[cp]
BOTx = barindex[cp]
ENDIF
if not longonmarket and boty>0 then
buy at market
endif
graphonprice boty
graph low[barindex-botx-cp]
graph botx