2 november 2026 · forskning

Din backtests dollar var USDC. Den 11 mars handlades den till 87 cent.

Din backtests dollar var USDC. Den 11 mars handlades den till 87 cent.

Konfigurationen sa starting_capital: 100000, och diagrammets y-axel sa USD. Varje fill i loggen var ett USDC-tal. I elva månader av den körningen bodde de två fakta i samma cell och ingen hade anledning att skilja dem åt.

Sedan gick Silicon Valley Bank omkull, Circle sa att $3.3 miljarder av USDC-reserverna satt fast där, och USDC handlades till 87 cent. Vår "dollar"-bok gick upp. BTC prissatt i USDC rusade. Perpen printade grönt. Kassan vi hade behandlat som en riskfri 100,000 var det som rörde sig.

Jag ertappar fortfarande research-pipelines som markerar USDC, USDT och USD som en kolumn. Det här är den helgen, plockad isär i den ordning liggaren såg den.

Raden som sa $100,000

Papperskonto, USDC-margined BTC-perpetual, blygsam long. 30,000 USDC i BTC-notional, ungefär 1.5 BTC vid fredagens mark nära $20,150. De övriga 70,000 låg som USDC-säkerhet. Medvetet underallokerat. Vi höll på att värma upp en strategi. Resten av stacken låg i kassa.

NAV-funktionen gjorde vad de flesta av dem gör. Den adderade USDC-kassa till orealiserat USDC-pnl och skrev summan till en serie med namnet equity_usd. Det fanns en kommentar i konfigurationen som jag själv hade skrivit:

stablecoins = 1 dollar. dubbelräkna inte FX.

Jag hade menat: gör inte om en USDT-fundingbetalning till en andra dollarrörelse genom att konvertera den två gånger. Det jag faktiskt hade gjort var att frysa FX-kursen till 1.0 för resten av filen.

quote_asset = "USDC"

Venuen var en USDC-venue. Fills, marginal, funding, likvidationsmarkeringar, lot size, min notional, alltihop. Hyperliquid, dYdX v3, Coinbase International, ett dussin andra, samma form. Research-notebooken importerade ett BTCUSDC-candle och ett BTCUSD-candle, använde det första för trading och etiketterade det andra på plotten, för att plotten såg mer professionell ut i dollar.

Och det här är den lilla, dumma detaljen jag fortfarande tänker på vid udda timmar: plottbibliotekets standardtitel för axeln är "USD". Jag åsidosatte den aldrig. Folk gick förbi skärmen och läste en enhet som serien inte hade.

Fredagskväll, Circles tweet

10 mars 2023. SVB är redan borta. Circle avslöjar att $3.3 miljarder av dess då ~$40 miljarder USDC-reserv låg hos den fallerade banken, ungefär 8%. Coinbase stänger USDC-konverteringar samma natt. Inlösen, den faktiska peg-mekanismen, är stängd över helgen.

Backtesten hade ingen rad för något av detta. Ingen flagga för inlösenstopp, inget fält för emittentreserv, inget "kan jag få dollar för den här tokenen före måndag." Den hade en close. Closet på fredagen var fortfarande 1.0000 i vår FX-fil, eftersom FX-filen var en stubb som returnerade 1.0 för allt vars ticker började med USD.

Jag brukade behandla en USDT-premie som läroboksbrus, sånt man nämner i en fotnot och sedan struntar i. Vi tillbringade en gång tjugo minuter i ett kök med att gräla om huruvida 1.03 var "värt att bokföra." Vi höll båda på att tycka till. Paret är en serie. Lagra den. Sluta rösta om den.

0.8789

Lördag morgon. CoinGeckos lägsta på USDC är $0.8789. Andra tapes printar $0.87. Några DEX-pooler går genom $0.80. DAI, proppad med USDC som säkerhet, följer med ner. USDT går åt andra hållet, $1.03 på vissa skärmar, $1.06 på Kraken.

$0.87USDC-botten, 11 mar 2023
$26kBTC/USDC-print på Kraken
13%hål i kassa märkt till $1

Stubb-FX-filen returnerar fortfarande 1.0. Backtestens klocka vet att det är lördag. Den vet inte att bokens enhet nu är en nödställd token.

Kraken-printen på 26,000

Bitstamp BTC/USD cirklar kring $20,200. Kraken BTC/USDC printar över $26,000. Det är samma bitcoin. Det andra talet är ett dollarpris delat med en bruten peg, plus den luft en tunn USDC-bok lägger på en lördag.

Vår venue märkte perpetualen i USDC. Ta en konservativ tape, BTC/USDC på ~$23,000, vilket är $20,200 / 0.88. Longen på 1.5 BTC är upp ungefär 4,300 USDC. Konto i nativa enheter: 104,300 USDC. Motorn rapporterar $104,300, en helg upp 4.3%, och en fundingbetalning landar ovanpå det i samma enhet.

I dollar är de 70,000 USDC i overksam säkerhet värda ungefär $61,600. Hela 104,300 USDC är värda ungefär $91,800. Boken som "gjorde" 4.3% förlorade 8% av sitt dollarkapital medan den mestadels låg i kassa.

Helgavkastningen var ett enhetsbyte, inte ett lyckokast. En long BTC/USDC-position på en USDC-ned-dag är mekaniskt long depeggen. Du kan vilja ha det bettet. Du kan inte upptäcka det i efterhand i en serie märkt USD.

Coinbase hade redan stoppat USDC-konverteringar. Binance stängde av USDC-par. Även en gudamodus-backtest som klockan 08:00 UTC beslutade att dumpa quote-tillgången mot dollar skulle ha behövt en venue som fortfarande konverterade, en spread som inte var själva depeggen, och en settlementväg som inte fanns förrän bankerna öppnade på måndagen.

cash_usd = cash_usdc * 1.0

Den raden är den jag behåller. Den kördes på varje bar, inklusive barerna där USDCUSD var 0.87. Att multiplicera med 1.0 känns som en no-op, vilket är därför den överlever kodgranskning. Det är en FX-mark. En fryst sådan.

De 70,000 USDC i säkerhet utlöste aldrig en trade, så ingen slippage-modell tittade någonsin på dem, ingen avgiftstabell, ingen funding. Kassa ska vara den tråkiga kolumnen. På den här boken var den den största risken, och den enda vi inte prissatte.

En maker-rabatt på BTC-fillsen den helgen var 2 eller 3 bps, om du ens blev filled. Quote-tillgångens rörelse var 1,300 bps. Vi har en hel stack för 3:an och en stubb för 1,300.

Den gröna helgen på diagrammet

Måndag morgon på Slack, innan någon hade öppnat USDCUSD: vi printade 4% över natten. Någon frågade om vi skulle skala pappersstorleken. Jag tittade på diagrammet, sedan på Kraken, sedan på stubben.

LiggarpostVad motorn lagradeLördag, nativeSamma ögonblick, i dollar
Overksam säkerhet70,000 USDC × 1.0070,000 USDC~$61,600
BTC-perp-markBTCUSDC last~23,000 USDC (26,000 på Kraken)BTCUSD ~$20,200
Orealiserat på 1.5 BTC+4,300 USDC+4,300 USDCmest peggen, lite bitcoin
Rapporterad NAV104,300 "USD"104,300 USDC~$91,800

USDT-böcker hade den omvända karikatyren. USDT handlades till premie, så ett flatt USDT-margined konto visade en dollarvinst det heller inte hade tjänat, och en BTCUSDT-mark som var för låg relativt BTCUSD. Om du rankade två "identiska" BTC-perps den helgen, en på en USDC-venue och en på en USDT-venue, rankade du quote-tokenarna och kallade det alpha.

Papperskontot, det som faktiskt höll USDC, var närmare sanningen än research-dashboarden. Det påstod aldrig att det var dollar. Det gjorde vi i exporten.

Exporten vi skickade på måndagen

USDC kröp tillbaka mot $1 efter att Treasury, Fed och FDIC sagt att SVB-insättare skulle hållas skadeslösa, och efter att Circle sagt att de skulle täcka ett underskott. Till måndagen var peggen mestadels lagad. Stubb-FX-filen, som hade varit fel i 48 timmar, var rätt igen.

Men dagliga bars dolde det. 00:00 UTC-samplet den 11 mars fångade USDC redan av, eller redan studsande, beroende på leverantören, och samplet den 12 mars var en annan film. Om du bara lagrade NAV och inte quote-marken kunde du inte rekonstruera vilket. Den fula helgen plattades ut till en blipp liten nog att ignorera, vilket vi gjorde, för vi samplade dagligen.

Det vi håller i boken nu är tre serier, alltid, även när de ligger ovanpå varandra i månader:

  1. NAV i venuens quote-tillgång, enheten du faktiskt kan ta ut.
  2. Quote-tillgång mot USD, en riktig tape, inklusive lördag, inklusive 0.87, inklusive timmarna Coinbase inte konverterade.
  3. NAV i dollar, som en deriverad serie, så att en plotetikett med USD har en förälder.

Om en agent skriver backtesten är kontrollen densamma. Fråga den om quote-tillgången för varje position och för kassan. Om den svarar USD på en USDC-venue är körningen inte en dollarkörning. Mars 2023 är veckan jag spelar om när någon säger att distinktionen inte flyttar Sharpe. Den flyttade den här mer än strategin gjorde, och strategin var den del vi hade modeller för.

stablecoinsnoteringsvalutabacktestingkryptopappershandel
← Alla inlägg