Claude で構築する Polymarket 気象取引ボット(月 6,000 ドルの収益モデル)

@0xSurferX
英語2 日前 · 2026年7月19日
113K
56
8
7
149

TL;DR

Polymarket における気象予測市場ボット開発の包括的な技術ガイド。統計的な優位性とリスク管理に焦点を当てています。

みんなが言うには、トレーディング ボットには凝った AI とデータセンターが必要だって。

それは初心者が始めるのを妨げる嘘だ。

本当のところはこうだ:儲かる Polymarket の天気ボットは週末で作れるもので、この記事を読み終えれば、その全工程が身につく。

天気は、5分足の BTC とは正反対の世界だ。

BTC の値動きは予測不能なコインフリップであり、速度競争はコロケーションされたボットに支配されている。

気温は本質的に予測可能で、解約には数時間かかるため速度は意味をなさず、データは無料で手に入る。

これは、低価格の VPS を使う個人開発者が、ハードウェアではなく頭脳で勝てる最後の市場だ。

機械全体は6つのステップで構成されている。

市場を発見し、予報を取得し、バイアスを補正し、確率に変換し、8% のエッジを見つけ、サイジングして発注する。

これだけだ。

それぞれのピースを順に説明しよう。

私は何百ものボットを構築してきたが、実際に利益を生むのはいつもこのシンプルなものだ。人々が必要だと思い込んでいる過度にエンジニアリングされたものではない。

こちらが私の公開天気ボットの例だ: [[https://polymarket.com/profile/0xca75fbadcc238afd23c317e253a8b5c47b390a64?via=surferhttps://polymarket.com/profile/0xca75fbadcc238afd23c317e253a8b5c47b390a64?via=surfer)]

まだ開発中で、修正しようとしている負け streak に遭遇している。

とはいえ、以前のバージョンのように常に出血しているわけではない。

Blockchain Surfer ☝️ - inline image

さあ、あなたのために金を生み出す機械を構築しよう。

1. コンセプトとアイデア

コードの前に、全体像を明確にしておこう。そうすれば、すべてのステップが自明になる。

Polymarket は世界中の都市の毎日の気温マーケットを上場している。

それぞれのマーケットは、複数のバケットのセットだ。

1つのバケットが1ドルで YES に解決され、残りはゼロになる。

マーケットは、天気アプリに表示される都市ではなく、1つの正確な空港観測所 で解決される。

Blockchain Surfer ☝️ - inline image

あなたのボットの仕事は、簡単に言えば次の通りだ。

各バケットの本当の確率を、群衆よりも正確に見極め、マーケットが過小評価しているバケットを買う。

あなた自身が天気を予測するわけではない。

数十億ドル規模のモデルが、数時間前に既にそれをやっている。

あなたは、その予報を読み、それをクリーニングし、マーケット価格と比較する。

あなたの正直な確率が価格よりもはるかに高いところに、エッジが存在する。

以下のすべては、そのギャップを計算し、自分を騙さずに行動するための方法に過ぎない。

すべての設定は、ハードコードせずに設定ファイルに保存し、ロジックに触れずに調整できるようにする。

開始残高、最大トレード、最小エッジ、価格上限、ケリー分数。

すべてが1つの場所にあり、数秒で編集できる。

2. マーケットを発見する

ボットはまず、Polymarket で取引する価値のあるアクティブな気温マーケットをスキャンする。

すべてを取引したいわけではない。

予報コールやドルを無駄にする前に、ジャンクを捨てるフィルターが必要だ。

ほとんどの作業をやってくれる3つのフィルター:

> ボリューム下限

取引高が数千未満の薄いマーケットはスキップする。

薄い板はスプレッドが広く、信頼できない価格になる。

Blockchain Surfer ☝️ - inline image

> 時間枠

約2時間から72時間以内に解決されるマーケットのみを取引する。

2時間未満ではエッジは既に価格に織り込まれている。

72時間を超えると予報は不確実すぎて頼りにならない。

> 価格上限

既に約45セント以上で取引されているバケットはスキップする。

その価格では、マーケットはエッジのほとんどを織り込んでおり、上昇余地は薄い。

Blockchain Surfer ☝️ - inline image

残った各マーケットは、都市、日付、解決観測所を指し示す。

その観測所がすべてなので、その正確な空港座標と ICAO コードを保存し、都心は決して使わない。

都心の座標を使用すると、ボットが考える前に3〜8度の誤差が生じる可能性がある。

これで、取引可能なマーケットのクリーンなリストができた。それぞれが、予報がターゲットとすべき正確な地点に結びついている。

3. 予報を取り込む(コード)

次に、各マーケットの正確な観測所に対する予報を、複数のソースから取得する。

1つのモデルは単なる意見だ。

3つのモデルがあれば、一致点と不一致点が見えるようになる。それ自体が情報だ。

あなたの基盤は ECMWF 、世界のゴールドスタンダードだ。Open-Meteo を通じて無料で利用でき、キーは不要だ。

短い時間枠の米国都市には、リアルタイムの観測データを読み取る、より高解像度のモデルを追加する。

ECMWF の取得コード:

python
1def get_ecmwf(lat, lon, unit):
2 url = (
3 "https://api.open-meteo.com/v1/forecast"
4 f"?latitude={lat}&longitude={lon}"
5 f"&daily=temperature_2m_max&temperature_unit={unit}"
6 "&forecast_days=7&models=ecmwf_ifs025"
7 "&bias_correction=true"
8 )
9 data = requests.get(url, timeout=(5, 8)).json()
10 return data["daily"]["temperature_2m_max"]

この bias_correction=true フラグは重要だ。無料で位置ベースの誤差補正の最初のパスを適用してくれる。

約48時間以内の米国都市には、より高解像度のモデルを優先する:

python
1def get_hrrr(lat, lon):
2 url = (
3 "https://api.open-meteo.com/v1/forecast"
4 f"?latitude={lat}&longitude={lon}"
5 "&daily=temperature_2m_max&temperature_unit=fahrenheit"
6 "&forecast_days=3&models=gfs_seamless"
7 )
8 return requests.get(url, timeout=(5, 8)).json()["daily"]["temperature_2m_max"]

シンプルなルールだ。米国の短距離には高解像度、それ以外には ECMWF を使用する。

各都市はそれぞれの単位でリクエストする。米国は華氏、それ以外は摂氏で、すべての比較は同じスケールで行う。

4. バイアスを補正する(これがお金になる場所だ)

ここで、勝者が他のすべての人から差をつける。

すべてのモデルは、一貫した方向に系統的に間違っている

GFS は低温バイアスを持ち、気温を過小評価する。その誤差の大きさは、都市、時間、予報の先の長さに依存する。

Blockchain Surfer ☝️ - inline image

これをスキップすると、あなたのエッジは、多くの場合、モデルがいつものように間違っているというだけのものになる。

それはエッジではない。

それはエッジのコスチュームを着たノイズだ。

だから、1つの確率も計算する前に、モデル自身の過去の誤差を使ってモデルを補正するのだ。

バイアスは、定義するのは非常に簡単だ。

> バイアス = 予報値 - 実測値

都市、時間枠、時間帯ごとに別々に測定し、その既知の誤差だけ新しい予報値をシフトする。

機能する最もシンプルなバージョンは、最近の誤差の減衰平均だ。これにより、新しいミスほど重要度が高くなる。

これにニューラルネットワークは必要ない。

基本的な減衰平均か小さな回帰で、利用可能な改善の60〜80% を得られる。

まずそれを出荷しよう。

派手な ML によるバイアス補正は確かに現実的だが、それは最後の20% であり、シンプルなバージョンがすでに利益を生み出している場合にのみ重要になる。

まず入力を修正せよ。

退屈な無料モデルでも、補正されれば、生のままの派手なモデルに勝る。

5. 予報をバケット確率に変換する

次に、補正された1つの予報値を、各バケットの確率に変換する。

初心者が犯す間違いはこれだ。

彼らは予報値を取得し、それが該当するバケットにそのまま落とし込み、そのバケットを100% と呼ぶ。

しかし、予報は正確ではない。

それは中心点であり、その周りに既知の誤差の広がりがある。

この広がりがすべてだ。

例えば、補正された予報が41°F で、その都市に対するモデルの典型的な誤差が約2度だとしよう。

実際の最高気温は、簡単に1つ上のバケットか下のバケットに落ち着く可能性がある。

だから、1つのバケットに100% 賭けるのではない。

確率を、予報バケットとその隣接バケットに、誤差の大きさを考慮した各バケットの確からしさで重み付けして分散させる。

過去の誤差が小さいほど、中心のバケットに確率が集中する。

誤差が大きいほど、隣接バケットに分散する。

これこそが、実際の誤差、つまりシグマを知ることが非常に重要である理由だ。

それがなければ、自分の信頼度を推測していることになる。

それができれば、予報を、市場と比較できる正直な確率分布に変換できる。

その分布こそが、あなたが実際に取引するものだ。バケットごとに。

6. エッジを見つけ、ケリーでサイジングする

次に、あなたの確率を市場価格と比較し、ギャップが本物である場合にのみ行動する。

まず、期待値、つまり1ドルあたりのエッジ:

python
1def calc_ev(p, price):
2 if price <= 0 or price >= 1:
3 return 0.0
4 return round(p * (1.0 / price - 1.0) - (1.0 - p), 4)

モデルがバケットは80% と言い、14セントで取引されている場合:

0.80 * (1/0.14 - 1) - 0.20 = +4.94

これは大きなエッジだ。

しかし、すべての正の数で発注するわけではない。フロアを設定し、EV が約8% を超えた場合のみ取引する。これで弱いシグナルをスキップする。

次に、ケリーがバンクロールのどれだけを賭けるべきかを教えてくれる:

python
1def calc_kelly(p, price, kelly_fraction=0.25):
2 b = 1.0 / price - 1.0
3 f = (p * b - (1.0 - p)) / b
4 return min(max(0.0, f) * kelly_fraction, 1.0)

あなたを生かし続ける2つのガードレール。

> フラクショナルケリーを使用する。フルケリーの4分の1

フルケリーはジェットコースターのようなものだ。この分数が変動を大きく減らす。

> すべてのトレードを、設定からの最大ベットでハードキャップする

たとえケリーが大きく賭けるように叫んでも、キャップがあれば、1つの悪い市場からあなたを守る。

ASK(あなたが実際に支払う価格)でエントリーし、BID を出口として扱う。そうしないと、バックテストがあなたを騙すことになる。

7. 実行、ストップ、そしてすべてをログに記録する

今、ボットは行動する。そして、同様に重要なことに、記録する。

メインループはスケジュールで実行される。例えば毎時、各マーケットに対して同じことを順番に行う。

すべてのソースから最新の予報を取得する

一致する Polymarket マーケットを見つけ、そのレコードをロードする

現在の予報をスナップショットとして保存する。この履歴が将来のエッジになるからだ

オープンポジションのストップをチェックする

EV がフロアをクリアし、価格が適正な場合のみ、新しいポジションを開く

https://x.com/0xSurferX/status/2078620667272896555

あなたのストップはシンプルで機械的だ。

エントリーから価格が設定されたパーセント下落したらクローズする。

予報があなたのバケットから十分に離れ、テーゼが死んだらクローズする。

フルスキャンの合間に、数分ごとに軽いパスを実行して、ストップだけを監視する。すべての都市を再スキャンはしない。

そして、すべてをログに記録する。

すべての予報スナップショット、見たすべての市場価格、すべてのトレード、すべての解決。

マーケットごとに1つのファイルに、時間をかけて追記していく。

そのログは無駄な作業ではない。

それは、静的なボットを毎週よりシャープになるものに変える最後のステップのための原材料だ。

8. キャリブレーションさせ、賢くさせる

これが、推測するボットと知っているボットを分けるものだ。

初日、あなたのボットは、各都市に対する予報の正確さについて、実際のところ何も知らない。

だから、まだ自分自身を完全に信頼すべきではない。

小さく取引し、すべての解決をログに記録し、待つ。

都市に対して十分な数の解決済みマーケット(約30)がたまったら、真の誤差を測定できる。

その都市に対して行ったすべての予報を取得し、実際に起こったことと比較し、平均的なミスを計算する。

その平均誤差は、その特定の都市とソースに対するあなたのシグマ、つまりあなたの本当の信頼度になる。

そして、そのシグマはステップ4に直接フィードバックされる。

シグマが良くなれば、バケット間の確率分布がより正直になり、より良いエッジ検出、より良いサイジングにつながる。

ボットは、より多くの解決済みマーケットを収集するにつれて、文字通り自己改善する。

これは、私が構築するすべてのボットに対して説くのと同じ規律だ:

すべてをログに記録し、最初はリスクを最小限に抑える

実際の解決された結果に、あなたの真の精度を測定させる

データがエッジを証明した場合にのみ、サイズを大きくする

初日から90% の自信を持つ天気ボットは、10,000% のバックテストでデプロイされた暗号ボットと同じ災害だ。

どちらも、獲得したことのない数字を信頼した。

こんなことは見たくないはずだ、信じてくれ:

Blockchain Surfer ☝️ - inline image

次に進もう。

9. すべてをまとめる

では、結論を述べよう。

一歩下がって、あなたが構築したものを見てみよう:

正確な解決観測所に結びついた、クリーンなマーケットを発見する

その観測所に対して3つの予報ソースを取得する

各モデルの既知のバイアスを補正する

補正された予報を、実際の誤差を使用してバケット確率に変換する

エッジが8% を超えた場合のみ取引する

フラクショナルケリーとハードキャップでサイジングする

実行、ストップ、ログ記録、そして自己研鑽するまでキャリブレーションする

始めるのにニューラルネットワークは必要ない。データセンターやコロケーションされたサーバーも必要ない。

必要なのは、無料の予報、正直な計算、そして実際の解決でそれを証明させる忍耐力だけだ。

判断する前に、2〜3週間は動かし続けよう。天気マーケットは毎日解決され、手にしたものが何かを知るには50〜100の解決済みトレードが必要だからだ。

私は200以上のボットを構築してきたが、この正確な形状こそが、派手なものが未完成のまま放置されている間に、実際に利益を生み出すものだ。

シンプルなパイプライン、正直なキャリブレーション、退屈な規律。

それこそが実際に必要なすべてだ。

天気は Polymarket における最後の正直なマーケットだ。

今週末に6つのステップを構築し、キャリブレーションさせ、群衆が目覚める前に参入しよう。

バイアス補正ステップの完全な詳細は次回公開する。お見逃しなく。

パート2は水曜日にリリース予定だ。

また、つながりたい方は私の小さな Telegram チャンネルにも参加してほしい。

こちらから参加: https://t.me/+jCBHygDAJa9hMTJk

Blockchain Surfer ☝️ - inline image

ここで一緒に構築し、議論し、問題を修正しよう。

この記事が役に立ったと思ってもらえれば幸いだ。それがすべての目的だから。

幸運を祈る!

ワンクリック保存

YouMindでバイラル記事をAI深読み

ソースを保存し、的を絞った質問をし、主張を要約して、バイラル記事を再利用できるノートに変えます。すべてを1つのAIワークスペースで行えます。

YouMindを探索
クリエイターのために

あなたの Markdown をきれいな 𝕏 記事に

自分の長文を投稿するとき、画像・表・コードブロックを 𝕏 向けに整形するのは手間がかかります。YouMind は Markdown 全体を、そのまま投稿できるきれいな 𝕏 記事に変換します。

Markdown → 𝕏 を試す

解読すべきパターンをもっと

最近のバイラル記事

バイラル記事をもっと見る