Polymarket Botチュートリアル · 全32章中25章
Polymarketのスポーツ市場ボット:NFLの週次ゲーム、NBAタグ(745)のマイクロストラクチャー、サッカー(Premier League、Bundesliga、Champions League)、テニス(864)- 流動性、エッジの源泉、コードパターン。
この章で扱う内容
NFL、NBA、サッカー、テニスは、Polymarketにおけるカテゴリ別のスポーツ出来高の大半を占めます。それぞれに、データの入手性、更新頻度、エッジの性質が異なります。この章では、リーグごとのボットパターンと、フィルタリングに使うタグIDを解説します。
- NFL: 週次のサイクル、日曜日に流動性がピーク
- NBA(タグ745): 試合中のマイクロストラクチャー
- サッカー: 国際大会とクラブリーグの違い
- テニス(タグ864): トーナメントのサイクル
- 生き残るエッジの源泉
- ライブデータ: ESPN、公式API
- サンプルボット: プレゲームのラインキャッチャー
NFL: 週次のサイクル、日曜日に流動性がピーク
NFLは、Polymarketのスポーツの中で最も強い週次リズムを持っています。市場は前週の試合後の火曜日にオープンし、水曜〜金曜にライン比較が行われ、ベッティング出来高は土曜〜日曜にピークを迎えます。決済は通常、日曜夜に早い試合が、月曜夜に遅い試合が行われます。
ボットパターン: オープニングラインが設定される火曜〜水曜のラインキャッチャー、そして出来高が最大化する日曜のインプレー。時間帯ごとに別ボットを使います。マンデーナイトフットボールの市場は他の試合より出来高が薄いことが多く、小さなサイズのエントリーでもスリッページリスクが高い点に注意してください。
出来高のピークはスーパーボウルです。試合週には、SB関連の全市場で5,000万ドル超が取引されます。その週の100ドルのボットなど、規模としては無視できるノイズにすぎず、そのスケールでは市場は効率的です。
NBA(タグ745): 試合中のマイクロストラクチャー
NBAはPolymarketで最も高頻度のスポーツです。レギュラーシーズン中は週25〜30試合、プレーオフでは5〜15試合あります。タグID 745はNBA限定イベントを絞り込むためのものです。
NBAで試合中のマイクロストラクチャーが機能する理由は、(1) ESPNが約10秒ごとにスコアボードを更新する、(2) 試合が2.5時間の連続アクションである、(3) 主要試合のPolymarket板が第4クォーターまで厚みを保つ、の3点です。
うまくいく戦略: ある試合のWS板とESPNフィードを購読し、10〜15秒単位で不均衡と得点イベントに反応すること。うまくいかない戦略: プレゲームのラインキャッチ(効率的すぎて、個人ではあまり取れない)、終盤の確定アービトラージ(0.99トラップ領域)。
サッカー: 国際大会とクラブリーグ
サッカーは、Polymarket上では大まかに3つの階層に分かれます。
- 欧州トップリーグ(EPLタグ739、La Liga、Bundesliga、Serie A)- 出来高は中程度で、ビッグマッチでは板が厚いです。ボット戦略はNBAに近いです。
- Champions League / Europa League(UCLタグ2186)- ノックアウトステージで出来高がピークになります。最も板が厚くなるのはラウンド16以降です。
- 国際大会 / 小規模リーグ(Saudi Pro League、MLS、J-League)- 板が薄く、スプレッドが広いです。一般的にはボット向きではありません。
サッカーは得点が離散的で、0-1ゴールの変化が大きなイベントになるため、NBAのような連続的な流れとは異なります。サッカー向けのボットパターンは、ゴールが入る前に正しい側に乗り、ゴールが発生したら素早く退出することです。
テニス(タグ864): トーナメントのサイクル
テニスタグは864です。ATPとWTAツアーは年間11か月開催され、1月(Australian Open)、5〜6月(French Open)、7月(Wimbledon)、8〜9月(US Open)にグランドスラムがあります。出来高はこの4週間とMasters 1000シリーズに集中します。
テニスは、あらゆるスポーツの中でインプレーの価格階段が最もきれいです(15章)。試合中の価格は、セットとブレークの状態に連動した予測可能なカーブをたどります。テニス専用の価格階段モデルを持つボットなら、リアルタイムでの誤価格を検出できます。
静かな期間: グランドスラムの間、ATP 250 / ATP 500の大会しかない週は、板が非常に薄くなります。こうした期間はボットを止めるか、別のスポーツに切り替えてください。
生き残るエッジの源泉
4つのスポーツ全体で、長期的に残りやすいエッジは次のとおりです。
- プレゲームのライン比較を、より鋭い市場の数値(Pinnacle、Betfair)と照合すること。Polymarketが鋭いブックと3c以上ずれているなら、Polymarketを逆張りします。
- インプレーでの過剰反応を、1つのプレー(インターセプト、負傷、勢いの変化)に対して取ること。プレー後30〜60秒待ち、市場が行き過ぎていれば逆張りします。
- 終盤の本命0.85〜0.92を、リスク管理されたサイズで扱うこと。0.85未満は実リスク、0.92超は0.99トラップです。
残らないエッジ: 価格の純粋なテクニカル分析、Twitterの感情スクレイピング、カレンダーに基づく季節性。
ライブデータ: ESPN、公式API
4つのスポーツにおけるデータソースのマトリクスです。
| Sport | Primary | Backup | Update cadence |
|---|---|---|---|
| NFL | ESPN scoreboard | NFL.com feed | プレー中は約10秒 |
| NBA | ESPN scoreboard | stats.nba.com | プレー中は約10秒 |
| Soccer (EPL/UCL) | ESPN scoreboard | SofaScore | 約15〜30秒 |
| Tennis (ATP/WTA) | ESPN scoreboard | tennis.com live | 約30秒(ポイント単位) |
ESPNは無料で、4つすべてに対して信頼できます。10秒未満の更新が必要なら、StatsPerformやGeniusSportsのような専門フィードに課金してください。ただし、個人利用では、わずかな遅延改善がコストに見合うことはほとんどありません。
サンプルボット: プレゲームのラインキャッチャー
参考: プレゲームのラインキャッチャーの擬似コードです。
def line_catcher():
# Find games starting in the next 2-12 hours
events = gamma_events(tag_id=745, hours_ahead=12)
for ev in events:
for m in ev["markets"]:
polymarket_prob = float(json.loads(m["outcomePrices"])[0])
sharp_prob = fetch_pinnacle_implied(ev["slug"]) # 3rd-party feed
if sharp_prob - polymarket_prob > 0.04:
# Polymarket has the YES side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[0]
place_fok(tok, "BUY", polymarket_prob + 0.01, size=10)
elif polymarket_prob - sharp_prob > 0.04:
# Polymarket has the NO side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[1]
place_fok(tok, "BUY", 1 - polymarket_prob + 0.01, size=10)
注意点: Pinnacle / BetfairのAPIはアカウントが必要で、無料ではありません。鋭い参照価格がないと、ラインキャッチは単なる意見対意見になり、ボット向きではありません。





