SuperAPI AI 工具集

polyclaw

智能体与模型

查看项目

更新于 10-15 08:01

技能介绍

PolyClaw 是一个为 OpenClaw 提供的、支持交易的 Polymarket 技能。它可以浏览市场、管理钱包、执行交易并跟踪持仓。

用途

PolyClaw 面向希望在 Polymarket 预测市场上进行交易的用户,提供从市场浏览、钱包管理、下单执行到持仓跟踪的完整流程,并额外提供基于 LLM 的对冲组合发现能力。交易运行在 Polygon 主网上。

主要能力

  • 市场浏览:搜索和浏览 Polymarket 预测市场。
  • 钱包管理:基于环境变量的钱包配置。
  • 交易:通过 split + CLOB 执行方式买入 YES/NO 头寸。
  • 持仓跟踪:跟踪入场价格、当前价格和盈亏(P&L)。
  • 对冲发现:通过逻辑蕴含关系,由 LLM 驱动的覆盖组合发现。

使用方式

安装依赖

在技能目录下执行:

cd {baseDir}
uv sync

首次设置(交易必需)

首次交易前,需设置 Polymarket 合约授权(一次性,消耗约 0.01 POL 的 gas):

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 标志显示完整问题文本而不截断;通过 scripts/markets.py --json trending 使用 --json 标志获取结构化 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>

输出选项:默认输出为格式化表格,显示 Tier、Coverage、Cost、Target 和 Cover;使用 --json 标志获取结构化 JSON 输出;使用 --min-coverage 0.90 按最低覆盖率过滤(默认 0.85);使用 --tier 1 按层级过滤(1=最佳,默认 2)。

覆盖率层级:

  • Tier 1(HIGH):>=95% 覆盖率——接近套利机会
  • Tier 2(GOOD):90-95%——强对冲
  • Tier 3(MODERATE):85-90%——尚可但风险明显
  • Tier 4(LOW):<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)

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

交易流程

  1. 拆分头寸——USDC.e 通过 CTF 合约拆分为 YES + NO 代币
  2. 卖出不需要的一侧——不需要的一侧通过 CLOB 订单簿卖出
  3. 结果——你持有想要的头寸,并从卖出不需要的一侧收回部分成本

示例:以 0.70 美元买入 YES

  • 拆分 100 USDC.e → 100 YES + 100 NO 代币
  • 以约 0.30 美元卖出 100 NO 代币 → 收回约 27 USDC.e
  • 净成本:约 73 美元获得 100 YES 代币(入场价:0.73 美元)

Polymarket 合约(Polygon 主网)

  • USDC.e:0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
  • CTF(Conditional Tokens):0x4D97DCd97eC945f40cF65F87097ACe5EA0476045
  • CTF Exchange:0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E

依赖

使用 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:pass@geo.iproyal.com:12321"
export CLOB_MAX_RETRIES=10  # 默认是 5

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

替代方案:

  • 使用 --skip-sell——保留 YES 和 NO 代币,在 polymarket.com 上手动卖出
  • 不使用代理——拆分仍然有效;只有 CLOB 卖出受影响

如果 CLOB 在所有重试后仍失败,你的拆分仍然成功。输出会告诉你需要手动卖出多少代币。

故障排除

“No wallet available”

设置 POLYCLAW_PRIVATE_KEY 环境变量:

export POLYCLAW_PRIVATE_KEY="0x..."

“Insufficient USDC.e”

使用 uv run python scripts/polyclaw.py wallet status 检查余额。你需要在 Polygon 上拥有 USDC.e(桥接 USDC)。

“CLOB order failed”

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

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

你的拆分仍然成功——你拥有代币,只是无法卖出不需要的一侧。

“Approvals not set”

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

uv run python scripts/polyclaw.py wallet approve

许可证

MIT