Buys the underpriced side when the Polymarket AMM price diverges from the live CLOB orderbook midpoint. No outcome prediction — pure spread arbitrage. Exits automatically via take-profit or time-stop.
Polymarket has two pricing mechanisms:
When they diverge by more than min_edge (default 3%), the AMM is mispriced. The skill buys the cheap side and exits when prices converge or the time window closes.
export SIMMER_API_KEY=sk_live_...
# Dry run (SIM mode — safe, no real money)
python spread_sniper.py
# Live trading
python spread_sniper.py --live
# Show open positions with P&L
python spread_sniper.py --positions
# P&L summary (realized + unrealized)
python scripts/spread_pnl.py
# P&L history log
python scripts/spread_pnl.py --history
All settings can be overridden via environment variables or tuned from the Simmer dashboard.
| Setting | Env Var | Default | Description |
|---|---|---|---|
| --------- | --------- | --------- | ------------- |
| Min edge | SIMMER_SPREAD_MIN_EDGE | 0.03 | Min AMM/CLOB divergence to trade (3%) |
| Min volume | SIMMER_SPREAD_MIN_VOLUME | 5000 | Min 24h volume in USD |
| Max position | SIMMER_SPREAD_MAX_POSITION | 5.00 | Max USD per trade |
| Max trades/run | SIMMER_SPREAD_MAX_TRADES | 3 | Max new trades per scan |
| Min price | SIMMER_SPREAD_MIN_PRICE | 0.10 | Never buy below 10¢ |
| Max price | SIMMER_SPREAD_MAX_PRICE | 0.90 | Never buy above 90¢ |
| Max hours | SIMMER_SPREAD_MAX_HOURS | 24 | Skip markets resolving >24h out |
| Max CLOB spread | SIMMER_SPREAD_MAX_CLOB_SPREAD | 0.05 | Skip illiquid books (bid-ask > 5¢) |
| Daily spend cap | SIMMER_SPREAD_DAILY_MAX | 100.00 | Max USD deployed per day |
| Take-profit | SIMMER_SPREAD_TP_PCT | 0.60 | Exit when 60% of entry edge captured |
| Time-stop | SIMMER_SPREAD_TS_PCT | 0.50 | Exit when 50% of market window elapsed |
| Market exclude | SIMMER_SPREAD_EXCLUDE | (68 keywords) | Comma-separated keywords to skip |
Positions are checked on every scan:
take_profit_pct × entry_edge toward fair valuetime_stop_pct of the market's remaining window has elapsed since entry, or when <2h left regardless# Snapshot: realized (from Simmer resolved API) + unrealized (open positions)
python scripts/spread_pnl.py
# Full history log
python scripts/spread_pnl.py --history
# Open positions detail
python scripts/spread_pnl.py --positions
Log appended to spread_pnl.log on each run. Cron-safe.
spread_sniper.py # Main bot — scan + entry + exit
config.json # Runtime config overrides (takes precedence over env vars)
clawhub.json # ClawHub + automaton config
scripts/
spread_pnl.py # P&L tracker (realized via Simmer API + unrealized)
sim_redeem.py # Redeem resolved SIM positions
spread_positions.json # Local position journal
spread_daily.json # Daily spend state
spread_pnl.log # P&L snapshot log
共 1 个版本