Communitygithub.com

chainstacklabs/polyclaw

Polymarketでスプリット+CLOB執行による取引を実行。市場の閲覧、ポジションのP&L追跡、LLMによるヘッジ発見。Polygon/Web3対応。

polyclaw とは?

PolyClawは、OpenClaw上で動作するPolymarket向けトレーディングスキルです。予測市場の閲覧、ウォレット管理、YES/NOポジションの売買、ポジションのP&L追跡に加え、LLM(大規模言語モデル)を活用したヘッジ発見機能を提供します。取引はスプリット+CLOB執行のハイブリッド方式で行われ、環境変数による簡単なウォレット設定が可能です。対応プラットフォームはOpenClaw(Claude Codeなど)で、Polygonメインネット上のPolymarket CLOB V2コントラクトと連携します。開発者向けにはPythonスクリプトとして提供され、マーケット検索や注文執行をコマンドラインから実行できます。CLOBのCloudflareブロック対策として、レジデンシャルプロキシとリトライロジックを推奨しています。

対応✓Claude Code~Codex CLI~Cursor
npx skills add chainstacklabs/polyclaw

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

polyclaw は何をしますか?

OpenClaw向けのPolymarketトレーディングスキル。市場の閲覧、ウォレット管理、取引の実行、ポジションの追跡が可能です。

特徴

  • 市場の閲覧 - Polymarketの予測市場を検索・閲覧
  • ウォレット管理 - 環境変数ベースのウォレット設定
  • トレーディング - スプリット+CLOB執行によるYES/NOポジションの購入
  • ポジション追跡 - エントリー価格、現在価格、P&Lの追跡
  • ヘッジ発見 - LLMによる論理的含意を利用したカバーポートフォリオの発見

クイックスタート

まず、依存関係をインストールします(スキルディレクトリから):

cd {baseDir}
uv sync

初回セットアップ(トレーディングに必須)

初回の取引前に、Polymarketのコントラクト承認を設定します(1回限り、約0.01 POLのガス代がかかります):

uv run python scripts/polyclaw.py wallet approve

これにより、Polygon上で6件の承認トランザクションが送信されます。ウォレットごとに1回だけ実行する必要があります。

市場の閲覧

# 出来高順のトレンド市場
uv run python scripts/polyclaw.py markets trending

# 市場の検索
uv run python scripts/polyclaw.py markets search "選挙"

# 市場の詳細(全フィールドを含む完全なJSONを返します)
u run python scripts/polyclaw.py market <market_id>

出力オプション:

  • デフォルト出力は整形されたテーブル(表示に適しています)
  • --fullフラグを使用すると、質問テキストが完全に表示されます(切り詰めなし)
  • scripts/markets.py --json trendingのように--jsonフラグを使用すると、構造化されたJSON出力が得られます

ウォレット管理

# ウォレットステータスの確認(アドレス、残高)
uv run python scripts/polyclaw.py wallet status

# コントラクト承認の設定(1回限り)
uv run python scripts/polyclaw.py wallet approve

ウォレットはPOLYCLAW_PRIVATE_KEY環境変数で設定されます。

トレーディング

# YESポジションを$50で購入
uv run python scripts/polyclaw.py buy <market_id> YES 50

# NOポジションを$25で購入
uv run python scripts/polyclaw.py buy <market_id> NO 25

ポジション

# 全てのポジションをP&L付きで表示
uv run python scripts/polyclaw.py positions

ヘッジ発見

対偶論理(contrapositive logic)を用いて互いにヘッジとなる市場ポジションのペア(カバーポートフォリオ)を見つけます。

# トレンド市場からヘッジをスキャン
uv run python scripts/polyclaw.py hedge scan

# クエリに一致する市場をスキャン
uv run python scripts/polyclaw.py hedge scan --query "選挙"

# 特定の市場間のヘッジ関係を分析
uv run python scripts/polyclaw.py hedge analyze <market_id_1> <market_id_2>

出力オプション:

  • デフォルト出力は、Tier、Coverage、Cost、Target、Coverを表示する整形テーブル
  • --jsonフラグで構造化JSON出力
  • --min-coverage 0.90で最低カバレッジをフィルタリング(デフォルト0.85)
  • --tier 1でTierをフィルタリング(1=最良、デフォルト2)

カバレッジTier:

  • Tier 1 (HIGH): >=95% カバレッジ - ニアアービトラージ機会
  • Tier 2 (GOOD): 90-95% - 強力なヘッジ
  • Tier 3 (MODERATE): 85-90% - そこそこのヘッジだがリスクあり
  • Tier 4 (LOW): <85% - 投機的(デフォルトで除外)

LLMモデル: nvidia/nemotron-nano-9b-v2:freeをOpenRouter経由で使用。モデルによっては、誤った相関を見つけるものや(DeepSeek R1など)出力フォーマットに問題があるものもあります。必要に応じて--model <model_id>で上書き可能です。

セキュリティ

MVPでは、簡便さとClaude Codeとの互換性のため、秘密鍵を環境変数に保存しています。

セキュリティ警告: このウォレットには少額のみ保管してください。定期的に安全なウォレットに引き出してください。

環境変数

変数必須説明
CHAINSTACK_NODEはい(トレーディング)Polygon RPC URL
OPENROUTER_API_KEYはい(ヘッジ)LLMヘッジ発見用のOpenRouter APIキー
POLYCLAW_PRIVATE_KEYはい(トレーディング)EVM秘密鍵(16進数、0xプレフィックス有無問わず)
HTTPS_PROXY推奨CLOB用の回転型レジデンシャルプロキシ(例:IPRoyal)
CLOB_MAX_RETRIESいいえIPローテーション付きCLOB最大リトライ回数(デフォルト: 5)
POLY_BUILDER_CODEいいえ属性付与用のBytes32ビルダーコード(polymarket.com/settings?tab=builderから取得)。設定時、すべての注文に付加されます。

セキュリティ警告: このウォレットには少額のみ保管してください。定期的に安全なウォレットに引き出してください。環境変数に秘密鍵を保存するのは自動化に便利ですが、暗号化ストレージより安全性は低くなります。

取引フロー

  1. ポジションのスプリット - pUSDがCTFコントラクトによりYES + NOトークンに分割されます
  2. 不要な側の売却 - 不要な側がCLOBオーダーブック(V2)経由で売却されます
  3. 結果 - 希望するポジションを保有し、不要な側の売却でコストの一部を回収します

例: 買い YES at $0.70

  • $100 pUSDをスプリット → 100 YES + 100 NO トークン
  • 100 NO トークンを~$0.30で売却 → ~$27 pUSDを回収
  • 正味コスト: ~$73 for 100 YES トークン(エントリー: $0.73)

USDC.eしか持っていない場合は、取引前にCollateral Onrampのwrap()関数を使って1:1でpUSDにラップしてください。

Polymarket コントラクト(Polygon メインネット、CLOB V2)

  • pUSD(担保): 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB
  • USDC.e(オンボーディング入力): 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
  • Collateral Onramp: 0x93070a847efEf7F70739046A929D47a521F5B8ee
  • CTF(条件付きトークン): 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045
  • CTF Exchange(V2): 0xE111180000d2663C0091e4f400237545B87B996B
  • Neg Risk CTF Exchange(V2): 0xe2222d279d744050d28e00520010520000310F59

依存関係

uを使用してインストールします(スキルディレクトリから):

cd {baseDir}
uv sync

制限事項

  • トレーディングにはウォレット承認の設定が必要です(1回限り)
  • CLOBでの売却は流動性が不十分だと失敗する場合があります

CLOBのCloudflareブロッキング

PolymarketのCLOB APIはCloudflareによる保護を使用しており、多くのIP(データセンターIPや一部の住宅用ISPを含む)からのPOSTリクエストをブロックします。これは「不要なトークンの売却」ステップに影響します。

解決策: レジデンシャルプロキシとリトライロジック

推奨される設定では、回転型レジデンシャルプロキシ(例:IPRoyal、BrightData)を使用します。CLOBクライアントは、動作するIPが見つかるまで新しいIPで自動的にリトライします。

export HTTPS_PROXY="http://user:[email protected]:12321"
export CLOB_MAX_RETRIES=10  # デフォルトは5

この設定により、プロキシがブロックされていないIPを見つけるまでIPをローテーションするため、通常5-10回のリトライでCLOB注文は成功します。

代替の回避策:

  1. --skip-sellを使用 — YESおよびNOトークンの両方を保持し、polymarket.comで手動で売却
  2. プロキシなし — スプリットは問題なく機能し、CLOB売却のみ影響を受ける

全てのリトライ後にCLOBが失敗した場合でも、スプリットは成功しています。出力では、手動で売却するトークンの数が示されます。

トラブルシューティング

「ウォレットが利用できません」

POLYCLAW_PRIVATE_KEY環境変数を設定します:

export POLYCLAW_PRIVATE_KEY="0x..."

「pUSDが不足しています」

uv run python scripts/polyclaw.py wallet statusで残高を確認します。取引にはpUSD(Polymarket USD)が必要です。USDC.eを持っている場合は、Collateral Onramp(0x9307...B8ee)を介して1:1でラップします — polymarket.comのUIでは自動的に行われますが、APIユーザーは手動でラップする必要があります。

「CLOB注文が失敗しました」

CLOBの売却は以下の理由で失敗する可能性があります:

  • 売り価格に対する流動性が不十分
  • CloudflareによってIPがブロックされている(プロキシを試す)

スプリットは成功しています — トークンは保有していますが、不要な側を売却できなかっただけです。

「承認が設定されていません」

初回の取引にはコントラクト承認が必要です。以下を実行してください:

uv run python scripts/polyclaw.py wallet approve

ライセンス

Apache 2.0

関連スキル