Status: Project concluded May 13, 2026. This repository is the live execution environment from the 45-day Polymarket trading bot project. No active development. See the
polymarket-autopsyrepo for the full forensic record, methodology, and findings.
Live execution environment for Polymarket trading bots, separated from research and paper trading by design. This repo held the wallet auth, order submission, kill switches, and live trade logging that ran the 6 bots deployed to real capital in May 2026.
For project context — what was built, what broke, and what survived — start with the 2-page reflective summary in the companion autopsy repo.
Separation of concerns was an architectural decision early in the project. Live execution code (this repo) was kept physically isolated from research code (polymarket-vault, permanently private). Two reasons:
- Capital safety. If the research VPS failed, I lost data and time. If the live VPS failed, I could lose money. Sharing infrastructure between paper and live execution would have coupled those failure modes.
- Geo-blocking. Polymarket is geo-blocked from US IPs; Binance Global (the price feed) is geo-blocked from US IPs. Research ran in Frankfurt (closest to both data centers). Live execution ran in Amsterdam (the lowest-latency non-blocked region tested for live order submission).
In scope for this repo:
- Live execution of validated bots only
- Wallet auth and order submission via Polymarket CLOB API
- Kill switches and risk controls
- Live trade logging
Not in scope (lived in the private research vault):
- Experimentation, paper trading, signal research
- Multi-bot fleet (180 paper bots vs. 6 live bots)
- LLM wallet classification, operator reverse-engineering
- Forensic analysis and bug investigation
Six architectures deployed to real capital between May 11 15:30 UTC and May 13 02:15 UTC (~35 hours of live execution before the project concluded).
| Architecture | Fills | WR | PnL | EV/fill |
|---|---|---|---|---|
sniper_tight_a_only |
37 | 70.3% | +$2.93 | +$0.08 |
reversion_01_45_d4 |
2 | 50.0% | +$0.49 | +$0.25 |
conviction_v1 |
2 | 50.0% | -$1.80 | -$0.90 |
surgical |
11 | 36.4% | -$6.70 | -$0.61 |
ohanism_loose_bilateral |
32 | 43.8% | -$16.31 | -$0.51 |
barbell |
21 | 42.9% | -$60.05 | -$2.86 |
| TOTAL | 105 | 52.4% | -$81.44 | -$0.78 |
sniper_tight_a_only was the only bot that produced positive PnL. At N=37 fills, the 95% CI on EV/fill spans roughly $[-$0.40, +$0.56]$ — indistinguishable from zero. The honest read is "insufficient data to disambiguate small real edge from lucky variance."
The full anti-prediction finding (Spearman ρ = -0.43 between paper EV and live EV) and the three classes of measurement bugs that explain it are documented in the autopsy.
polymarket-live/
├── bots/ ← config folders for each deployed architecture
│ ├── live_sniper_tight_a_only/ (the one bot with positive PnL)
│ ├── live_reversion_01_45_d4/
│ ├── live_conviction_v1/
│ └── live_barbell/
├── src/ ← live execution code
│ ├── live_trader.py (base live execution loop)
│ ├── live_trader_v2.py (revised execution loop)
│ ├── live_trader_barbell.py (architecture-specific variants)
│ ├── live_trader_conviction.py
│ ├── live_trader_ohanism.py
│ ├── live_trader_regime_loose.py
│ ├── live_trader_reversion.py
│ ├── kill_switches.py (drawdown / consecutive-loss / blowup checks)
│ ├── btc_feed.py (Binance WebSocket price feed)
│ ├── btc_market.py (BTC distance/momentum signal calculation)
│ ├── clob_session.py (Polymarket CLOB auth + order submission)
│ ├── resolver.py (market resolution checking)
│ ├── state_store.py (live state persistence)
│ ├── telegram_alert.py (alerting on kill switch / errors)
│ └── paper_signal/ (signal-generation parity layer with paper bots)
├── scripts/ ← deployment, verification, simulation utilities
│ ├── auth_test.py (CLOB API auth smoke test)
│ ├── test_order_one_dollar.py ($1 test order for end-to-end verification)
│ ├── compare_fills.py (live vs paper fill comparison)
│ ├── reconcile_wallet.py (on-chain wallet state reconciliation)
│ ├── edge_cell_verify.py (signal cell verification)
│ └── *_sim.py (cooldown, held-time, threshold, min-edge simulations)
├── deploy_live_trader_v2.py (one-shot deploy script)
├── config/ (empty locally — config snapshots live on VPS)
├── data/ (empty locally — SQLite live_state.db lived on VPS)
├── logs/ (empty locally — trade CSVs lived on VPS)
├── .env.example ← wallet auth + API keys template
└── .gitignore
Notes on what's not in this repo:
live_state.db(the live trading state SQLite) lived on the Amsterdam VPS, not in the repo.- Trade log CSVs lived in
logs/on the VPS, not committed to git. - Two architectures referenced in the autopsy (
surgical,ohanism_loose_bilateral) ran through generic execution paths rather than dedicated config folders — only the 4 above had their own bot directories.
One-way: live → research. Live trade CSVs from logs/ were rsynced to polymarket-vault/Data/live/ for analysis. Strategy updates flowed research → live manually, never automated. The manual flow was a deliberate safety choice — every config change to a live bot required a human in the loop.
Three kill switch classes were active throughout the live deployment:
- DRAWDOWN — fire if account drawdown exceeds -5% over any 20-trade window
- CONSECUTIVE_LOSSES — fire after 8+ consecutive losing trades
- LIVE_BLOWUP — fire if -7% loss over any 20 trades (stops the entire project)
None of the kill switches triggered during the live deployment window — the project concluded by deliberate end of the 45-day timeline, not by kill switch.
- Not the bot strategy. The actual trading logic (distance thresholds, edge grids, momentum signals) lived in the private research vault and was ported here only after validation. Reading this repo will not reveal the strategy.
- Not actively maintained. Project concluded; no updates planned.
- Not a template. The architecture decisions here (Frankfurt + Amsterdam VPS split, geo-blocking-driven topology, separation from research) were specific to this 45-day project's constraints. They may not generalize.
- polymarket-autopsy — Forensic record of the full 45-day project. Includes 2-page reflective summary, 15-page technical autopsy, figures, and curated forensic documents from the private research vault.
Built solo over 45 days (April 21 – June 4, 2026) on $1,500 of starting capital, as the two months before college graduation. The trading strategy produced no detectable edge; the engineering work it forced — measurement bug debugging, infrastructure under geo-blocking constraints, LLM-augmented solo workflow — is documented in the autopsy.