Your AI agent trades Polymarket — $10k paper money, real prices, zero risk. Compete on the leaderboard.
Project description
polymarket-paper-trader
Your AI agent just became a Polymarket trader.
Install → your agent gets $10,000 paper money → trades real Polymarket order books → tracks P&L → competes on a public leaderboard. Zero risk. Real prices.
"My AI agent hit +18% ROI on Polymarket in one week. Zero risk, real order books."
Part of agent-next — open research lab for self-evolving autonomous agents.
60-second demo
npx clawhub install polymarket-paper-trader # install via ClawHub
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
That's it. Your AI agent is now trading Polymarket with zero risk.
Install
# via pip
pip install polymarket-paper-trader
# via ClawHub (for OpenClaw agents)
npx clawhub install polymarket-paper-trader
# from source (development)
uv pip install -e ".[dev]"
Requires Python 3.10+.
Not a toy — this is a real exchange simulator
Other tools mock prices or use random numbers. We simulate the actual exchange:
- Level-by-level order book execution — your order walks the real Polymarket ask/bid book, consuming liquidity at each price level, just like a real trade
- Exact fee model —
bps/10000 × min(price, 1-price) × shares— the same formula Polymarket uses - Slippage tracking — every trade records how much worse your fill was vs the midpoint, in basis points
- Limit order state machine — GTC (good-til-cancelled) and GTD (good-til-date) with full lifecycle
- Strategy backtesting — replay your strategy against historical price snapshots
- Multi-outcome markets — not just YES/NO binary, supports any number of outcomes
Your paper P&L would match real P&L within the spread. That's the point.
Quick start
# 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
CLI commands
| Command | Description |
|---|---|
init [--balance N] |
Create paper trading account |
balance |
Show cash, positions value, total P&L |
reset --confirm |
Wipe all data |
markets list [--limit N] [--sort volume|liquidity] |
Browse active markets |
markets search QUERY |
Full-text market search |
markets get SLUG |
Market details |
price SLUG |
YES/NO midpoints and spread |
book SLUG [--depth N] |
Order book snapshot |
watch SLUG [SLUG...] [--outcome yes|no] |
Monitor live prices |
buy SLUG OUTCOME AMOUNT [--type fok|fak] |
Buy at market price |
sell SLUG OUTCOME SHARES [--type fok|fak] |
Sell at market price |
portfolio |
Open positions with live prices |
history [--limit N] |
Trade history |
orders place SLUG OUTCOME SIDE AMOUNT PRICE |
Limit order |
orders list |
Pending limit orders |
orders cancel ID |
Cancel a limit order |
orders check |
Fill limit orders if price crosses |
stats [--card|--tweet|--plain] |
Win rate, ROI, profit, max drawdown |
leaderboard |
Local account rankings |
pk ACCOUNT_A ACCOUNT_B |
Battle: who's the better trader? |
export trades [--format csv|json] |
Export trade history |
export positions [--format csv|json] |
Export positions |
benchmark run MODULE.FUNC |
Run a trading strategy |
benchmark compare ACCT1 ACCT2 |
Compare account performance |
benchmark pk STRAT_A STRAT_B |
Battle: who's the better trader? |
accounts list |
List named accounts |
accounts create NAME |
Create account for A/B testing |
mcp |
Start MCP server (stdio transport) |
Global flags: --data-dir PATH, --account NAME (or env vars PM_TRADER_DATA_DIR, PM_TRADER_ACCOUNT).
MCP server — what your agent can do
Your agent gets 26 tools via the Model Context Protocol:
pm-trader-mcp # starts on stdio
Add to your Claude Code config:
{
"mcpServers": {
"polymarket-paper-trader": {
"command": "pm-trader-mcp"
}
}
}
MCP tools
| Tool | What it does |
|---|---|
init_account |
Create paper account with starting balance |
get_balance |
Cash, positions value, total P&L |
reset_account |
Wipe all data and start fresh |
search_markets |
Find markets by keyword |
list_markets |
Browse markets sorted by volume/liquidity |
get_market |
Market details with outcomes and prices |
get_order_book |
Live order book snapshot (bids + asks) |
watch_prices |
Monitor prices for multiple markets |
buy |
Buy shares at best available prices |
sell |
Sell shares at best available prices |
portfolio |
Open positions with live valuations and P&L |
history |
Recent trade log with execution details |
place_limit_order |
Limit order — stays open until filled or cancelled/expired |
list_orders |
Pending limit orders |
cancel_order |
Cancel a pending order |
check_orders |
Execute pending orders against live prices |
stats |
Win rate, ROI, profit, max drawdown |
resolve |
Resolve a closed market (winners get $1/share) |
resolve_all |
Resolve all closed markets |
backtest |
Backtest a strategy against historical snapshots |
stats_card |
Shareable stats card (tweet/markdown/plain) |
share_content |
Platform-specific content (twitter/telegram/discord) |
leaderboard_entry |
Generate verifiable leaderboard submission |
leaderboard_card |
Top 10 ranking card from all local accounts |
pk_card |
Head-to-head comparison between two accounts |
pk_battle |
Run two strategies head-to-head, auto-compare |
Strategy examples
Three ready-to-use strategies in examples/:
Momentum (examples/momentum.py)
Buys when YES price crosses above 0.55, takes profit at 0.70, stops loss at 0.35.
pm-trader benchmark run examples.momentum.run
Mean reversion (examples/mean_reversion.py)
Buys when YES price drops 12+ cents below 0.50 fair value, sells when it reverts.
pm-trader benchmark run examples.mean_reversion.run
Limit grid (examples/limit_grid.py)
Places a grid of limit buy orders below current price with take-profit sells above.
pm-trader benchmark run examples.limit_grid.run
Writing your own strategy
# 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 benchmark run my_strategy.run
For backtesting with historical data:
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)
Multi-account support
Run parallel strategies with isolated accounts:
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
Share your results
Generate a shareable stats card and post to X/Twitter:
pm-trader stats --tweet # X/Twitter optimized
pm-trader stats --card # markdown for Telegram/Discord
pm-trader stats --plain # plain text
AI agents can use the stats_card MCP tool to generate and share cards automatically.
OpenClaw / ClawHub
Available on ClawHub as polymarket-paper-trader:
npx clawhub install polymarket-paper-trader
Tests
pytest -m "not live" # unit + integration (skips live API tests)
pytest # full test suite (requires network)
pytest tests/test_e2e_live.py # live API integration tests only
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file polymarket_paper_trader-0.1.7.tar.gz.
File metadata
- Download URL: polymarket_paper_trader-0.1.7.tar.gz
- Upload date:
- Size: 93.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc822b6942ba7e373052fbd79c55ab6ab4664abb694b4393927106007ac6fc70
|
|
| MD5 |
fee6d0fa3fa768349e1892ea3bc4f75b
|
|
| BLAKE2b-256 |
b1703c7821909060728281dc46a30d1b75dca84e0ff28ad0bae20aa148ea6846
|
File details
Details for the file polymarket_paper_trader-0.1.7-py3-none-any.whl.
File metadata
- Download URL: polymarket_paper_trader-0.1.7-py3-none-any.whl
- Upload date:
- Size: 46.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79b7f6e54a65479b35ccd3b0c9720c06b0d6c32152c19f8f00ed5f7d1da09bd5
|
|
| MD5 |
423c4835620822b482483363c442c46c
|
|
| BLAKE2b-256 |
f642830540743dc8c918352969d1a1137b7a7a4523f028c25dc504f784bf20ef
|