Zpět na domů

DiffQuant: optimalizace Šarpea v diferencovatelném simulátoru

DiffQuant realizuje přímou optimalizaci koeficientu Šarpea prostřednictvím diferencovatelného simulátoru obchodních strategií v PyTorch. Integruje model, pozice, PnL a náklady do jediného grafu. Na datech BTC ukazuje Sharpe +1.73 v walk-forward testu po provizích.

Přímá optimalizace Šarpea bez proxy-cíle v DiffQuant
Advertisement 728x90

Diferencovatelný simulátor pro přímou optimalizaci Sharpeho poměru v algoritmickém obchodování

V algoritmickém obchodování založeném na ML se modely tradičně učí předpovídat výnos nebo směr ceny pomocí MSE nebo křížové entropie, a hodnocení probíhá podle Sharpeho poměru s ohledem na náklady. To vytváří mezeru: přesné předpovědi mikropohybů nezaručují ziskovost strategie v out-of-sample testech. DiffQuant odstraňuje proxy cíle tím, že vytváří jednotný diferencovatelný graf od tržních funkcí až po konečný PnL a Sharpe. Walk-forward test ukazuje Sharpe +1,73 a výnos +8,22 % po poplatcích.

Problémy klasického schématu s proxy cíli

Standardní postup odděluje předpověď a obchodování:

  • Model minimalizuje MSE na return_{t+1}.
  • Pozice se tvoří heuristikami.
  • Backtester aplikuje poplatky dodatečně.

To vede k:

Google AdInline article slot
  • Neshodě prostorů chyb: přesnost na šumových výkyvech vyvolává hyperaktivitu a ztráty na nákladech.
  • Absenci gradientu podle velikosti pozice: model se neučí agresivitě vstupů.
  • Ignorování nákladů při učení: slippage a komise jsou mimo výpočetní graf.

DiffQuant integruje pozici, simulaci PnL a metriky do PyTorch grafu, přímo propaguje gradienty.

Diferencovatelný obchodní simulátor

Simulátor počítá PnL jako tenzorové operace pro 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

Klíčový bod je smooth_abs pro diferencovatelnost:

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

To zajišťuje C^∞-hladkost v okolí nuly, kde politika začíná v plochém režimu, a vyhýbá se subgradientním přerušením.

Gradient od -Sharpe prochází přes PnL → pozice → model, učí zohledňovat náklady end-to-end.

Architektura politiky na iTransformer

Základ je iTransformer (ICLR 2024): invertovaný transformér, kde tokeny jsou kanály funkcí, ne časové kroky. Pro finanční data to zachycuje závislosti mezi kanály (cena-objem-volatilita).

Konfigurace: d_model=32, n_layers=4, n_heads=2, d_ff=64 (52k parametrů).

Úplný graf:

  • Normalizace z-score podle kontextového okna (B, ctx, F) bez look-ahead.
  • iTransformerEncoder.
  • Konkatenace extras: [prev_pos, prev_delta, t/H, (H-t)/H].
  • PolicyHead: direction_head × gate_head.

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

Gate signál maskuje nejisté směry (obdoba action maskingu). Inicializace gate_bias=-1,0 stabilizuje začátek v near-flat.

Posuvný 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()

Hybridní loss proti patologiím

Čistý Sharpe vede k churning, plochému kolapsu, long biasu, terminální expozici a slepotě vůči propadům. Hybridní loss to řeší:

$$\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$: pokuta za obrat proti churning.
  • $\lambda_3$: log-propad pro odolnost.
  • $\lambda_4$: nulová expozice na konci horizontu.
  • $\lambda_5$: cílová plochá část přes sigmoidu.
  • $\lambda_6$: anti-bias, klíčové na býčích datech.

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

Mirror augmentace pro symetrii

Trénink (2024–2025) — býčí BTC. Bez opatření model → long-only. Mirror augmentace invertuje ceny a funkce na části dávek, vytváří symetrické páry.

Výsledek: short_fraction 17,3 % (test), 20,9 % (backtest).

Experiment: data a rozdělení

| Parametr | Hodnota |

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

| Nástroj | BTCUSDT Binance Futures |

| Rozlišení | 30min svíčky (agregace z 1min) |

| Období | 2021–2025 |

Rozdělení:

  • Trénink: leden 2024 – březen 2025.
  • Test: červenec–září 2025.
  • Backtest: říjen–prosinec 2025.
  • Walk-forward OOS.

Co je důležité

  • Jednotný diferencovatelný graf od funkcí k Sharpe řeší problémy proxy cílů, včetně nákladů a velikosti pozice.
  • iTransformer + direction×gate poskytuje mezikanálovou pozornost a jisté obchodování.
  • Hybridní loss s anti-bias předchází patologiím jako churning a long-only.
  • Mirror augmentace dává symetrickou politiku na asymetrických datech.
  • Walk-forward Sharpe +1,73 po poplatcích na BTC OOS.

— Editorial Team

Advertisement 728x90

Číst dál