Konfiguracja mówiła starting_capital: 100000, a oś y wykresu mówiła USD. Każde wypełnienie w logu było liczbą USDC. Przez jedenaście miesięcy tego przebiegu te dwa fakty żyły w tej samej komórce i nikt nie miał powodu, żeby je rozdzielić.
Potem upadł Silicon Valley Bank, Circle ogłosił, że $3.3 miliarda rezerw USDC utknęło tam, a USDC handlował po 87 centów. Nasz „dolarowy” book poszedł w górę. BTC wyceniany w USDC wystrzelił. Perp wydrukował zieleń. Gotówka, którą traktowaliśmy jako wolne od ryzyka 100,000, była tym, co się ruszyło.
Wciąż łapię pipeline'y badawcze, które oznaczają USDC, USDT i USD jako jedną kolumnę. To ten weekend, rozłożony w kolejności, w jakiej widziała go księga.
Linia, która mówiła $100,000
Konto papierowe, perpetual BTC z marżą w USDC, skromny long. 30,000 USDC nominału BTC, około 1.5 BTC przy piątkowym marku w okolicach $20,150. Pozostałe 70,000 leżało jako zabezpieczenie USDC. Niedoinwestowane celowo. Rozgrzewaliśmy strategię. Reszta stosu siedziała w gotówce.
Funkcja NAV robiła to, co robi większość z nich. Dodawała gotówkę USDC do niezrealizowanego pnl w USDC i zapisywała sumę do serii o nazwie equity_usd. W konfiguracji był komentarz, który sam napisałem:
stablecoins = 1 dolar. nie licz FX podwójnie.
Chodziło mi o to: nie zamieniaj płatności funding w USDT w drugi ruch dolara, przeliczając ją dwa razy. To, co faktycznie zrobiłem, to zamrożenie kursu FX na 1.0 na resztę pliku.
quote_asset = "USDC"
Giełda była giełdą USDC. Wypełnienia, marża, funding, marki likwidacyjne, wielkość lota, min notional, wszystko. Hyperliquid, dYdX v3, Coinbase International, tuzin innych, ten sam kształt. Notebook badawczy importował świecę BTCUSDC i świecę BTCUSD, pierwszej używał do handlu, a drugą oznaczał na wykresie, bo wykres wyglądał bardziej profesjonalnie w dolarach.
A to jest ta mała, głupia rzecz, o której wciąż myślę o dziwnych porach: domyślny tytuł osi w bibliotece wykresów to „USD”. Nigdy go nie nadpisałem. Ludzie przechodzili obok ekranu i czytali jednostkę, której seria nie miała.
Piątkowa noc, tweet Circle
10 marca 2023. SVB już nie ma. Circle ujawnia, że $3.3 miliarda z ówczesnych ~$40 miliardów rezerwy USDC siedziało w upadłym banku, około 8%. Coinbase wstrzymuje konwersje USDC tej samej nocy. Wykup, właściwy mechanizm pegu, jest zamknięty na weekend.
Backtest nie miał wiersza na nic z tego. Żadnej flagi wstrzymania wykupu, żadnego pola rezerwy emitenta, żadnego „czy dostanę dolary za ten token przed poniedziałkiem”. Miał close. Piątkowy close w naszym pliku FX nadal wynosił 1.0000, bo plik FX był stubem, który zwracał 1.0 dla wszystkiego, czego ticker zaczynał się od USD.
Kiedyś traktowałem premię USDT jako podręcznikowy szum, coś, o czym wspomina się w przypisie i potem ignoruje. Raz spędziliśmy dwadzieścia minut w kuchni, kłócąc się, czy 1.03 jest „warte zaksięgowania”. Obaj uprawialiśmy publicystykę. Para to seria. Zapisz ją. Przestań nad nią głosować.
0.8789
Sobotni poranek. Dołek USDC na CoinGecko to $0.8789. Inne taśmy drukują $0.87. Kilka pul DEX przechodzi przez $0.80. DAI, napchany USDC jako zabezpieczeniem, jedzie za nim w dół. USDT idzie w drugą stronę, $1.03 na niektórych ekranach, $1.06 na Kraken.
Stub pliku FX nadal zwraca 1.0. Zegar backtestu wie, że jest sobota. Nie wie, że jednostką księgi jest teraz zagrożony token.
Print na Kraken po 26,000
Bitstamp BTC/USD krąży wokół $20,200. Kraken BTC/USDC drukuje powyżej $26,000. To ten sam bitcoin. Druga liczba to cena dolarowa podzielona przez złamany peg, plus powietrze, które cienki book USDC dokłada w sobotę.
Nasza giełda wyceniała perpetual w USDC. Weźmy konserwatywną taśmę, BTC/USDC po ~$23,000, czyli $20,200 / 0.88. Long 1.5 BTC jest do góry o około 4,300 USDC. Konto w jednostkach natywnych: 104,300 USDC. Silnik raportuje $104,300, weekend na plus 4.3%, a płatność funding spada na to w tej samej jednostce.
W dolarach 70,000 USDC bezczynnego zabezpieczenia jest warte około $61,600. Całe 104,300 USDC jest warte około $91,800. Book, który „zarobił” 4.3%, stracił 8% kapitału dolarowego, podczas gdy w większości siedział w gotówce.
Weekendowy zwrot był zmianą jednostki, nie zmianą fortuny. Pozycja long BTC/USDC w dniu spadku USDC jest mechanicznie longiem na depeg. Możesz chcieć tego zakładu. Nie możesz go odkryć po fakcie w serii oznaczonej USD.
cash_usd = cash_usdc * 1.0
Tę linię zachowuję. Odpalana była na każdym barze, w tym na barach, gdzie USDCUSD wynosił 0.87. Mnożenie przez 1.0 wygląda jak no-op, dlatego przechodzi code review. To jest wycena FX. Zamrożona.
70,000 USDC zabezpieczenia nigdy nie wywołało transakcji, więc żaden model poślizgu nigdy na nie nie spojrzał, żadna tabela opłat, żaden funding. Gotówka ma być nudną kolumną. Na tym booku była największym ryzykiem i jedynym, którego nie wycenialiśmy.
Rabat maker na wypełnieniach BTC w tamten weekend wynosił 2 lub 3 bps, jeśli w ogóle Cię wypełniono. Ruch waluty kwotowania wynosił 1,300 bps. Mamy cały stos na 3 i stub na 1,300.
Zielony weekend na wykresie
Poniedziałkowy poranek na Slacku, zanim ktokolwiek otworzył USDCUSD: wydrukowaliśmy 4% przez noc. Ktoś zapytał, czy nie skalować rozmiaru konta papierowego. Spojrzałem na wykres, potem na Kraken, potem na stub.
| Pozycja księgi | Co zapisał silnik | Sobota, natywnie | Ta sama chwila, w dolarach |
|---|---|---|---|
| Bezczynne zabezpieczenie | 70,000 USDC × 1.00 | 70,000 USDC | ~$61,600 |
| Mark perpetual BTC | BTCUSDC last | ~23,000 USDC (26,000 na Kraken) | BTCUSD ~$20,200 |
| Niezrealizowany na 1.5 BTC | +4,300 USDC | +4,300 USDC | głównie peg, trochę bitcoina |
| Raportowane NAV | 104,300 „USD” | 104,300 USDC | ~$91,800 |
Booki USDT miały odwrotną karykaturę. USDT handlował z premią, więc płaskie konto z marżą w USDT pokazywało dolarowy zysk, którego też nie zarobiło, i mark BTCUSDT zbyt niski względem BTCUSD. Jeśli rankowałeś dwa „identyczne” perpetual BTC w tamten weekend, jeden na giełdzie USDC i jeden na giełdzie USDT, rankowałeś tokeny kwotowania i nazywałeś to alphą.
Konto papierowe, to które faktycznie trzymało USDC, było bliżej prawdy niż dashboard badawczy. Nigdy nie twierdziło, że jest dolarami. To my zrobiliśmy to w eksporcie.
Eksport, który wysłaliśmy w poniedziałek
USDC wypełzł z powrotem w stronę $1, gdy Treasury, Fed i FDIC powiedziały, że deponenci SVB zostaną w pełni zaspokojeni, a Circle ogłosił, że pokryje niedobór. Do poniedziałku peg był w większości załatany. Stub pliku FX, który przez 48 godzin był zły, znów był dobry.
Ale dzienne bary to ukryły. Próbka 00:00 UTC z 11 marca złapała USDC już zjechane albo już odbijające, zależnie od vendora, a próbka z 12 marca była innym filmem. Jeśli przechowywałeś tylko NAV, a nie mark kwotowania, nie dało się odtworzyć, które. Brzydki weekend spłaszczył się do błędu na tyle małego, by go zignorować, co zrobiliśmy, bo samplowaliśmy dziennie.
To, co teraz trzymamy na booku, to trzy serie, zawsze, nawet gdy przez miesiące leżą jedna na drugiej:
- NAV w walucie kwotowania giełdy, jednostce, którą naprawdę możesz wypłacić.
- Waluta kwotowania versus USD, prawdziwa taśma, w tym sobota, w tym 0.87, w tym godziny, gdy Coinbase nie konwertował.
- NAV w dolarach, jako seria pochodna, żeby etykieta wykresu USD miała rodzica.
Jeśli agent pisze backtest, sprawdzenie jest to samo. Zapytaj go o walutę kwotowania każdej pozycji i gotówki. Jeśli odpowiada USD na giełdzie USDC, przebieg nie jest przebiegiem dolarowym. Marzec 2023 to tydzień, który odtwarzam, gdy ktoś mówi mi, że to rozróżnienie nie rusza Sharpe'a. Ruszyło ten o więcej niż strategia, a strategia była tą częścią, na którą mieliśmy modele.
← Wszystkie wpisy


