Zurück zur Startseite

DiffQuant: Sharpe-Optimierung in einem differenzierbaren Simulator

DiffQuant implementiert die direkte Optimierung des Sharpe-Ratios durch einen differenzierbaren Trading-Strategie-Simulator in PyTorch. Integriert Modell, Positionen, PnL und Kosten in einen einzigen Graphen. Auf BTC-Daten zeigt Sharpe +1.73 im Walk-Forward-Test nach Provisionen.

Direkte Sharpe-Optimierung ohne Proxy-Ziel in DiffQuant
Advertisement 728x90

DiffQuant: Differenzierbarer Handels-Simulator für direkte Sharpe-Optimierung

In der ML-basierten algorithmischen Handelswelt werden Modelle traditionell mit MSE oder Kreuzentropie auf Rendite- oder Preisrichtungsprognosen trainiert, während die Performance über den Sharpe-Ratio unter Berücksichtigung von Kosten bewertet wird. Das erzeugt einen Bruch: Genaue Mikrobewegungsprognosen garantieren keine Out-of-Sample-Rentabilität. DiffQuant eliminiert Proxy-Ziele, indem es einen einzigen differenzierbaren Graphen von Marktdaten bis zum finalen PnL und Sharpe aufbaut. Walk-Forward-Tests liefern einen Sharpe von +1,73 und +8,22 % Rendite nach Kommissionen.

Herausforderungen bei traditionellen Proxy-Zielen

Der Standard-Ablauf trennt Prognose von Handel:

  • Modell minimiert MSE auf return_{t+1}.
  • Positionsgröße per Heuristik.
  • Backtester wendet Kommissionen nachträglich an.

Das führt zu:

Google AdInline article slot
  • Fehlende Übereinstimmung der Fehler-Räume: Genauigkeit bei verrauschten Schwankungen verursacht Überhandeln und Verluste durch Kosten.
  • Kein Gradient für Positionsgröße: Modell lernt keine Einstiegsaggressivität.
  • Ignorieren von Kosten im Training: Slippage und Kommissionen liegen außerhalb des Rechungsgraphen.

DiffQuant integriert Positionsgröße, PnL-Simulation und Metriken in einen PyTorch-Graphen und leitet Gradienten end-to-end weiter.

Differenzierbarer Handels-Simulator

Der Simulator berechnet PnL als Tensor-Operationen über den Horizont t ∈ [0, H-1]:

$$r_t = \frac{c_t - c_{t-1}}{|c_{t-1}| + \varepsilon}$$

Google AdInline article slot

$$gross_t = p_{t-1} \cdot r_t$$

$$cost_t = smooth\_abs(\Delta p_t) \cdot (commission + slippage)$$

$$pnl_t = gross_t - cost_t$$

Google AdInline article slot

Schlüsselinnovation – smooth_abs für Differenzierbarkeit:

$$smooth\_abs(x) = \sqrt{x^2 + \varepsilon}, \quad \varepsilon = 10^{-6}$$

Das gewährleistet C^∞-Glatheit nahe Null, wo die Policy flach startet und Subgradienten-Unstetigkeiten vermeidet.

Gradienten von -Sharpe fließen durch PnL → Positionen → Modell und trainieren es, Kosten end-to-end zu berücksichtigen.

Policy-Architektur mit iTransformer

Rückgrat ist iTransformer (ICLR 2024): Ein invertiertes Transformer, bei dem Tokens Feature-Kanäle statt Zeit-Schritte sind. Für Finanzdaten erfasst das Querkanal-Abhängigkeiten (Preis-Volumen-Volatilität).

Konfig: d_model=32, n_layers=4, n_heads=2, d_ff=64 (52k Parameter).

Vollständiger Graph:

  • Z-Score-Normalisierung über Kontextfenster (B, ctx, F) ohne Look-Ahead.
  • iTransformerEncoder.
  • Concat Extras: [prev_pos, prev_delta, t/H, (H-t)/H].
  • PolicyHead: direction_head × gate_head.

Position: $$p_t = \tanh\left(\frac{d_t}{\tau_{dir}}\right) \times \sigma\left(\frac{g_t}{\tau_{gate}}\right)$$

Gate-Signal maskiert unsichere Richtungen (ähnlich Action-Masking). gate_bias=-1.0-Initialisierung stabilisiert flache Starts.

Rolling Rollout:

for t in range(H):
    window = full_seq[:, t : t + ctx, :]
    window_norm = normalize_context(window)
    extras = [prev_pos, prev_delta, t/H, (H-t)/H]
    pos_t = model(window_norm, extras)
    positions_list.append(pos_t)
positions = cat(positions_list)
step_pnl = simulator.simulate(closes, positions)
loss = hybrid_loss(step_pnl, positions)
loss.backward()

Hybride Loss-Funktion gegen Pathologien

Reiner Sharpe führt zu Churning, flachem Kollaps, Long-Bias, Terminal-Exposure, Drawdown-Blindheit. Hybrid behebt das:

$$\mathcal{L} = \lambda_1 \cdot (-Sharpe) + \lambda_2 \cdot turnover + \lambda_3 \cdot drawdown_{log} + \lambda_4 \cdot |p_H| + \lambda_5 \cdot (\hat{f} - f^*)^2 + \lambda_6 \cdot |\bar{p}|$$

  • λ₂: Turnover-Strafe gegen Churning.
  • λ₃: Log-Drawdown für Stabilität.
  • λ₄: Null-Exposure am Horizontende.
  • λ₅: Ziel-Flachanteil via Sigmoid.
  • λ₆: Anti-Bias, entscheidend in Bullenmärkten.

$$drawdown_{log} = mean(cummax(cumsum(log(1+pnl))) - cumsum(log(1+pnl)))$$

Mirror-Augmentation für Symmetrie

Trainingsdaten (2024–2025) sind bullischer BTC. Ohne Eingriff wird das Modell long-only. Mirror-Augmentation flippt Preise und Features in Batch-Subsets und erzeugt symmetrische Paare.

Ergebnis: short_fraction 17,3 % (Test), 20,9 % (Backtest).

Experimente: Daten und Splits

| Parameter | Wert |

|-----------|------|

| Instrument | BTCUSDT Binance Futures |

| Auflösung | 30-Min-Bars (aggregiert aus 1-Min) |

| Periode | 2021–2025 |

Splits:

  • Train: Jan 2024 – Mrz 2025.
  • Test: Jul–Sep 2025.
  • Backtest: Okt–Dez 2025.
  • Walk-Forward OOS.

Wichtige Erkenntnisse

  • Einziger differenzierbarer Graph von Features zu Sharpe löst Proxy-Probleme inkl. Kosten und Positionsgröße.
  • iTransformer + direction×gate ermöglicht Querkanal-Attention und selbstbewussten Handel.
  • Hybride Loss mit Anti-Bias verhindert Pathologien wie Churning und Long-Only.
  • Mirror-Augmentation liefert symmetrische Policy auf asymmetrischen Daten.
  • Walk-Forward-Sharpe +1,73 nach Kommissionen auf BTC OOS.

— Editorial Team

Advertisement 728x90

Weiterlesen