Powrót do strony głównej

DiffQuant: optymalizacja Sharpa w różniczkowalnym symulatorze

DiffQuant realizuje bezpośrednią optymalizację współczynnika Sharpa przez różniczkowalny symulator strategii handlowych w PyTorch. Integruje model, pozycje, PnL i koszty w jeden graf. Na danych BTC pokazuje Sharpe +1.73 w teście walk-forward po prowizjach.

Bezpośrednia optymalizacja Sharpa bez proxy-celu w DiffQuant
Advertisement 728x90

Dyferencjalny Symulator do Bezpośredniej Optymalizacji Współczynnika Sharpe'a w Handlu Algorytmicznym

W handlu algorytmicznym opartym na ML tradycyjnie modele uczą się przewidywać zwrot lub kierunek ceny za pomocą MSE lub entropii krzyżowej, a ocena odbywa się według wskaźnika Sharpe'a z uwzględnieniem kosztów. To tworzy lukę: dokładne prognozy mikro-ruchy nie gwarantują opłacalności strategii poza próbką. DiffQuant eliminuje proxy-cele, budując jednolity dyferencjalny graf od cech rynkowych do końcowego PnL i Sharpe'a. Test walk-forward pokazuje Sharpe +1.73 i zwrot +8.22% po prowizjach.

Problemy Klasycznego Schematu z Proxy-Celami

Standardowy potok dzieli przewidywanie i handel:

  • Model minimalizuje MSE na return_{t+1}.
  • Pozycja jest formowana heurystykami.
  • Backtest stosuje prowizje post factum.

To prowadzi do:

Google AdInline article slot
  • Niezgodności przestrzeni błędów: dokładność na szumowych fluktuacjach prowokuje hiperaktywność i spalanie na kosztach.
  • Brak gradientu po rozmiarze pozycji: model nie uczy się agresywności wejścia.
  • Ignorowanie kosztów w uczeniu: poślizgi i prowizje poza grafem obliczeń.

DiffQuant integruje pozycję, symulację PnL i metryki w PyTorch-graf, przepuszczając gradient bezpośrednio.

Dyferencjalny Symulator Handlowy

Symulator oblicza PnL jako operacje tensorowe dla horyzontu 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

Kluczowy moment — smooth_abs dla dyferencjalności:

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

To zapewnia C^∞-gładkość w otoczeniu zera, gdzie polityka zaczyna w trybie płaskim, unikając subgradientowych przerw.

Gradient od -Sharpe przechodzi przez PnL → pozycje → model, ucząc uwzględniać koszty end-to-end.

Architektura Polityki na iTransformer

Bazą jest iTransformer (ICLR 2024): odwrócony transformator, gdzie tokeny to kanały cech, nie kroki czasowe. Dla danych finansowych to przechwytuje zależności międzykanalowe (cena-wolumen-zmienność).

Konfiguracja: d_model=32, n_layers=4, n_heads=2, d_ff=64 (52k parametrów).

Pełny graf:

  • Normalizacja z-score po oknie kontekstowym (B, ctx, F) bez look-ahead.
  • iTransformerEncoder.
  • Konkatenacja extras: [prev_pos, prev_delta, t/H, (H-t)/H].
  • PolicyHead: direction_head × gate_head.

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

Sygnał bramki maskuje niepewne kierunki (analog action masking). Inicjalizacja gate_bias=-1.0 stabilizuje start w near-flat.

Przewijający 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()

Hybrydowy Loss Przeciw Patologiom

Czysty Sharpe prowadzi do churning, flat collapse, long bias, terminal exposure, drawdown blindness. Hybrydowy adresuje je:

$$\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}|$$

  • $\lambda_2$: kara za obrót przeciw churning.
  • $\lambda_3$: log-spadek dla stabilności.
  • $\lambda_4$: zerowa ekspozycja na końcu horyzontu.
  • $\lambda_5$: celowa część flat przez sigmoid.
  • $\lambda_6$: anty-bias, krytyczny na byczych danych.

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

Mirror Augmentation dla Symetrii

Train (2024–2025) — byczy BTC. Bez środków model → long-only. Mirror augmentation odwraca ceny i cechy na części batchy, tworząc symetryczne pary.

Wynik: short_fraction 17.3% (test), 20.9% (backtest).

Eksperyment: Dane i Splity

| Parametr | Wartość |

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

| Instrument | BTCUSDT Binance Futures |

| Rozdzielczość | 30-min bary (agregacja z 1-min) |

| Okres | 2021–2025 |

Splity:

  • Train: styczeń 2024 – marzec 2025.
  • Test: lipiec–wrzesień 2025.
  • Backtest: październik–grudzień 2025.
  • Walk-forward OOS.

Co Ważne

  • Jednolity dyferencjalny graf od cech do Sharpe'a rozwiązuje problemy proxy-celi, w tym koszty i rozmiar pozycji.
  • iTransformer + direction×gate zapewnia międzykanalną uwagę i pewny handel.
  • Hybrydowy loss z anty-bias zapobiega patologiom jak churning i long-only.
  • Mirror augmentation daje symetryczną politykę na asymetrycznych danych.
  • Walk-forward Sharpe +1.73 po prowizjach na BTC OOS.

— Editorial Team

Advertisement 728x90

Czytaj dalej