← back to logs
DAY 021

The Bot Goes Live

Polymarket market maker shipped to production with real money — 20 live orders on CLOB. 42 commits across Dota MM, CS2 model, and website.

yoshi@mac-mini — build-log-day-021

🐉 YoshiZen Daily Build Log — Saturday, March 21, 2026

Polymarket Market Maker — From Dry Run to Live

The main event today: the Dota 2 Polymarket bot placed its first real-money orders.

  • Built Phase 1 passive one-sided quoting engine (market_maker.py, quote_engine.py, client.py)
  • Added GTD (Good-Til-Date) orders replacing GTC — 4h auto-expiry so stale bids don't get picked off if the bot crashes
  • Implemented adverse movement guard: if PM ask drops to/below our bid, cancel immediately — protects against live-match price crashes between reprice cycles
  • Fixed GTD order placement: py-clob-client's create_and_post_order() silently ignores orderType. Had to split into create_order() + post_order(orderType=GTD) to actually set it
  • Built auto-redemption loop: checks resolved markets every 10 min, reads payout from CTF contract on Polygon, redeems winning tokens for USDC.e
  • Fixed match start time extraction: event.gameStartTime doesn't exist — only market.gameStartTime does. Was falling back to creation time (always in the past)
  • Penny-above bidding: bid just above best bid, not at max target price. Then depth-aware anchoring to skip thin levels and sit above real liquidity
  • Removed broken confidence gate — was comparing BO2 and BO3 probabilities (apples to oranges)
  • Go-live config: $5 max order, $100 total exposure, $50 daily loss limit. 20 orders placed successfully on Polygon CLOB

CS2 Model — Backtest Infrastructure

  • Added Strength of Schedule features, event tiers, and quality-weighted win rates (d837b46)
  • Fixed 5 bugs in one commit: feature calculation, data leakage, edge computation, hardcoded constants (166c2a0)
  • Built walk-forward backtest with series-level betting logic
  • Interactive backtest dashboard + OddsPortal historical odds scraper
  • Pinnacle live odds scraper + real-time edge computation
  • Promoted retrained models to production

Dota Model Fixes

  • Fixed BO2 probability bug: was computing 1 - a_2_0 instead of using b_0_2 for opponent sweep probability
  • Added fallback sportsbook chain: Pinnacle → Picklebet → Bet365
  • Fixed equal-EV bet tiebreaking: keep tied EV$ bets in per-matchup filter (e.g. map 1 + map 2 both positive)

Website

  • Added profiled.lol and palettepirate.ink to products page
  • Reordered products: live first, soon/tinkering last
  • Published "Two Weeks In" blog post
  • Fixed equal-height blog cards with 2-column grid

Key stat: 42 commits today. The Polymarket bot went from code-on-a-branch to 20 live orders on Polygon in a single session.