Polymarket Botチュートリアル · 全32章中21章
PolymarketのバイナリYes/No市場向けボット戦略:標準的なイベント契約、ハード上限付き1xレバレッジ、ポートフォリオの広さによるスケール、よくあるミス(0.99を追いかけること)、そしてコードのひな形。
この章で扱う内容
バイナリ(Yes/No)市場はPolymarketの基盤です。ほとんどの戦略はここにあります。この章では、レバレッジ上限、新規ビルダーが引っかかりやすい0.99価格の罠、そして本番稼働のボットがたどり着く「サイズより幅」のパターンを扱います。
- バイナリ市場がカバーする内容
- 1xレバレッジ上限(およびその回避的なスケール方法)
- よくあるミス:0.99価格を追いかけること
- 実効レバレッジとしてのポートフォリオの広さ
- 市場ごとのリスクとポートフォリオ全体のリスク
- コード:バイナリ市場をスキャンしてサイズ付き買い注文を出す
バイナリ市場がカバーする内容
バイナリ市場はPolymarketの基盤です。1つのyes/noの問いに対して、2つの結果トークンがあります。「Trumpが2024年の大統領選で勝つか?」はバイナリですが、「2024年の大統領選で誰が勝つか?」のように候補者が5人いるものはNegRiskです(11章)。
バイナリ市場にある2つの結果トークン(YESとNO)は、小さなスプレッド税を差し引いた1.0に合計されます。どちら側でも買え、両側にそれぞれ注文板があります。価格は対称的で、YESを0.40で買うのは、期待ペイオフの観点ではNOを0.60で売るのと同じです。
Polymarketの非トーナメント系市場の大半はバイナリです。天候、単発イベントの政治結果、個別のスポーツゲーム、単一の価格目標を問う暗号資産の質問などです。ボットのパターンは、これらの多くで似ています。
1xレバレッジ上限(およびその回避的なスケール方法)
Polymarketのバイナリは1xレバレッジです。0.40で100株を買うのに40ドル使い、最大ペイアウトは100ドルです。マージンも強制清算もありません。資本効率は、2〜25xが使える永久先物(24章)より低くなります。
1x上限の回りでスケールする方法は、次のいずれかです。(1) 市場全体により多くの資本を配分する-レバレッジではなく分散を使う、(2) 決済済み市場をまたいで資本を回転させる-各決済で資本が解放され、次の市場へ移る、(3) 合計が1になるアービトラージで実効的な合成レバレッジを生み出せるNegRisk市場を使う。
バイナリ戦略の正しい捉え方は、低レバレッジ・高分散です。成熟したボットの典型像は、5つの市場に大きく張ることではなく、50の市場に50の小さなポジションを持つことです。
よくあるミス:0.99価格を追いかけること
バイナリボットで最もよくある失敗は、決済間近の強い本命を0.99で買い、YESで決着すれば簡単に1セントの利益が取れると期待することです。
数学的には、0.99では99セント払って1セントを勝ち取ることになります。1%の失敗率(100市場に1回)で、各失敗が99セントの損失になるため、99回の成功による1セント勝ちを打ち消してしまいます。極端な価格帯では、リスクリワード比が非常に厳しくなります。
容量の問題もあります。0.99付近の板は薄いため、意味のあるサイズを入れようとすると価格が0.995以上まで押し上がり、もともと薄いエッジがさらに削られます。
テール利回りのアービトラージ形状を狙う特別な戦略がない限り、0.92を超える価格の市場には入らないでください。ほとんどのバイナリボットは0.85を超えて買うべきではありません。
実効レバレッジとしてのポートフォリオの広さ
個別ポジションにレバレッジをかけることはできませんが、相関のない賭けを同時に多数保有することで、ポートフォリオの分散特性を実質的にレバレッジとして使うことはできます。
1件20ドルのポジションを50個持てば、合計1,000ドルが稼働します。勝率55%、+3c/-4cの経済条件なら、日次期待PnLは(0.55 × 3 − 0.45 × 4) × 50 × $0.20 = $1.50で、分散は限定的です。同じ期待リターンでも、1,000ドルの単一ポジションよりドローダウンははるかに小さくなります。
制約:ポジションは本当に相関していない必要があります。週末のNFL本命50個は、50個の独立した賭けではありません。実際には、天候と本命に関する賭けが試合全体で相関しているにすぎません。スポーツ、イベント種別、時間軸をまたいで分散しましょう。
市場ごとのリスクとポートフォリオ全体のリスク
2つのリスク上限があり、どちらも必要です。
- 市場ごと:エッジに関係なく、1市場あたりの最大額を$Xにする。単一市場での壊滅的損失を抑えます。一般的な値:1市場あたり25〜100ドル。
- ポートフォリオ全体:任意の時点で配分する総資本の上限。相関のない悪い日が続いた場合の総ドローダウンを抑えます。一般的な値:ウォレット残高の50〜70%。
より重要なのは市場ごとの上限です。なぜなら、単一のバグやエッジ消失イベントの爆発半径を限定できるからです。ポートフォリオ上限は健全性のチェックであり、50件以上のポジションがあれば、通常はそれがなくても大数の法則によって範囲内に収まります。
どちらの上限も、頭の中ではなくコードで強制すべきです。上限を実装していないボットは、いずれ資本の90%を単一市場に投入して失う設定を見つけてしまいます。
コード:バイナリ市場をスキャンしてサイズ付き買い注文を出す
参考:出来高上位のバイナリ市場をスキャンし、有効なセットアップだけを残し、サイズ指定のFOK買い注文を出します。
def scan_and_buy():
events = gamma_top_events(limit=50, active=True, closed=False)
for ev in events:
for m in ev.get("markets", []):
if m.get("negRisk"): continue # binaries only
outs = json.loads(m["outcomes"])
prices = [float(p) for p in json.loads(m["outcomePrices"])]
for i, out_name in enumerate(outs):
if not setup_qualifies(m, i, prices[i]): continue
tok = json.loads(m["clobTokenIds"])[i]
size = compute_size(m, prices[i])
if size < 5: continue
place_fok(tok, "BUY", prices[i] + 0.02, size, neg_risk=False)
def setup_qualifies(m, idx, price):
return 0.10 <= price <= 0.85 # avoid extremes
setup_qualifies関数に、あなたの戦略が入ります。ラッパー部分は単なる配線です。





