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から取得)。設定時、すべての注文に付加されます。 |
セキュリティ警告: このウォレットには少額のみ保管してください。定期的に安全なウォレットに引き出してください。環境変数に秘密鍵を保存するのは自動化に便利ですが、暗号化ストレージより安全性は低くなります。
取引フロー
- ポジションのスプリット - pUSDがCTFコントラクトによりYES + NOトークンに分割されます
- 不要な側の売却 - 不要な側がCLOBオーダーブック(V2)経由で売却されます
- 結果 - 希望するポジションを保有し、不要な側の売却でコストの一部を回収します
例: 買い 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注文は成功します。
代替の回避策:
--skip-sellを使用 — YESおよびNOトークンの両方を保持し、polymarket.comで手動で売却- プロキシなし — スプリットは問題なく機能し、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