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

265 lines
9.0 KiB
Markdown
Raw Permalink Normal View History

2026-04-07 11:44:56 +08:00
# 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