Skip to content

clee12111/polymarket-live

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

polymarket-live

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-autopsy repo 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.


What this repo is

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

What ran here

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.


Structure

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.

Data flow with polymarket-vault

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.


Kill switches

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.


What this repo is not

  • 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.

Companion repository

  • 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.

About

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.

About

Live wallet, kill switches, and execution code for the 45-day Polymarket trading bot. Companion to polymarket-autopsy.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages