何も起こらない:非スポーツ型Polymarket市場で常に「No」を買うボット
(github.com/sterlingcrispin)- Polymarketの非スポーツ型のYes/No市場で自動的に**「No」ポジションのみを購入**する非同期Pythonボットで、エンターテインメント目的で提供される
- ペーパートレードと実取引モードを区別しており、実取引時には複数の環境変数と秘密鍵設定が必須
- ダッシュボードインターフェースを通じて状態を監視し、注文送信が有効な場合はリアルタイムの復旧状態を保存する
- Herokuデプロイスクリプトを含み、アプリ状態確認、ログ参照、実取引への切り替え、プロセス終了などを自動化する
- テストとデータ管理ツールが含まれており、ローカル環境とクラウド環境の両方で安全に実行・検証できる
概要
- Nothing Ever Happensは、Polymarketプラットフォームの非スポーツ型Yes/No市場で常に**「No」ポジションを購入**する非同期Pythonベースのボット
- エンターテインメント目的で提供され、保証や責任なしに、利用者自身のリスクで実行される
- リポジトリは
bot/、scripts/、tests/ディレクトリで構成され、それぞれ取引ロジック、運用スクリプト、テストコードを含む
ランタイム構成
- ランタイムは独立した市場をスキャンし、設定された価格上限以下の**「No」項目を探索**してポジションを追跡する
- ダッシュボードを通じて状態を表示し、注文送信が有効な場合はリアルタイムの復旧状態を保存する
- 実行モジュールは
nothing_happensで、非アクティブモードではPaperExchangeClientを使用する
安全モデル
- 実際に注文を送信するには、次の3つの環境変数をすべて設定する必要がある
BOT_MODE=liveLIVE_TRADING_ENABLED=trueDRY_RUN=false
- 上記条件のいずれか1つでも欠けると、ペーパートレードモードに切り替わる
- 実取引モードでは、追加で次の環境変数が必要
PRIVATE_KEYFUNDER_ADDRESS(署名タイプ1、2用)DATABASE_URLPOLYGON_RPC_URL(プロキシウォレットの承認および償還用)
セットアップと構成
- インストールは
pip install -r requirements.txtの後、サンプル設定ファイルをコピーしてローカル設定として使用する config.jsonは秘密ではないランタイム設定、.envは秘密鍵と実行フラグを含む- ランタイム設定は
strategies.nothing_happens配下にあり、CONFIG_PATH環境変数で別の設定ファイルを指定できる
ローカル実行
- ローカルでは
python -m bot.mainコマンドで実行可能 - ダッシュボードは
$PORTまたはDASHBOARD_PORT環境変数にバインドされる
Herokuデプロイワークフロー
- Heroku環境では
HEROKU_APP_NAMEを使用するか、明示的なアプリ名引数を渡す - 提供されるスクリプト:
alive.sh: アプリ状態確認logs.sh: ログ参照live_enabled.sh/live_disabled.sh: 実取引モード切り替えkill.sh: プロセス終了
- 一般的なデプロイ手順は次のとおり
- 環境変数を設定(
BOT_MODE,DRY_RUN,LIVE_TRADING_ENABLED,PRIVATE_KEY,FUNDER_ADDRESS,POLYGON_RPC_URL,DATABASE_URL) git push heroku <branch>:mainheroku ps:scale web=1 worker=0
- 環境変数を設定(
workerプロセスは意図せず実行された場合にすぐ失敗するよう設計されている
テスト
- テストは
pytestを使用して単体および回帰検証を行う - コマンド:
python -m pytest -q
含まれるスクリプト
-
scripts/db_stats.py- リアルタイムのデータベーステーブル数と最近のアクティビティを点検する
-
scripts/export_db.pyDATABASE_URLまたはHerokuアプリからテーブルをエクスポートする
-
scripts/wallet_history.py- 設定されたウォレットのポジション、取引、残高を照会する
-
scripts/parse_logs.py- HerokuのJSONログをターミナルまたはHTML形式に変換する
リポジトリ管理
- ローカル設定、台帳、エクスポート済みデータ、レポート、デプロイ成果物などはデフォルトでgitから除外される
- リポジトリは運用環境とローカル環境を明確に分離するよう構成されている
1件のコメント
Hacker Newsの意見
このツイートを見ると、収益や払い戻しを約束しないと明記されている
単なるミームベースのコードとして、面白半分で作られたプロジェクトのようだ。詐欺というより、笑える実験という感じだ
Polymarketの約73%が実際に「No」で終わるという統計がある
データ分析に興味があるなら、Hugging Faceデータセットを参考にするとよさそうだ
人間の楽観バイアスのせいで「Yes」側が過大評価されることはあるかもしれないが、Polymarketはすでにトレーダーたちに監視されていて、価格は現実的に形成されている
もし下落するコインに賭けられるなら面白そうだが、そうした市場も結局は効率的に価格調整されるだろう
このプロジェクトが非スポーツ市場向けだという点が興味深い
スポーツベッティングでも、たいていは「No」側のほうがリターンが高いと知られている。「Yes」のほうが面白く、人が集まりやすいからだ
結局、こうした「退屈な賭け」のほうが長期的にはより高い収益を生む可能性がある
スポーツベッティングで蓄積されたこうした行動経済学的な知見は、非スポーツ市場にも適用できるかもしれない
結局、価格が本来の位置に戻るフィードバックループが生まれる
だから本当に儲かる戦略を見つけたなら、絶対にオープンソースで公開せず、黙って回すのが賢明だ
「常にNoに賭けろ」というアイデアは面白いが、実際にどれだけ収益が出るのかは検証が必要だ
現実には流動性が低く、一度の損失で何度分もの利益が吹き飛ぶことがある
スポーツ市場のほうが、むしろ明確な終了時点と大規模な取引量のおかげで予測しやすい
単にすべての項目でNoに張るのではなく、ニュースが出始めた時点で関連項目にNoを張るようにすれば、かなり安定した収益が得られるかもしれない
人間の想像力アービトラージだと思う
人は刺激的なシナリオを好むが、現実はたいてい退屈だ
私も金融危機やコロナのとき、このパターンを利用して利益を得た
今はAIバブルが気がかりだが、急落というより徐々にしぼむ形になりそうなので、債券と現金の比率を増やしている
「No」に賭けるのは、実質的に他のすべての結果に「Yes」を賭けるのと同じだと主張している
Polymarketドキュメントに関連する計算がある
こうした戦略は、まるで列車の前で硬貨を拾うようなものだ
小さな利益を積み重ねても、一度のロングテール事象ですべて失う可能性がある
関連研究として Prediction Market Microstructure がある
(以前の議論: HNリンク)
市場にはすでに価格織り込みが済んでいると見る
関連ツイートを参照
参考リンク
結局、実現ボラティリティは時間がたつとインプライド・ボラティリティより低くなる傾向がある
もちろん、一度吹き飛べば大きく損をすることもある
単に「No」が70%出るからといって儲かるわけではない
これは典型的な悪い数学だ。いわば「蒸気ローラーの前で硬貨を拾う」ような戦略だ
ただし、こうした非効率な市場は規模が小さく希少で、結局「硬貨は拾えても硬貨止まり」になりがちだ
Kelly基準に従っていても、無作為に賭ければ結局は資本を使い果たす可能性が高い。各市場ごとの**綿密な分析(DD)**が必要だ