catalog/repos/agent-next--polymarket-paper-trader.md

265 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Polymarket模拟交易
`量化交易` `AI代理` `模拟交易` `预测市场` `MCP`
# polymarket-paper-trader
[![PyPI](https://img.shields.io/pypi/v/polymarket-paper-trader.svg)](https://pypi.org/project/polymarket-paper-trader/)
[![Tests](https://github.com/agent-next/polymarket-paper-trader/actions/workflows/test.yml/badge.svg)](https://github.com/agent-next/polymarket-paper-trader/actions/workflows/test.yml)
[![ClawHub](https://img.shields.io/badge/ClawHub-install-orange.svg)](https://clawhub.com/robotlearning123/polymarket-paper-trader)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/agent-next/polymarket-paper-trader/blob/main/LICENSE)
**你的 AI 代理现在成为了 Polymarket 交易员。**
安装 → 代理获得 $10,000 虚拟资金 → 在真实 Polymarket 订单簿上交易 → 追踪盈亏 → 参与公开排行榜竞争。零风险,真实价格。
> "我的 AI 代理在 Polymarket 一周内实现了 +18% 的投资回报率。零风险,真实订单簿。"
隶属于 [agent-next](https://github.com/agent-next) —— 自主进化智能代理开源研究实验室。
## 60 秒演示
```bash
npx clawhub install polymarket-paper-trader # 通过 ClawHub 安装
pm-trader init --balance 10000 # $10k 虚拟资金
pm-trader markets search "bitcoin" # 搜索市场
pm-trader buy will-bitcoin-hit-100k yes 500 # 买入 $500 的 YES
pm-trader stats --card # 生成可分享的统计卡片
```
就这些。你的 AI 代理现在可以零风险地在 Polymarket 上交易了。
## 安装
```bash
# 通过 pip
pip install polymarket-paper-trader
# 通过 ClawHub适用于 OpenClaw 代理)
npx clawhub install polymarket-paper-trader
# 从源码安装(开发模式)
uv pip install -e ".[dev]"
```
需要 Python 3.10+。
## 不是玩具——这是真实的交易所模拟器
其他工具使用模拟价格或随机数。我们模拟真实交易所:
- **逐档订单簿撮合** —— 你的订单逐档消耗真实 Polymarket 买/卖盘的流动性,与真实交易完全一致
- **精确手续费模型** —— `bps/10000 × min(价格, 1-价格) × 份数` —— 与 Polymarket 官方公式相同
- **滑点追踪** —— 每笔交易记录实际成交价与中间价的偏差(以基点计)
- **限价单状态机** —— 支持 GTC长期有效和 GTD定期有效的完整生命周期管理
- **策略回测** —— 将策略在历史价格快照上重放验证
- **多结果市场** —— 不仅限于 YES/NO 二元,支持任意数量的结果
你的虚拟盈亏与真实盈亏的差距不超过买卖价差。这正是本工具的意义所在。
## 快速开始
```bash
# 初始化 $10k 虚拟账户
pm-trader init --balance 10000
# 浏览市场
pm-trader markets list --sort liquidity
pm-trader markets search "bitcoin"
# 交易
pm-trader buy will-bitcoin-hit-100k yes 100 # 买入 $100 的 YES
pm-trader sell will-bitcoin-hit-100k yes 50 # 卖出 50 份
# 查看持仓和盈亏
pm-trader portfolio
pm-trader stats
```
## CLI 命令
| 命令 | 说明 |
|---------|-------------|
| `init [--balance N]` | 创建虚拟交易账户 |
| `balance` | 显示现金、持仓价值和总盈亏 |
| `reset --confirm` | 清除所有数据 |
| `markets list [--limit N] [--sort volume\|liquidity]` | 浏览活跃市场 |
| `markets search QUERY` | 全文搜索市场 |
| `markets get SLUG` | 查看市场详情 |
| `price SLUG` | YES/NO 中间价和价差 |
| `book SLUG [--depth N]` | 订单簿快照 |
| `watch SLUG [SLUG...] [--outcome yes\|no]` | 监控实时价格 |
| `buy SLUG OUTCOME AMOUNT [--type fok\|fak]` | 以市价买入 |
| `sell SLUG OUTCOME SHARES [--type fok\|fak]` | 以市价卖出 |
| `portfolio` | 含实时价格的持仓列表 |
| `history [--limit N]` | 交易历史 |
| `orders place SLUG OUTCOME SIDE AMOUNT PRICE` | 下限价单 |
| `orders list` | 待成交限价单 |
| `orders cancel ID` | 取消限价单 |
| `orders check` | 对照实时价格撮合限价单 |
| `stats [--card\|--tweet\|--plain]` | 胜率、ROI、利润、最大回撤 |
| `leaderboard` | 本地账户排行榜 |
| `pk ACCOUNT_A ACCOUNT_B` | 对战:谁是更好的交易员? |
| `export trades [--format csv\|json]` | 导出交易历史 |
| `export positions [--format csv\|json]` | 导出持仓 |
| `benchmark run MODULE.FUNC` | 运行交易策略 |
| `benchmark compare ACCT1 ACCT2` | 对比账户表现 |
| `benchmark pk STRAT_A STRAT_B` | 对战:谁的策略更强? |
| `accounts list` | 列出所有命名账户 |
| `accounts create NAME` | 创建用于 A/B 测试的账户 |
| `mcp` | 启动 MCP 服务器stdio 传输) |
全局参数:`--data-dir PATH``--account NAME`(或环境变量 `PM_TRADER_DATA_DIR``PM_TRADER_ACCOUNT`)。
## MCP 服务器——你的代理能做什么
你的代理通过 [Model Context Protocol](https://modelcontextprotocol.io) 获得 26 个工具:
```bash
pm-trader-mcp # 在 stdio 上启动
```
添加到你的 Claude Code 配置:
```json
{
"mcpServers": {
"polymarket-paper-trader": {
"command": "pm-trader-mcp"
}
}
}
```
### MCP 工具
| 工具 | 功能说明 |
|------|---------|
| `init_account` | 创建虚拟账户并设置初始余额 |
| `get_balance` | 现金、持仓价值和总盈亏 |
| `reset_account` | 清除所有数据,重新开始 |
| `search_markets` | 按关键词搜索市场 |
| `list_markets` | 按交易量/流动性排序浏览市场 |
| `get_market` | 含结果和价格的市场详情 |
| `get_order_book` | 实时订单簿快照(买盘+卖盘) |
| `watch_prices` | 监控多个市场的价格 |
| `buy` | 以最优价格买入份额 |
| `sell` | 以最优价格卖出份额 |
| `portfolio` | 含实时估值和盈亏的持仓列表 |
| `history` | 含执行详情的近期交易记录 |
| `place_limit_order` | 限价单——保持挂单直至成交、取消或到期 |
| `list_orders` | 待成交限价单 |
| `cancel_order` | 取消待成交订单 |
| `check_orders` | 对照实时价格执行待成交订单 |
| `stats` | 胜率、ROI、利润、最大回撤 |
| `resolve` | 结算已关闭市场(获胜方每份获 $1 |
| `resolve_all` | 结算所有已关闭市场 |
| `backtest` | 在历史快照上回测策略 |
| `stats_card` | 可分享的统计卡片(推文/Markdown/纯文本) |
| `share_content` | 平台专属内容Twitter/Telegram/Discord |
| `leaderboard_entry` | 生成可验证的排行榜提交记录 |
| `leaderboard_card` | 所有本地账户的 Top 10 排行卡片 |
| `pk_card` | 两个账户的头对头对比 |
| `pk_battle` | 两个策略头对头运行并自动对比 |
## 策略示例
`examples/` 目录中提供三个即用策略:
### 动量策略(`examples/momentum.py`
当 YES 价格突破 0.55 时买入0.70 时止盈0.35 时止损。
```bash
pm-trader benchmark run examples.momentum.run
```
### 均值回归策略(`examples/mean_reversion.py`
当 YES 价格跌至公允价值 0.50 以下 12+ 美分时买入,回归时卖出。
```bash
pm-trader benchmark run examples.mean_reversion.run
```
### 网格限价策略(`examples/limit_grid.py`
在当前价格下方布置网格限价买单,并在上方设置止盈卖单。
```bash
pm-trader benchmark run examples.limit_grid.run
```
### 编写自己的策略
```python
# my_strategy.py
from pm_trader.engine import Engine
def run(engine: Engine) -> None:
"""你的策略接收一个完全初始化的 Engine 对象。"""
markets = engine.api.search_markets("crypto")
for market in markets:
if market.closed or market.yes_price < 0.3:
continue
engine.buy(market.slug, "yes", 100.0)
```
```bash
pm-trader benchmark run my_strategy.run
```
使用历史数据进行回测:
```python
def backtest_strategy(engine, snapshot, prices):
"""每个历史价格快照调用一次。"""
if snapshot.midpoint > 0.6:
engine.buy(snapshot.market_slug, snapshot.outcome, 50.0)
```
## 多账户支持
使用隔离账户并行运行多个策略:
```bash
pm-trader --account aggressive init --balance 5000
pm-trader --account conservative init --balance 5000
pm-trader --account aggressive buy some-market yes 500
pm-trader --account conservative buy some-market yes 100
pm-trader benchmark compare aggressive conservative
```
## 分享你的成绩
生成可分享的统计卡片并发布到 X/Twitter
```bash
pm-trader stats --tweet # X/Twitter 优化格式
pm-trader stats --card # Telegram/Discord 的 Markdown 格式
pm-trader stats --plain # 纯文本格式
```
AI 代理可使用 `stats_card` MCP 工具自动生成并分享卡片。
## OpenClaw / ClawHub
已在 [ClawHub](https://clawhub.com) 上以 `polymarket-paper-trader` 名称发布:
```bash
npx clawhub install polymarket-paper-trader
```
## 测试
```bash
pytest -m "not live" # 单元测试 + 集成测试(跳过实时 API 测试)
pytest # 完整测试套件(需要网络)
pytest tests/test_e2e_live.py # 仅实时 API 集成测试
```
## 许可证
MIT