Polymarket Arbitrage
by @johny0920
Monitor and execute arbitrage opportunities on Polymarket prediction markets. Detects math arbitrage (multi-outcome probability mismatches), cross-market arbitrage (same event different prices), and orderbook inefficiencies. Use when user wants to find or trade Polymarket arbitrage, monitor prediction markets for opportunities, or implement automated trading strategies. Includes risk management, P&L tracking, and alerting.
clawhub install polymarket-arbitrageπ About This Skill
name: polymarket-arbitrage description: Monitor and execute arbitrage opportunities on Polymarket prediction markets. Detects math arbitrage (multi-outcome probability mismatches), cross-market arbitrage (same event different prices), and orderbook inefficiencies. Use when user wants to find or trade Polymarket arbitrage, monitor prediction markets for opportunities, or implement automated trading strategies. Includes risk management, P&L tracking, and alerting.
Polymarket Arbitrage
Find and execute arbitrage opportunities on Polymarket prediction markets.
Quick Start
1. Paper Trading (Recommended First Step)
Run a single scan to see current opportunities:
cd skills/polymarket-arbitrage
pip install requests beautifulsoup4
python scripts/monitor.py --once --min-edge 3.0
View results in polymarket_data/arbs.json
2. Continuous Monitoring
Monitor every 5 minutes and alert on new opportunities:
python scripts/monitor.py --interval 300 --min-edge 3.0
Stop with Ctrl+C
3. Understanding Results
Each detected arbitrage includes:
Good opportunities:
math_arb_buy (safer)Arbitrage Types Detected
Math Arbitrage (Primary Focus)
Type A: Buy All Outcomes (prob sum < 100%)
Type B: Sell All Outcomes (prob sum > 100%)
See references/arbitrage_types.md for detailed examples and strategies.
Cross-Market Arbitrage
Same event priced differently across markets (not yet implemented - requires semantic matching).
Orderbook Arbitrage
Requires real-time orderbook data (homepage shows midpoints, not executable prices).
Scripts
fetch_markets.py
Scrape Polymarket homepage for active markets.
python scripts/fetch_markets.py --output markets.json --min-volume 50000
Returns JSON with market probabilities, volumes, and metadata.
detect_arbitrage.py
Analyze markets for arbitrage opportunities.
python scripts/detect_arbitrage.py markets.json --min-edge 3.0 --output arbs.json
Accounts for:
monitor.py
Continuous monitoring with alerting.
python scripts/monitor.py --interval 300 --min-edge 3.0 [--alert-webhook URL]
Features:
polymarket_data/Workflow Phases
Phase 1: Paper Trading (1-2 weeks)
Goal: Understand opportunity frequency and quality
1. Run monitor 2-3x per day 2. Log opportunities in spreadsheet 3. Check if they're still available when you look 4. Calculate what profit would have been
Decision point: If seeing 3-5 good opportunities per week, proceed to Phase 2.
Phase 2: Micro Testing ($50-100 CAD)
Goal: Learn platform mechanics
1. Create Polymarket account 2. Deposit $50-100 in USDC 3. Manual trades only (no automation) 4. Max $5-10 per opportunity 5. Track every trade in spreadsheet
Decision point: If profitable after 20+ trades, proceed to Phase 3.
Phase 3: Scale Up ($500 CAD)
Goal: Increase position sizes
1. Increase bankroll to $500 2. Max 5% per trade ($25) 3. Still manual execution 4. Implement strict risk management
Phase 4: Automation (Future)
Requires:
Only consider after consistently profitable manual trading.
See references/getting_started.md for detailed setup instructions.
Risk Management
Critical Rules
1. Maximum position size: 5% of bankroll per opportunity 2. Minimum edge: 3% net (after fees) 3. Daily loss limit: 10% of bankroll 4. Focus on buy arbs: Avoid sell-side until experienced
Red Flags
Fee Structure
Polymarket charges:
Conservative assumption: 2% per leg (assume taker)
Breakeven calculation:
Target: 3-5% NET profit (after fees)
Common Issues
"High edge but disappeared"
Homepage probabilities are stale or represent midpoints, not executable prices. This is normal. Real arbs disappear in seconds.
"Can't execute at displayed price"
Liquidity issue. Low-volume markets show misleading probabilities. Stick to $1M+ volume markets.
"Edge is too small after fees"
Increase --min-edge threshold. Try 4-5% for more conservative filtering.
Files and Data
All monitoring data stored in ./polymarket_data/:
markets.json - Latest market scanarbs.json - Detected opportunitiesalert_state.json - Deduplication state (which arbs already alerted)Advanced Topics
Telegram Integration (Future)
Pass webhook URL to monitor script for alerts:
python scripts/monitor.py --alert-webhook "https://api.telegram.org/bot/sendMessage?chat_id="
Position Sizing
For a 2-outcome math arb with probabilities pβ and pβ where pβ + pβ < 100%:
Optimal allocation:
This ensures equal profit regardless of which outcome wins.
Simplified rule: For small edges, split capital evenly across outcomes.
Execution Speed
Arbs disappear fast. If planning automation:
Resources
Support
For skill issues:
references/arbitrage_types.md for strategy detailsreferences/getting_started.md for setup helppolymarket_data/pip install requests beautifulsoup4π‘ Examples
1. Paper Trading (Recommended First Step)
Run a single scan to see current opportunities:
cd skills/polymarket-arbitrage
pip install requests beautifulsoup4
python scripts/monitor.py --once --min-edge 3.0
View results in polymarket_data/arbs.json
2. Continuous Monitoring
Monitor every 5 minutes and alert on new opportunities:
python scripts/monitor.py --interval 300 --min-edge 3.0
Stop with Ctrl+C
3. Understanding Results
Each detected arbitrage includes:
Good opportunities:
math_arb_buy (safer)