system mit mit KO Derivaten nachbilden

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

    Hallo,

    ich handle die Systeme die ich in Prorelatime gebacktestet habe nun mit Ko Zertifikaten nach… Knockout Zertifikate.

    Jetz  habe ich das Problem, dass ich ja im Code genau das nicht reinschreiben kann, denn ich kann ja nur schreiben 1 contrakt at Marktet oder die Anzahl berechnen lassen.

    Wenn mein Stopp Loss nun das tiefste LOW der letzten 200 Kerzen ist, dann würde ja bei einem  Trade mit einem Knockout produkt genau da die Konckout-Schwelle liegen. So wie der Trade beendet wird, verfällt das Zertifikat wertlos. Der Trade endet mit dem Totalverlust, der investierten Summe.

     

    Kann ich das  im Code irgendwie nachbilden, dass im Backtest der Abstand zwischen Tradeprice und Stop Loss 500 €  oder $ sind??

    Im Code selbst ist das kein Problem jedoch wenn ich das System im DAX Perf Index laufen lasse, würde wegen dem hohen Punktwert kein Trade eröffnet werden??

    Kann man das irgentwie im Code umrechnen, oder anders schreiben so dass das Ergebnis dem nachgehandelten signalen entspricht.

    Im Bild ist ein Trade im DAX Perf Index zu sehen, der wenn ich ein Contrakt at Market gekauft habe, mit 110 € im Gewinn gewesen wäre.

     

    Wenn man sich nun aber unterstellt, dass der Abstand von Tradeprice bis zum Stop Loss (hier die Orangene Linie unten, im code ls= lowest[200](low) ),  500 € gewesen wären, dann müsste der Gewinn im Trade wesentlich kleiner sein.

    Wie schon geschrieben, der hohe Punktwert lässt aber einen Trade mit nur 500 e Risiko nicht zu.

    Geht das zu codieren, das ich im Ergebnis sehen kann, was die Strategie gebracht hätte wenn ich je Trade im Dax Indes 500 ,€ riskiert hätte.

     

    Vielen Dank

    #250038 quote
    Iván González
    Moderator
    Master

    Entschuldigung. Ich glaube, das haben wir bereits in einem früheren Beitrag besprochen: https://www.prorealcode.com/topic/backtest-mit-anderem-moneymanagement/
    Wie ich dir damals schon gesagt habe, lässt sich diese Strategie im Backtester von ProRealTime nicht simulieren.
    Was du stattdessen tun kannst, ist, das Trading mit Knock-Out-Zertifikaten zu simulieren, basierend auf dem folgenden Code.
    Dieser aktualisiert das Eigenkapital in Echtzeit (Mark-to-Market) bei jeder Kerze: Solange die Position offen ist, wird der Floating-PnL zum Eigenkapital addiert. Wenn die KO-Schwelle (das Tief der letzten N Kerzen) erreicht wird, wird der Verlust genau auf das eingesetzte Kapital festgesetzt.

    Das Beispiel ist nur für Long-Positionen programmiert, aber du kannst es erweitern oder die Ein-/Ausstiegsbedingungen und Parameter nach Bedarf anpassen.

    // =====================================================
    // KO Simulator (Long Only) - Live Equity (mark-to-market)
    // - Risks 'capitalRisk' per trade with a fixed KO barrier
    // - KO triggers when low <= stopPx (LOWEST[lookback](low) at entry)
    // - Live equity updates on every bar (unrealized PnL while in trade)
    // =====================================================
    
    // ---------- Parameters ----------
    capitalRisk = 500        // € risked per trade (KO => total loss of this amount)
    lookback    = 200        // window to compute KO barrier (lowest low)
    slippagePts = 0          // slippage in underlying points (optional)
    maPeriod    = 50         // example entry logic: close crosses over SMA(maPeriod)
    startEquity = 10000      // starting simulated equity
    
    // ---------- Long-only signal (replace with your own) ----------
    ma = Average[maPeriod](close)
    goLong   = close CROSSES OVER ma     // entry
    exitLong = close CROSSES UNDER ma    // exit if no KO
    
    // ---------- Simulation state ----------
    ONCE inTrade       = 0
    ONCE entryPx       = 0.0
    ONCE stopPx        = 0.0              // fixed KO barrier set at entry
    ONCE qtyKO         = 0.0              // fractional "equivalent size" vs underlying
    ONCE equityReal    = startEquity      // realized equity (updated only on trade close)
    ONCE equityLive    = startEquity      // live equity (mark-to-market each bar)
    
    // ---------- KO barrier (fixed at entry) ----------
    barrierLong = LOWEST[lookback](low)
    
    // ---------- Entry (long only) ----------
    IF inTrade = 0 THEN
    IF goLong THEN
    entryPx  = close
    stopPx   = barrierLong
    distance = entryPx - stopPx
    IF distance > 0 THEN
    // Ensure KO hit => loss ≈ capitalRisk:
    // distance * qtyKO * (POINTVALUE/POINTSIZE) ≈ capitalRisk
    qtyKO   = capitalRisk / (distance * (POINTVALUE / POINTSIZE))
    inTrade = 1
    DRAWARROWUP(barindex, equityReal) COLOURED("green")
    ENDIF
    ENDIF
    ENDIF
    
    // ---------- In-trade management (mark-to-market) ----------
    IF inTrade = 1 THEN
    // 1) Check KO first (intra-bar barrier touch)
    hitKO = 0
    IF low <= stopPx THEN
    hitKO = 1
    exitPx = stopPx - slippagePts * POINTSIZE
    ENDIF
    
    // 2) If no KO, check discretionary exit
    IF hitKO = 0 AND exitLong THEN
    exitPx = close
    ENDIF
    
    // 3) Compute live equity (mark-to-market) BEFORE committing a close:
    //    - If KO happens on this bar, equityLive must jump to equityReal - capitalRisk.
    //    - Else, while trade is open, equityLive = equityReal + floatingPnL.
    IF hitKO = 1 THEN
    // KO: realized loss equals exactly capitalRisk
    equityLive = equityReal - capitalRisk
    ELSE
    // No KO yet: mark-to-market with current close
    floatingPnL = (close - entryPx) * qtyKO * (POINTVALUE / POINTSIZE)
    equityLive  = equityReal + floatingPnL
    ENDIF
    
    // 4) Execute exit if KO or signal exit, updating realized equity and resetting state
    IF hitKO = 1 OR exitLong THEN
    IF hitKO = 1 THEN
    pnl = -capitalRisk
    DRAWARROWDOWN(barindex, equityLive) COLOURED("red")
    ELSE
    pnl = (exitPx - entryPx) * qtyKO * (POINTVALUE / POINTSIZE)
    DRAWARROWDOWN(barindex, equityLive) COLOURED("blue")
    ENDIF
    
    equityReal = equityReal + pnl
    equityLive = equityReal
    
    // Reset state
    inTrade = 0
    qtyKO   = 0.0
    ENDIF
    
    ELSE
    // Not in trade: live equity equals realized equity
    equityLive = equityReal
    ENDIF
    
    // ---------- Output ----------
    RETURN equityLive AS "KO_Equity_Live"
    
    robertogozzi thanked this post
    #250053 quote
    axmichi
    Participant
    Senior

    WOw es kann sein, das ich das vergessen habe, Sorry

     

    Vielen Dank für den Code.

    Ich bin leider nicht so gut und kann kaum verstehen, was da im Code steht.

    Bei mir werden in Zeile 42 und 45 Fehler angezeigt??

    Verstehe ich das richtig, das das Einstiegssignal, die Kreuzung des average 50 ist?

    Danke Ihnen

    #250061 quote
    Iván González
    Moderator
    Master

    Der obige Code ist ein Indikator, der die Equity-Kurve simuliert. Sie sollten diesen Code nicht in das Backtesting-Modul eingeben.

Viewing 4 posts - 1 through 4 (of 4 total)
  • You must be logged in to reply to this topic.

system mit mit KO Derivaten nachbilden


ProOrder: Automatischer Handel & Backtesting

New Reply
Author
author-avatar
axmichi @axmichi Participant
Summary

This topic contains 3 replies,
has 2 voices, and was last updated by Iván González
5 months, 2 weeks ago.

Topic Details
Forum: ProOrder: Automatischer Handel & Backtesting
Language: German
Started: 08/22/2025
Status: Active
Attachments: 1 files
Logo Logo
Loading...