Communitygithub.com

chainstacklabs/polyclaw

通过拆分+CLOB执行在Polymarket上进行交易。浏览市场,追踪带盈亏的头寸,通过LLM发现对冲机会。支持Polygon/Web3。

polyclaw 是什么?

PolyClaw 是一款为 OpenClaw 框架设计的 Polymarket 交易技能,旨在让 AI 代理能够直接在终端中执行预测市场操作。它整合了市场浏览、钱包管理、基于拆分和中央限价订单簿(CLOB)的执行交易、带盈亏计算的持仓追踪,以及基于大语言模型(LLM)的对冲发现功能。该技能特别适合通过脚本命令实现自动交易策略,并利用 LLM(如通过 OpenRouter 调用的 nvidia/nemotron 模型)自动检测市场间的逻辑对冲关系。PolyClaw 支持 Polygon 主网,需要设置环境变量(如 POLYCLAW_PRIVATE_KEY)来管理钱包,并通过代理(如 IPRoyal)解决 Polymarket CLOB API 的 Cloudflare 防护问题。首次交易前需一次性授权合约,之后即可执行买卖、查看持仓和分析对冲机会。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add chainstacklabs/polyclaw

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

polyclaw 是做什么的?

面向 OpenClaw 的 Polymarket 交易技能。浏览市场、管理钱包、执行交易、追踪持仓。

功能

  • 市场浏览 - 搜索和浏览 Polymarket 预测市场
  • 钱包管理 - 基于环境变量的钱包配置
  • 交易 - 通过拆分 + CLOB 执行买入 YES/NO 头寸
  • 持仓追踪 - 追踪入场价格、当前价格和盈亏 (P&L)
  • 对冲发现 - 基于逻辑推论的 LLM 驱动覆盖性投资组合发现

快速开始

首先,安装依赖(从技能目录执行):

cd {baseDir}
uv sync

首次设置(交易必需)

在首次交易前,设置 Polymarket 合约授权(一次性操作,gas 费约 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)
uv 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 构建者代码(来自 polymarket.com/settings?tab=builder)。设置后将附加到每个订单。

安全警告: 请在此钱包中仅保留少量资金。定期将资金提现到安全钱包。将私钥放在环境变量中虽然便于自动化,但安全性低于加密存储。

交易流程

  1. 拆分头寸 - 通过 CTF 合约将 pUSD 拆分为 YES + NO 代币
  2. 卖出不需要的 - 通过 CLOB 订单簿(V2)卖出不需要的一方
  3. 结果 - 您持有想要的头寸,并通过卖出不需要的一方回收部分成本

示例:以 $0.70 买入 YES

  • 拆分 $100 pUSD → 100 YES + 100 NO 代币
  • 以 ~$0.30 卖出 100 NO 代币 → 回收 ~$27 pUSD
  • 净成本:~$73 获得 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

依赖

使用 uv 安装(从技能目录执行):

cd {baseDir}
uv sync

限制

  • 交易需要一次性钱包授权设置
  • 如果流动性不足,CLOB 卖出可能失败

CLOB Cloudflare 拦截

Polymarket 的 CLOB API 使用 Cloudflare 防护,会阻止来自许多 IP 地址(包括数据中心 IP 和部分住宅 ISP)的 POST 请求。这会影响“卖出不需要的代币”步骤。

解决方案:带重试逻辑的住宅代理

推荐的设置使用轮换住宅代理(例如 IPRoyal、BrightData)。CLOB 客户端会自动使用新 IP 重试,直到成功:

export HTTPS_PROXY="http://user:[email protected]:12321"
export CLOB_MAX_RETRIES=10  # 默认为 5

使用此设置,CLOB 订单通常会在 5-10 次重试内成功,因为代理会轮换 IP 直到找到未被封锁的。

替代解决方案:

  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 界面会自动执行此操作;API 用户需手动包装。

“CLOB 订单失败”

CLOB 卖出可能因以下原因失败:

  • 卖出价格处流动性不足
  • IP 被 Cloudflare 拦截(请尝试代理)

您的拆分操作仍然成功——您已拥有代币,只是无法卖出不需要的一方。

“授权未设置”

首次交易需要合约授权。请运行:

uv run python scripts/polyclaw.py wallet approve

许可证

Apache 2.0

相关技能