关于 Polymarket Paper Trader
Polymarket Paper Trader 为 AI Agent 和预测市场策略评估者提供模拟交易环境,使用实时订单簿及交易所的费用与成交机制,并支持策略比较和绩效排名。
主要功能
- 01创建可设定余额的模拟账户
- 02使用 Polymarket 实时订单簿和费用机制
- 03买入、卖出及限价单
- 04查看持仓、历史和盈亏统计
- 05多账户及策略比较
适用场景
- 01无资金风险地练习交易
- 02比较不同模拟账户的策略
- 03检查成交、收益和最大回撤
MCP 相关
MCP 服务向 MCP 客户端提供市场查询、订单簿、交易、持仓和绩效工具,并附带交易手册提示词与资源。项目支持 stdio 和 streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
polymarket-paper-trader
面向 AI Agent 的零风险真实预测市场训练场——真实订单簿、官方费用、经验证的成交保真度。练习、评估并衡量决策智能。
Agent 每天都在判断概率。Polymarket 是全球最大的预测市场,其订单簿是诚实的计分板:真实资金、真实价格、真实结果。但你不能把钱包交给 Agent 让它学习。因此,本项目为每个 Agent 提供了 SWE-bench 为编码人员提供的东西——一个忠实的环境,让判断产生后果并接受评分:
- 练习——你的 Agent 使用 10,000 美元模拟资金,在实时 Polymarket 订单簿上交易,采用与真实交易所相同的费用模型和成交机制
- 评估——本仓库中的
polymarket-benchmark评估工具(需单独安装)可使用预测市场决策集评估任意模型(Brier 分数、校准度、alpha) - 比较——多账户对战和排行榜可对 Agent 进行排名比较
- 竞赛——Forecast Arena:实时公开排行榜,AI 模型和简单基线每天对相同的 Polymarket 问题进行预测,并依据真实结果评分(Brier 分数)。该服务基于本仓库运行(提交你的模型 · 工作流 · 原始数据)。
这是 agent-next 项目的一部分——致力于构建 Agent 化世界。
60 秒演示
pip install polymarket-paper-trader
pm-trader init --balance 10000 # $10k paper money
pm-trader markets search "bitcoin" # find markets
pm-trader buy will-bitcoin-hit-100k yes 500 # buy $500 of YES
pm-trader stats --card # shareable stats card
不想安装?运行 uvx --from polymarket-paper-trader pm-trader-mcp,即可启动你的 Agent 要连接的 MCP 服务(参见下方的兼容平台)。
就是这样。你的 AI Agent 现在可以零风险地在 Polymarket 上交易了。
安装
# via pip (CLI + MCP server)
pip install polymarket-paper-trader
# or the MCP server alone, with no install
uvx --from polymarket-paper-trader pm-trader-mcp
# from source (development)
uv pip install -e ".[dev]"
需要 Python 3.10+。
兼容平台
所有上述运行环境的完整可复制配置(以及 Grok/xAI 远程 MCP 配置):docs/integrations.md。
支持 MCP Apps 的宿主会将 portfolio 和 stats 渲染为内嵌仪表板;其他宿主则会显示相同的文本结果。
在 ChatGPT / Claude.ai / 个人 Agent 中使用
对于只支持 HTTP 的宿主,可以使用远程模式:运行
pm-trader-mcp --transport streamable-http,并启用可选的 --auth-issuer、
--auth-audience 和 --resource-url 标志,然后在宿主的远程 MCP 设置中添加服务器的 /mcp
URL。该模式默认关闭,并且需要由你运营的 OAuth/OIDC 颁发者——pm-trader 会根据它验证 bearer token,并为每个经过验证的主体分配独立的模拟账户。没有可供添加的托管端点:你需要自行运行服务器。设置方法、威胁模型和环境变量等效配置:docs/remote-mcp.md。
快速开始
# Initialize with $10k paper balance
pm-trader init --balance 10000
# Browse markets
pm-trader markets list --sort liquidity
pm-trader markets search "bitcoin"
# Trade
pm-trader buy will-bitcoin-hit-100k yes 100 # buy $100 of YES
pm-trader sell will-bitcoin-hit-100k yes 50 # sell 50 shares
# Check portfolio and P&L
pm-trader portfolio
pm-trader stats
工作原理——以及为何值得信赖
- 你的订单会按真实订单簿成交。 买单会从最低价开始,消耗实时卖盘的各个价位,方式与真实吃单完全相同——滑点真实存在,并以基点报告
- 费用遵循官方的逐笔撮合曲线——
fee = C × rate × p × (1-p),四舍五入到小数点后 5 位,做市商免手续费(确切规格见 CHANGELOG)——根据每个市场公布的费用表,按成交价位逐笔收取,而非使用近似值 - 模拟资金,真实纪律。 未成交的买单会冻结资金,部分成交后剩余部分仍保持挂单状态,已关闭或暂停的市场会拒绝交易,并且限价会根据最小价格变动单位进行验证
- 结算时每股支付 1 美元。 市场关闭时调用
resolve(或resolve --all),获胜方会像真实市场一样获得赔付 - 经过验证的保真度。 实时测试套件会断言模拟成交价落在市场实际报价区间内(Data API v2 价格历史),并验证费用与官方曲线完全一致——CI 中会针对真实 API 运行
- 与上游保持一致。 客户端跟踪当前的 Gamma / CLOB / Data API 接口,并通过实时探测验证合约
- 多结果市场——支持任意数量的结果,而不只是 YES/NO
- 也支持 Kalshi。 使用同一组命令和工具对 Kalshi 市场进行模拟交易,只需传入
kalshi:<ticker>slug(pm-trader buy kalshi:KXNBAGAME-26OCT16DENLAL-LAL yes 25);使用kalshi markets查找市场。费用遵循各系列公布的曲线(docs/kalshi.md) - 核心包覆盖率门槛为 100%,并包含针对实时 API 的端到端测试
CLI 命令
| 命令 | 描述 |
|---|---|
init [--balance N] | 创建模拟交易账户 |
balance | 显示现金、已预留/可用现金、持仓价值和总盈亏 |
reset --confirm | 清除所有数据 |
markets list [--limit N] [--sort volume|liquidity] | 浏览活跃市场 |
markets search QUERY | 全文搜索市场 |
markets get SLUG | 市场详情 |
markets tags | 列出所有市场类别/标签 |
markets event 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] | 交易历史 |
kalshi markets [--limit N] [--status open|closed|settled] [--series T] [--event T] | Kalshi 市场(只读) |
kalshi market TICKER | 单个 Kalshi 市场(只读) |
kalshi book TICKER [--depth N] | Kalshi YES 订单簿(只读) |
orders place SLUG OUTCOME SIDE AMOUNT PRICE | 限价单(GTC/GTD) |
orders list | 未完成的限价单(待成交和部分成交) |
orders cancel ID | 取消限价单 |
orders cancel-all | 一次性取消所有待处理的限价单 |
orders check | 价格触及时撮合限价单 |
stats [--card|--tweet|--plain] | 胜率、投资回报率、利润、最大回撤 |
resolve [SLUG] [--all] | 结算已关闭的市场,或所有已关闭的市场(获胜者每股得 $1) |
leaderboard | 本地账户排名 |
pk ACCOUNT_A ACCOUNT_B | 对战:谁是更优秀的交易者? |
export trades [--format csv|json] | 导出交易历史 |
export positions [--format csv|json] | 导出持仓 |
strategy run MODULE.FUNC | 运行交易策略 |
strategy compare ACCT1 ACCT2 | 比较账户表现 |
strategy pk STRAT_A STRAT_B | 对战:谁是更优秀的交易者? |
benchmark run MODULE.FUNC | strategy run 的别名 |
benchmark compare ACCT1 ACCT2 | strategy compare 的别名 |
benchmark pk STRAT_A STRAT_B | strategy pk 的别名 |
accounts list | 列出命名账户 |
accounts create NAME | 创建用于 A/B 测试的账户 |
accounts delete NAME --confirm | 删除指定账户及其所有数据 |
mcp | 启动 MCP 服务(stdio 传输) |
全局标志:--data-dir PATH、--account NAME(或环境变量 PM_TRADER_DATA_DIR、PM_TRADER_ACCOUNT)。
MCP 服务——你的 Agent 能做什么
你的 Agent 可通过 Model Context Protocol 使用以下工具。
该服务还附带完整的交易指南——作为 MCP 服务的
instructions、trading_playbook 提示词,以及 skill://trading-playbook
资源——因此,仅使用 MCP 的客户端(Cursor、Claude.ai 连接器、Grok API 远程
MCP、ChatGPT 应用)也能获得具备技能感知能力的 Agent 从
skill/polymarket-paper-trader/SKILL.md 中获取的相同指导。
pm-trader-mcp # starts on stdio
# or, with no local install:
uvx --from polymarket-paper-trader pm-trader-mcp
添加到你的 Claude Code 配置中:
{
"mcpServers": {
"polymarket-paper-trader": {
"command": "pm-trader-mcp"
}
}
}
远程传输(streamable-http)
对于仅支持 HTTP 的 MCP 客户端,使用 --transport streamable-http 运行服务:
pm-trader-mcp --transport streamable-http --host 127.0.0.1 --port 8000
# or: pm-trader mcp --transport streamable-http --host 127.0.0.1 --port 8000
随后,MCP 端点为 http://<host>:<port>/mcp。调用方之间没有隔离——所有能够访问该服务的人都共享其中的所有模拟交易账户;该服务仅供自行托管,不是面向公众的多用户服务。此传输方式没有身份验证;任何能够访问该端口的人都可以调用所有已公开的工具。backtest 和
pk_battle(本地文件读取 + 本地策略模块执行)仅支持 stdio,通过 streamable-http 提供服务时不会注册。
Docker
docker build -t pm-trader-mcp .
docker run -p 127.0.0.1:8000:8000 -v pm-trader-data:/root/.pm-trader pm-trader-mcp
除非在前面放置真正的身份验证代理,否则请仅将端口发布到 127.0.0.1(如上所示)——容器本身没有身份验证功能。
MCP 工具
| 工具 | 功能 |
|---|---|
init_account | 创建具有初始余额的模拟账户 |
get_balance | 现金、预留/可用现金、持仓价值、总盈亏 |
reset_account | 清除所有数据并重新开始 |
search_markets | 按关键词查找市场 |
list_markets | 按成交量/流动性排序浏览市场 |
get_tags | 获取用于筛选的所有市场类别/标签 |
get_markets_by_tag | 获取指定类别/标签中的市场 |
get_event | 获取事件详情——一组相关市场 |
get_market | 获取包含结果和价格的市场详情 |
get_order_book | 获取实时订单簿快照(买单 + 卖单) |
kalshi_markets | 获取 Kalshi 市场,只读(开放/已关闭/已结算,可按系列或事件筛选) |
kalshi_market | 按代码获取单个 Kalshi 市场,只读 |
kalshi_book | 获取实时 Kalshi YES 订单簿,只读 |
watch_prices | 监控多个市场的价格 |
buy | 按当前最优价格买入份额 |
sell | 按当前最优价格卖出份额 |
portfolio | 查看包含实时估值和盈亏的未平仓头寸 |
history | 查看近期交易记录及执行详情 |
place_limit_order | 限价单——保持挂单状态,直至成交、取消或过期 |
list_orders | 查看待处理的限价单 |
cancel_order | 取消待处理的订单 |
cancel_all_orders | 一次性取消所有待处理的限价单 |
check_orders | 按实时价格执行待处理的订单 |
stats | 胜率、投资回报率、利润、最大回撤 |
resolve | 结算已关闭的市场(获胜者每份额获得 $1) |
resolve_all | 结算所有已关闭的市场 |
backtest | 使用历史快照对策略进行回测(仅 stdio) |
stats_card | 可分享的统计卡片(推文/Markdown/纯文本) |
share_content | 针对特定平台的内容(twitter/telegram/discord) |
leaderboard_entry | 生成可验证的排行榜提交 |
leaderboard_card | 根据所有本地账户生成前 10 名排名卡片 |
pk_card | 对比两个账户的正面对决结果 |
pk_battle | 让两个策略正面对决并自动比较(仅 stdio) |
策略示例
examples/ 中提供了三个可直接使用的策略:
动量策略(examples/momentum.py)
当 YES 价格突破 0.55 时买入,在 0.70 止盈,在 0.35 止损。
pm-trader strategy run examples.momentum.run
均值回归(examples/mean_reversion.py)
当 YES 价格低于 0.50 公允价值至少 12 美分时买入,价格回归时卖出。
pm-trader strategy run examples.mean_reversion.run
限价网格(examples/limit_grid.py)
在当前价格下方布设一系列限价买单,并在上方挂出止盈卖单。
pm-trader strategy run examples.limit_grid.run
Jev 优势策略(examples/jev_edge.py)
“Jev 对决市场”:针对每个二元市场询问 Jev 给出 YES 概率,并买入其看好的方向;跳过价格在 [0.05, 0.95] 以外、手续费影响过大的市场——运行 pm-trader strategy run examples.jev_edge.run(需要 pip install -e "benchmark")。
编写自己的策略
策略从 examples. 包中导入(允许列表位于 pm_trader/benchmark.py),因此请将你的文件放在那里:
# examples/my_strategy.py
from pm_trader.engine import Engine
def run(engine: Engine) -> None:
"""Your strategy receives a fully initialized 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)
pm-trader strategy run examples.my_strategy.run
使用历史数据进行回测:
def backtest_strategy(engine, snapshot, prices):
"""Called once per historical price snapshot."""
if snapshot.midpoint > 0.6:
engine.buy(snapshot.market_slug, snapshot.outcome, 50.0)
评估你的 Agent:polymarket-benchmark
模拟交易器是训练场;本仓库中的 polymarket-benchmark 包则是记分牌。它需要单独安装(不属于 pm-trader CLI——pm-trader strategy 用于重放交易策略(pm-trader benchmark 仍是其别名),请参阅上方的 CLI 表格):
pip install -e "benchmark[dev]"
cd benchmark && polymarket-benchmark run --model opencode/jev-1.13-free --market-set mini
让两个模型正面对决,看看谁的判断更准确。市场集、评分方式(Brier、校准度、alpha)和模型设置详见:benchmark/README.md。
多账户支持
使用相互隔离的账户并行运行策略:
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 strategy compare aggressive conservative
分享你的结果
生成可分享的统计卡片并发布到 X/Twitter:
pm-trader stats --tweet # X/Twitter optimized
pm-trader stats --card # markdown for Telegram/Discord
pm-trader stats --plain # plain text
AI Agent 可以使用 stats_card MCP 工具自动生成并分享卡片。
诚实说明限制
- 仅限纸面模拟。 从不使用钱包、密钥、真实交易或真实资金。结算收益模拟为每份额 $1
- 模拟质量通过实时订单簿和价格历史进行验证,但真实交易还涉及排队位置、延迟和交易对手行为,这些因素是任何模拟器都无法保证的
- 实时市场数据需要访问 Polymarket 的公共 API(无需密钥)
OpenClaw / ClawHub
可在 ClawHub 获取,名称为 polymarket-paper-trader:
npx clawhub install polymarket-paper-trader
GitHub 机器人
在议题或 PR 下评论 /oc 或 /opencode。新议题会收到分流回复;非草稿 PR 会收到浅层审查。只有在有人类添加 bot:implement 标签或评论 /oc implement 后,才会开始实施(使用 FreeInference deepseek-v4-flash;实施推送仅使用作用域限定为 contents/issues/PRs 的 GITHUB_TOKEN,不具备 Actions 访问权限,因此由单独的 dispatch-tests 作业重新验证推送的分支引用、确认该引用上的 .github/workflows/test.yml 与默认分支完全一致,然后运行 gh workflow run Tests --ref;使用令牌进行的推送不会触发 CI)。合并始终由人工操作:机器人绝不会合并,并且分支保护会强制执行必需的检查。问答 / 分流 / 审查继续使用 qwen3.6-35b。不使用钱包,不进行真实交易。会话不会共享。
本仓库中的其他内容
纸面交易器是产品;另有三个配套软件包与其并列。
| 软件包 | 目录 | 说明 |
|---|---|---|
polymarket-benchmark | benchmark/ | 大模型评估框架 — 参见评估你的 Agent |
polymarket-leaderboard-client | leaderboard-client/ | 兼容的排行榜服务的客户端 SDK:注册 Agent、交易、读取投资组合和统计数据。 |
polymarket-leaderboard | leaderboard-server/ | 面向 Agent 的 FastAPI 排行榜服务 — 账户、交易、排名和一个小型网站 |
有关如何参与各个软件包的开发,请参阅 CONTRIBUTING.md;有关发布历史,请参阅 CHANGELOG.md。
测试
pytest -m "not live" # unit + integration, 100% coverage gate
pytest # full suite (requires network)
pytest tests/test_e2e_live.py # live API integration tests only
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
