設定にはstarting_capital: 100000とあり、チャートのY軸はUSDと書いてあった。ログのすべての約定はUSDCの数字だった。そのランの11か月間、この二つの事実は同じセルに同居していて、誰もそれを分ける理由がなかった。
それからシリコンバレー銀行が破綻し、CircleはUSDC準備金のうち$3.3 billionがそこに滞留していると発表し、USDCは87セントで取引された。私たちの「ドル」帳簿は上がった。USDC建てのBTCは急騰した。パーペチュアルは緑を示した。リスクフリーの100,000として扱っていた現金こそが動いたものだった。
今でも、USDC、USDT、USDを一つのカラムとして扱うリサーチパイプラインを見つけてしまう。これはあの週末を、元帳が見た順に分解したものだ。
$100,000と書いてあった行
ペーパー口座、USDC証拠金のBTCパーペチュアル、控えめなロング。BTC想定元本は30,000 USDC、金曜のマーク付近の$20,150で約1.5 BTC。残りの70,000はUSDC担保として置いてあった。意図的に資金を余らせていた。ストラテジーを温めているところだった。スタックの残りは現金で寝かせていた。
NAV関数は、たいていのものがそうするように動いた。USDCの現金とUSDCの未実現損益を足し、その合計をequity_usdという名前の系列に書き込んだ。設定には、自分で書いたコメントがあった。
stablecoins = 1ドル。FXを二重計上するな。
意図していたのは、USDTのファンディング支払いを二度換算して、二度目のドル変動にしてしまうな、ということだった。実際にやってしまったのは、ファイルの残り全体でFXレートを1.0に固定することだった。
quote_asset = "USDC"
その取引所はUSDCの取引所だった。約定、証拠金、ファンディング、清算マーク、ロットサイズ、最小想定元本、すべてがそうだった。Hyperliquid、dYdX v3、Coinbase International、その他十数か所も同じ形。リサーチノートブックはBTCUSDCのローソク足とBTCUSDのローソク足を取り込み、前者をトレードに使い、後者をプロットにラベルした。ドル建ての方がプロらしく見えるからだった。
そして、今でもふとした時間に考えてしまう、小さくて愚かな部分がある。プロットライブラリのデフォルトの軸タイトルは「USD」だ。私は上書きしなかった。人が画面の前を通りかかり、その系列が持っていない単位を読んだ。
金曜の夜、Circleのツイート
2023年3月10日。SVBはすでに消えている。Circleは、当時~$40 billionあったUSDC準備金のうち$3.3 billionが破綻した銀行に置かれていたこと、約8%を開示する。Coinbaseはその夜、USDCの交換を停止する。ペグの実体である償還は、週末のあいだ閉じられる。
バックテストには、このどれに対する行もなかった。償還停止フラグもなく、発行体準備金のフィールドもなく、「月曜までにこのトークンをドルに換えられるか」もなかった。あったのは終値だった。金曜の終値は私たちのFXファイルではまだ1.0000だった。FXファイルは、ティッカーがUSDで始まるものなら何でも1.0を返すスタブだったからだ。
かつての私は、USDTのプレミアムを教科書的なノイズとして扱っていた。脚注で触れて、あとは無視する類のものだ。キッチンで20分かけて、1.03は「計上する価値があるか」と議論したことがある。二人とも論評していた。そのペアは系列だ。保存しろ。投票するのはやめろ。
0.8789
土曜の朝。CoinGeckoのUSDC安値は$0.8789。他のテープは$0.87を付ける。一部のDEXプールは$0.80を突き抜ける。USDCを担保に詰め込んだDAIがそれを追って下がる。USDTは逆方向へ、画面によっては$1.03、Krakenでは$1.06。
スタブのFXファイルはまだ1.0を返す。バックテストの時計は土曜だと知っている。帳簿の単位がいまや毀損したトークンだとは知らない。
Krakenの26,000の約定
BitstampのBTC/USDは$20,200付近を回っている。KrakenのBTC/USDCは$26,000超を付ける。同じビットコインだ。二つ目の数字は、ドル価格を壊れたペグで割ったものに、土曜の薄いUSDC板が足す空気を加えたものだ。
私たちの取引所はパーペチュアルをUSDCでマークしていた。保守的なテープを取るなら、BTC/USDCは~$23,000、つまり$20,200 / 0.88。1.5 BTCのロングは約4,300 USDC上昇している。ネイティブ単位の口座: 104,300 USDC。エンジンは$104,300、4.3%の週末上昇と報告し、その上に同じ単位でファンディング支払いが乗る。
ドルで見ると、遊休担保の70,000 USDCは約$61,600の価値だ。104,300 USDC全体は約$91,800だ。4.3%を「稼いだ」帳簿は、ほとんど現金で座っていたあいだにドル資本の8%を失っていた。
週末のリターンは単位の変化であって、運命の変化ではなかった。USDC下落日のBTC/USDCロングは、機械的にデペグのロングだ。その賭けを望むことはできる。USDとラベルされた系列のあとからそれを発見することはできない。
cash_usd = cash_usdc * 1.0
私が持ち続けているのはその行だ。すべてのバーで走った。USDCUSDが0.87だったバーも含めて。1.0を掛けるのはno-opのように感じる。だからコードレビューを生き抜く。それはFXのマークだ。凍ったマークだ。
70,000 USDCの担保は一度もトレードを発生させなかったので、スリッページモデルも手数料テーブルもファンディングも、それを見たことがなかった。現金は退屈なカラムであるはずだ。この帳簿では最大のリスクであり、値付けしなかった唯一のものだった。
その週末のBTC約定のmakerリベートは2または3 bps、そもそも約定できたとして。クォート資産の動きは1,300 bps。3のためのスタックは一式あるのに、1,300のためのものはスタブだ。
チャート上の緑の週末
月曜朝のSlack、誰もUSDCUSDを開く前: オーバーナイトで4%を付けた。ペーパーのサイズをスケールすべきか、と誰かが聞いた。私はチャートを見て、次にKrakenを見て、次にスタブを見た。
| 元帳項目 | エンジンが保存したもの | 土曜、ネイティブ | 同じ瞬間、ドル建て |
|---|---|---|---|
| 遊休担保 | 70,000 USDC × 1.00 | 70,000 USDC | ~$61,600 |
| BTCパーペチュアルのマーク | BTCUSDC最終値 | ~23,000 USDC (Krakenでは26,000) | BTCUSD ~$20,200 |
| 1.5 BTCの未実現 | +4,300 USDC | +4,300 USDC | ほとんどがペグ、いくらかがビットコイン |
| 報告NAV | 104,300 「USD」 | 104,300 USDC | ~$91,800 |
USDTの帳簿は逆の漫画だった。USDTはプレミアムで取引されていたので、USDT証拠金のフラットな口座は、やはり稼いでいないドルの利益を示し、BTCUSDに対して低すぎるBTCUSDTマークを示した。その週末に「同一」のBTCパーペチュアルを二つ、USDC取引所のものとUSDT取引所のもので順位付けしたら、クォートトークンを順位付けてアルファと呼んだことになる。
実際にUSDCを保有していたペーパー口座の方が、リサーチダッシュボードより真実に近かった。ドルだとは一度も主張しなかった。それをやったのはエクスポートの私たちだ。
月曜に出荷したエクスポート
財務省、Fed、FDICがSVBの預金者は全額保護されると発表し、Circleが不足分を補填すると言ったあと、USDCは$1に向かって這い戻った。月曜までにペグはほぼ修復されていた。48時間間違っていたスタブのFXファイルは、再び正しくなった。
しかし日足はそれを隠した。3月11日の00:00 UTCサンプルは、ベンダー次第で、USDCがすでにペグから外れているか、すでに反発しているかを捉え、3月12日のサンプルは別の映画だった。NAVだけを保存してクォートのマークを保存しなければ、どちらだったかは再構成できなかった。醜い週末は無視できるほど小さなブレに平坦化され、私たちはそうして無視した。日次でサンプリングしていたからだ。
いま帳簿に残しているのは3つの系列で、何カ月も重なっていても常にそうする。
- 取引所のクォート資産でのNAV。実際に引き出せる単位。
- クォート資産対USD。本物のテープ。土曜も含め、0.87も含め、Coinbaseが交換していなかった時間も含めて。
- ドル建てのNAV。派生系列として。USDというプロットラベルに親を持たせるため。
エージェントがバックテストを書く場合も、チェックは同じだ。すべてのポジションと現金のクォート資産を聞け。USDCの取引所でUSDと答えたら、そのランはドルのランではない。区別はSharpeを動かさないと言われたときに再生するのが2023年3月のこの週だ。このSharpeをストラテジー以上に動かし、ストラテジーの方こそモデルがあった部分だった。
← 記事一覧


