Files
trade-frontend/doc/drift-costs.md
2026-02-01 21:44:45 +01:00

6.2 KiB
Raw Permalink Blame History

Drift Perp: koszty wejścia/edycji/wyjścia (stan na 2026-01-31)

Ten dokument zbiera wszystkie realne składowe kosztu przy handlu perps na Drift, żebyśmy mogli je liczyć na backendzie i wizualizować w UI.

1) Składowe kosztu (per trade / per pozycja)

A. Opłata transakcyjna Drift (maker/taker)

  • Taker fee: procent od notional (wartości pozycji w USD/USDC).
  • Maker fee: zwykle ujemny (rebate) dla zleceń maker (np. post-only), zgodnie z aktualnym cennikiem.
  • Stawki zależą od wolumenu 30D oraz stakingu DRIFT (dodatkowe zniżki / większe rebate).
  • W High Leverage Mode taker fee może być podbite (np. 2× najniższy tier).

TODO: potwierdzić aktualne stawki fee (z Drift SDK / on-chain) i zapisać je jako “source of truth” dla backendu.

Wzór (pojedynczy fill):

  • notional = |size_base| * fill_price
  • trade_fee_usd = notional * fee_rate (dla maker fee_rate może być < 0)

B. Slippage / spread (koszt rynkowy)

To nie jest fee protokołu, ale realny koszt wejścia/wyjścia:

  • slippage_cost_usd ≈ (fill_price - mid_price) * size_base (znak zależy od long/short)
  • U nas to powinno być liczone z DLOB (L2 + symulacja fill).

C. Funding (koszt/zarobek w czasie trzymania pozycji)

  • Funding jest naliczany w czasie i realizowany przy akcjach użytkownika (trade/deposit/withdraw) w praktyce dla krótkich holdingów (minuty1h) zwykle jest małym składnikiem, ale nie zawsze zerowym.

Wzór (upraszczając):

  • funding_usd ≈ Σ (position_notional_usd * funding_rate_interval)

D. P&L settlement / “unsettled P&L” (wpływ na withdraw)

  • Żeby wypłacić zysk, czasem trzeba wykonać settlePNL (rozlicza P&L do P&L Pool; nie zamyka pozycji, tylko zmienia cost basis).
  • Jeśli brakuje środków w per-market P&L Pool, zysk może być częściowo unsettled i nie będzie w pełni wypłacalny od razu.

E. Liquidation penalty (jeśli konto spadnie poniżej maintenance)

  • Przy wejściu w liquidację protokół najpierw anuluje otwarte ordery/LP, a następnie liquidator może redukować pozycje.
  • “Penalty/fee” jest ustawiana per-market i zwykle jest wyższa niż zwykły taker fee (żeby dać rebate liquidatorowi).

F. Koszt sieci Solana (per instrukcja / per tx)

To koszt “infrastrukturalny” każdej akcji on-chain (order, cancel, modify, settlePNL, deposit/withdraw, close).

  • Base fee: 5000 lamports per signature (minimum).
  • Priority fee: opcjonalny, zależy od congestion.
  • Jednorazowo może dojść rent/account creation (np. token account), jeśli czegoś brakuje.

2) “Ile kosztuje” konkretna akcja (checklista)

Wejście w pozycję (open / increase)

  1. Solana tx fee (base + ewentualnie priority)
  2. Drift trading fee (maker/taker) od notional
  3. Slippage/spread (z DLOB)
  4. (w tle) funding zaczyna naliczać się w czasie

Zmiana pozycji (increase/decrease/flip)

To po prostu kolejny trade:

  • znowu tx fee + trading fee + slippage
  • oraz często realizacja funding (zależy od tego czy funding został zaktualizowany)

Wyjście z pozycji (close)

  1. tx fee
  2. trading fee (druga strona round-trip)
  3. slippage
  4. realized PnL = różnica cen ± funding fees
  5. jeśli chcesz wypłacić: możliwe settlePNL oraz limit z P&L pool

Edycja zlecenia (modify)

Zwykle koszt to:

  • tx fee (czasem modify = cancel+place, zależnie od ścieżki w kliencie)
  • brak trading fee, jeśli nie było fill

Cancel zlecenia

  • tx fee
  • brak trading fee (jeśli 0 fill)

Monitorowanie zysku / risk (PnL, margin, health)

On-chain: bez kosztu, jeśli tylko czytasz RPC/indexera. Koszt pojawia się dopiero przy akcjach typu trade/cancel/settle/withdraw.

3) Przykład liczbowy (taker, round-trip)

Załóż:

  • notional = 10,000 USDC
  • taker_fee_rate = 0.0350% (PRZYKŁAD realna stawka zależy od tieru)

Wtedy:

  • wejście: 10,000 * 0.00035 = 3.50 USDC
  • wyjście: 3.50 USDC
  • razem fee (bez slippage/funding): 7.00 USDC + 2× Solana tx fee (+ priority jeśli ustawisz).

4) Co musimy znać, żeby liczyć to “dokładnie” w backendzie

Minimalny zestaw wejść:

  • market (np. SOL-PERP)
  • order type (market/limit/post-only), przewidywany fill path (taker vs maker)
  • notional/size, przewidywany fill (DLOB simulation)
  • fee tier użytkownika + staking/discounty + ew. “fee adjusted markets”
  • funding history + horyzont (np. 1h/4h/24h/7d)
  • czy chcemy uwzględniać settlePNL oraz status “unsettled PnL” przed withdraw

5) Słownik (kluczowe pojęcia w UI/API)

Poniżej jest skrót pojęć, których używamy w warstwach “Costs (New)” i “Costs (Active)”:

  • notional — wartość pozycji w USD (np. 10 USD); na tym liczymy bps i fee.
  • bps (basis points) — punkty bazowe: 1 bps = 0.01% = 0.0001.
    Przeliczenie na koszt: koszt_usd ≈ notional_usd * bps / 10_000.
  • fee — opłata protokołu Drift (maker/taker) od notional; zwykle stała dla danego trybu/tieru.
  • tx fee — koszt transakcji na Solanie (base fee + ewentualny priority fee).
  • slippage — koszt rynkowy wejścia/wyjścia, bo wykonujesz się gorzej niż mid (zależy od płynności).
  • impact (bps) — slippage wyrażony w bps (dla danego notionalu).
  • spread — różnica best_ask - best_bid; “minimalny” koszt natychmiastowego wejścia/wyjścia w płytkim booku.
  • mid(best_bid + best_ask) / 2; punkt odniesienia ceny z orderbooka.
  • VWAP — średnia cena wykonania dla danego rozmiaru (symulacja fill po L2).
  • breakeven (bps) — minimalny ruch ceny (w bps), żeby koszty się zwróciły (wyjść na 0).
  • PnL (profit and loss) — zysk/strata:
    • unrealized PnL — “na papierze”, gdy pozycja jest otwarta (zależy od ceny teraz),
    • realized PnL — zrealizowany po zamknięciu (lub częściowym zamknięciu) pozycji,
    • net PnL — PnL po odjęciu kosztów (fee + tx + slippage + funding).
  • funding — okresowa płatność long↔short; koszt albo zysk zależny od rynku i czasu trzymania.
  • close now — estymata kosztu natychmiastowego zamknięcia pozycji (zwykle po przeciwnej stronie booka).
  • modify / reprice — koszt “zarządzania zleceniem” (cancel+place itp.), głównie tx fee (czasem wielokrotnie).