polyclaw 是做什麼的?
為 OpenClaw 設計的啟用交易功能 Polymarket 技能。瀏覽市場、管理錢包、執行交易、追蹤倉位。
功能特色
- 市場瀏覽 - 搜尋與瀏覽 Polymarket 預測市場
- 錢包管理 - 基於環境變數的錢包設定
- 交易 - 透過分割 + CLOB 執行買入 YES/NO 倉位
- 倉位追蹤 - 追蹤進場價格、現價與損益
- 避險發現 - 由 LLM 驅動,透過邏輯蘊涵發現涵蓋性投資組合
快速開始
首先,安裝相依套件(從技能目錄執行):
cd {baseDir}
uv sync
首次設定(交易前必做)
在第一次交易前,設定 Polymarket 合約授權(一次性,耗費約 0.01 POL 手續費):
uv run python scripts/polyclaw.py wallet approve
這會向 Polygon 提交 6 筆授權交易。每個錢包只需執行此步驟一次。
瀏覽市場
# 依成交量篩選熱門市場
uv run python scripts/polyclaw.py markets trending
# 搜尋市場
uv run python scripts/polyclaw.py markets search "election"
# 市場詳細資訊(回傳完整 JSON 含所有欄位)
u run python scripts/polyclaw.py market <market_id>
輸出選項:
- 預設輸出為格式化表格(適合顯示)
- 使用
--full標記可顯示完整問題文字(不截斷) - 使用
--json標記可透過scripts/markets.py --json trending取得結構化 JSON 輸出
錢包管理
# 檢查錢包狀態(地址、餘額)
uv run python scripts/polyclaw.py wallet status
# 設定合約授權(一次性)
uv run python scripts/polyclaw.py wallet approve
錢包透過環境變數 POLYCLAW_PRIVATE_KEY 設定。
交易
# 以 $50 買入 YES 倉位
uv run python scripts/polyclaw.py buy <market_id> YES 50
# 以 $25 買入 NO 倉位
uv run python scripts/polyclaw.py buy <market_id> NO 25
倉位
# 列出所有倉位及其損益
uv run python scripts/polyclaw.py positions
避險發現
尋找涵蓋性投資組合——透過逆否邏輯互相避險的市場配對。
# 掃描熱門市場尋找避險組合
uv run python scripts/polyclaw.py hedge scan
# 掃描符合查詢條件的市場
uv run python scripts/polyclaw.py hedge scan --query "election"
# 分析特定市場的避險關係
uv run python scripts/polyclaw.py hedge analyze <market_id_1> <market_id_2>
輸出選項:
- 預設輸出為格式化表格,顯示層級、覆蓋率、成本、目標與涵蓋
- 使用
--json標記可取得結構化 JSON 輸出 - 使用
--min-coverage 0.90可依最低覆蓋率篩選(預設 0.85) - 使用
--tier 1可依層級篩選(1=最佳,預設 2)
覆蓋率層級:
- 層級 1 (高): >=95% 覆蓋率 - 近乎套利機會
- 層級 2 (良好): 90-95% - 強烈避險
- 層級 3 (中等): 85-90% - 不錯但仍有明顯風險
- 層級 4 (低): <85% - 投機性(預設過濾掉)
LLM 模型: 透過 OpenRouter 使用 nvidia/nemotron-nano-9b-v2:free。模型選擇很重要——有些模型會發現虛假相關性,而其他模型(如 DeepSeek R1)有輸出格式問題。可使用 --model <model_id> 覆蓋。
安全性
為了 MVP 階段簡化並相容於 Claude Code,私鑰存放在環境變數中。
安全警告: 在此錢包中僅保留小額資金。請定期提領至安全錢包。
環境變數
| 變數 | 必要 | 說明 |
|---|---|---|
CHAINSTACK_NODE | 是(交易) | Polygon RPC URL |
OPENROUTER_API_KEY | 是(避險) | 用於 LLM 避險發現的 OpenRouter API 金鑰 |
POLYCLAW_PRIVATE_KEY | 是(交易) | EVM 私鑰(十六進位,有或無 0x 前綴) |
HTTPS_PROXY | 建議 | 用於 CLOB 的輪換住宅代理(例如 IPRoyal) |
CLOB_MAX_RETRIES | 否 | 搭配 IP 輪換的最大 CLOB 重試次數(預設:5) |
POLY_BUILDER_CODE | 否 | 用於歸屬的 Bytes32 builder 代碼(來自 polymarket.com/settings?tab=builder)。設定後會附加到每個訂單。 |
安全警告: 在此錢包中僅保留小額資金。請定期提領至安全錢包。將私鑰放在環境變數中便於自動化,但安全性低於加密儲存。
交易流程
- 分割倉位 - 透過 CTF 合約將 pUSD 分割為 YES + NO 代幣
- 賣出不需要的一方 - 透過 CLOB 訂單簿(V2)賣出不需要的一方
- 結果 - 您持有想要的倉位,並從賣出不需要的一方回收部分成本
範例:以 $0.70 買入 YES
- 分割 $100 pUSD → 100 YES + 100 NO 代幣
- 以 ~$0.30 賣出 100 NO 代幣 → 回收 ~$27 pUSD
- 淨成本:100 YES 代幣約 $73(進場價:$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
相依套件
使用 uv 安裝(從技能目錄執行):
cd {baseDir}
uv sync
限制
- 交易需要一次性錢包授權設定
- 若流動性不足,CLOB 賣出可能失敗
CLOB Cloudflare 封鎖
Polymarket 的 CLOB API 使用 Cloudflare 保護,會封鎖來自許多 IP 的 POST 請求,包括資料中心 IP 及部分住宅 ISP。這會影響「賣出不需要的代幣」步驟。
解決方案:使用重試邏輯的住宅代理
建議設定使用輪換住宅代理(例如 IPRoyal、BrightData)。CLOB 用戶端會自動以新 IP 重試,直到成功為止:
export HTTPS_PROXY="http://user:[email protected]:12321"
export CLOB_MAX_RETRIES=10 # 預設為 5
使用此設定,CLOB 訂單通常會在 5-10 次重試內成功,因為代理會輪換 IP 直到找到未被封鎖的 IP。
替代方案:
- 使用
--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 美元)。如果您有 USDC.e,請透過 Collateral Onramp(0x9307...B8ee)將其 1:1 包裝——polymarket.com 介面會自動執行此操作;API 使用者需手動包裝。
「CLOB 訂單失敗」
CLOB 賣出可能因以下原因失敗:
- 賣出價位流動性不足
- IP 被 Cloudflare 封鎖(請嘗試使用代理)
您的分割仍然成功——您持有代幣,只是無法賣出不需要的一方。
「授權未設定」
首次交易需要合約授權。請執行:
uv run python scripts/polyclaw.py wallet approve
授權條款
Apache 2.0