予測市場は、バックテストするのが世界でいちばん簡単そうに見えます。価格は[0, 1]の範囲。ペイオフは1ドルかゼロ。レバレッジも、ファンディングも、ベーシスも、00:00 UTCの無期限スワップ特有のややこしさもありません。手数料、ファンディング、インパクトを含めて暗号資産の無期限先物をすでに扱えるバックテスターがあり、それを2日で適応させて、さっそく戦略の生成を始める予定でした。
実際には8日かかりました。以下がその記録です。おおむね時系列で、エクイティカーブが驚くほど美しく見えた日と、それが本当に美しかった理由も含めています。
1日目:簡単なはずだったアダプター
最初の対応付けは1対1で、すっきりしているように思えました。市場は商品。YES価格が価格。YESを買うのはロング、NOを買うのはショート。解決時に1.00か0.00で強制決済。時間足ごとの価格系列を同じイベントループに流し込めば完了です。
この対応付けが実データに触れて持ちこたえたのは、せいぜい90分でした。最初に破綻したのはリターン系列です。リスク管理レイヤー全体、つまりポジションサイジング、ボラティリティ・ターゲティング、Sharpeのレポートは、継続する商品について対数リターンを使う前提でした。0.04から0.00になる市場の対数リターンは未定義ですが、損失は確定していて全額です。また、解決3日前に0.04で取引されている市場と、解決4分前に0.04で取引されている市場は、どちらの行にも0.04と書かれていても、まったく別のものです。
結局、系列全体を時計時刻ではなく解決までの残り時間で再パラメーター化し、PnLを時価評価ではなく最終損益として扱うことにしました。それが正しい判断でしたが、その結果、下流にあるレポートコードはすべて使えなくなりました。
2日目:手数料の計算式が戦略を左右する
Kalshiの取引手数料は、ベーシスポイント分を差し引く方式ではありません。価格に対して二次関数的に増減し、おおよそ0.07 × contracts × P × (1−P)で、注文単位でセントに切り上げられます。つまり、コイン投げのような市場が最も面白くなる価格帯で手数料が最大になり、確率が両端に寄るとほぼ無料になります。
| 価格 | 1コントラクトあたりの手数料 | 必要なエッジ(確率ポイント) | 賭け金に対する手数料の割合 |
|---|---|---|---|
| 5¢ | 0.33¢ | 0.33 | 6.7% |
| 10¢ | 0.63¢ | 0.63 | 6.3% |
| 25¢ | 1.31¢ | 1.31 | 5.3% |
| 50¢ | 1.75¢ | 1.75 | 3.5% |
| 75¢ | 1.31¢ | 1.31 | 1.8% |
| 90¢ | 0.63¢ | 0.63 | 0.7% |
| 95¢ | 0.33¢ | 0.33 | 0.35% |
重要なのは3列目です。50¢で買って解決まで保有する場合、損益分岐点に達するには、自分の確率推定が市場より1.75ポイント高くなければなりません。相対的に1.75%ではなく、絶対値で1.75ポイントです。解決前に手仕舞うなら、スプレッドに加えて手数料を2回払います。
PolymarketのCLOBは、歴史的にまったく異なる手数料体系で、取引自体の手数料はほぼゼロに近く、そのぶんコストの大半がスプレッドと板の厚みに移ります。そのため、同じ戦略ロジックでも取引所によって経済性は大きく異なります。手数料モデルを1つだけ使った取引所間の比較は、現実を反映しません。現在は単一の定数ではなく、取引所ごとの手数料関数を使っています。
予測市場のバックテストレポートから1行だけ読むなら、確率ポイントで示した手数料の行にしてください。50¢の市場で予測エッジが1.2ポイントあると主張する戦略は、他のコストを1つも考慮する前からKalshiでは負けます。この事実はレポートの1ページ目に表示し、読者に計算させないようにすべきです。
3日目:板は階段状で、しかも薄い
私たちのインパクトモデルは、BTC無期限先物の注文板で較正した平方根関数でした。これは形が違います。1ドルの商品でティックが1¢なら、板全体の価格水準は99段しかありません。流動性が中程度の市場でも、最良気配値には数百コントラクトほどしか並ばず、その先には価格の空白があります。
サンプリングしていた経済指標関連市場のスナップショットです。YES側で、解決のおよそ30時間前です。
| 価格水準 | 数量(コントラクト) | 買いの累積コスト |
|---|---|---|
| 42¢ | 310 | 310 @ 平均42.0¢ |
| 43¢ | 85 | 395 @ 平均42.2¢ |
| 45¢ | 140 | 535 @ 平均42.9¢ |
| 49¢ | 600 | 1,135 @ 平均46.1¢ |
1,000コントラクトの注文は、暗号資産なら誤差にすぎない500ドル相当のリスクで、実効価格を4セント動かします。4セントは手数料の2倍以上です。ここに当てはめられる滑らかな関数はありません。板を価格水準ごとにたどるか、でっち上げるかです。この資産クラスではsqrtモデルを削除し、板をそのままたどる処理を書きました。遅くなりましたが、正確です。
ふと、この市場は「小さすぎて重要ではない」と苛立っている自分に気づきました。市場が小さいのは、値付けの対象が期限付きの現実世界の質問1つであり、水曜日の米国新規失業保険申請件数について意見を持つ人が限られているからです。規模そのものが市場なのです。それに文句を言うのは、ポーカー台の席が9つしかないと不満を言うようなものです。
4日目:エクイティカーブが美しかった日
1,400市場でSharpe 4.1。滑らかな曲線。これを見た研究者は誰でも胃が沈むはずです。私もそうなりました。ただしスクリーンショットを撮ってから、ようやく40分後のことでした。
バグはリサンプラーにありました。流動性の低い市場の価格履歴は不規則なタイムスタンプで返ってくるため、一定間隔の時間足グリッドに再インデックスしていました。アーカイブされた各系列の最後の点は、1.00か0.00の清算値です。再インデックスでは方向を制限せず最近傍の値で補完していたため、最後の取引が解決の数時間前だった市場では、清算値がその間の空白をさかのぼって埋めていました。モデルは、板の厚さによる制限を受けずにポジションを大きくできる、まさに流動性の低い市場で、今日の行に明日の答えを読み込んでいたのです。
最近傍補完は、継続的に取引される商品なら問題ありません。最後の観測値が真実そのものである商品では、先読みを生む仕組みになります。現在はすべての補完が未来方向に限られていることをアサートし、清算値の行にはタグを付けて特徴量の計算対象から除外しています。そのアサートは9行で、今週書いたコードの中で最も価値がありました。
5〜6日目:市場1,412件、賭けはおよそ180回
予測市場のサンプル数には、親しみやすい顔をした罠があります。1,412市場が解決すれば、観測数も1,412だと思い、それに応じてt統計量を計算してしまいます。しかし同じ日曜日に行われるNFLの試合14件は、同じ天候、負傷者情報の発表、共通のベッターの資金フローを共有しています。州単位の選挙市場51件は、1つの全国的な支持率変動を共有します。「Xは3月31日までに起きるか」と「Xは6月30日までに起きるか」は、期限が違うだけで同じ賭けであり、同時に解決します。
基礎となるイベントの発生源と解決日で市場をクラスタリングしたところ、実質的に独立した件数は180近辺になりました。調べていた効果の大きさでは、実際のエッジとノイズを見分けるには足りません。また、市場ごとのブートストラップを何度行っても解決しません。再サンプリングするのは行ではなくクラスターでなければならないからです。ここを誤ると、有意性は気づかないうちに2倍から3倍に膨らみます。
7日目:解決にも確率分布がある
まったくモデル化しておらず、痛い目を見て初めて気づいたこと:
- 早期解決。「12月31日までに」という市場でも、対象の出来事が実際に起きれば8月4日に解決することがあります。資金は早く戻り、保有期間は契約名から想像したものとは違っていました。
- 異議申し立て。オラクルが解決する市場には異議申し立て期間があります。出来事が起きた後もポジションが何日も未確定のままになることがあり、少数ながら、明白に見える解釈から結果が覆る場合もあります。
- 無効扱い。情報源のデータが曖昧だと市場はキャンセルされ、全員に返金されます。私たちのサンプルでは市場の1%未満ですが、モデルが割安と判定する曖昧な質問にまさに集中しています。
- 資金の拘束。90日で実現する3ポイントのエッジと、6時間で実現する3ポイントのエッジは比較できません。資金を拘束する時間で割らずに総エッジだけを報告するバックテストは、必ず時間のかかる方を高く評価します。
シミュレーターに保有コスト項と解決日のジッターを追加しました。どちらも精密ではありません。それでも、解決が記載された日に確実に起きるという暗黙の前提よりはましです。
8日目:省くこと、最初にやること
- リターンベースの土台作りは丸ごと省く。最終ペイオフ型の商品に、ボラティリティ・ターゲティングのリスク管理レイヤーを適応させないでください。確率と賭け金を扱うベットサイジングのレイヤーを書きましょう。古い仕組みを無理に合わせようとして2日失いました。
- 戦略より先に手数料関数を作る。取引予定の各取引所について損益分岐点のエッジ曲線を描き、デスクの目につく場所に掲示しましょう。バックテストを1回回す前に、アイデアの半分ほどをふるい落とせます。
- 初日から板をたどる。継続的に取引される市場から持ち込んだパラメトリックなインパクトモデルは、自分に都合のよい方向に外れます。
- 数える前にクラスタリングする。好みのSharpeが出てからではなく、対象市場を決めるときに、有効サンプルサイズを求めるためのクラスタリングキーも決めましょう。
- 補完の方向をアサートする。結合ごとに1行のチェックを入れます。系列の最後が真実そのものなら、レビューで気づくことに期待せず、後方補完は構造上のバグとして扱いましょう。
8日間かけた価値はありました。主な理由は、予測市場では暗号資産のバックテストで自分をごまかしやすくする曖昧さが取り除かれるからです。ごまかしようのないファンディングレートも、議論の余地があるマーク価格の決め方もありません。あるのは質問、期限、そして答えだけです。ここでバックテストが間違っていれば、どこが間違っているか指摘できます。
← 記事一覧


