Stop wird nicht richtig berechnet

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #264679 quote
    axmichi
    Participant
    Senior

    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)
    





    LL-SL.png LL-SL.png
    #264680 quote
    Nicolas
    Keymaster
    Legend

    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…

    #264683 quote
    axmichi
    Participant
    Senior

    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??


    #264685 quote
    Nicolas
    Keymaster
    Legend

    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.

    Iván González thanked this post
    0UkG60pamF.png 0UkG60pamF.png
    #264687 quote
    JS
    Participant
    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

    #264688 quote
    axmichi
    Participant
    Senior

    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..

    #264689 quote
    axmichi
    Participant
    Senior

    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?


    #264690 quote
    JS
    Participant
    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…

    Iván González thanked this post
    #264701 quote
    axmichi
    Participant
    Senior

    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…

    #264704 quote
    JS
    Participant
    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
    


    Scherm­afbeelding-2026-08-27-om-11.57.11.png Scherm­afbeelding-2026-08-27-om-11.57.11.png
Viewing 10 posts - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.

Stop wird nicht richtig berechnet


ProOrder: Automatischer Handel & Backtesting

New Reply
Author
author-avatar
axmichi @axmichi Participant
Summary

This topic contains 9 replies,
has 3 voices, and was last updated by JS
6 hours, 33 minutes ago.

Topic Details
Forum: ProOrder: Automatischer Handel & Backtesting
Language: German
Started: 08/26/2026
Status: Active
Attachments: 3 files
Logo Logo
Loading...