Skip to main content

Overview

The Polymarket Bot displays real-time trading information in a structured console interface. The display updates every second and consists of three main sections:
  1. Header - Current market state and trading decision
  2. History Table - Last 15 intervals with predictions and results
  3. Stats Line - Aggregate performance metrics

Live Output Example

  GROWTHLY MARKET BOT
+----------------------------------------------------------------------+
|   BTC Price: $64,232.02   Strike: $64,355.45   Time: 2:56   [LIVE]   |
|   Prediction: v DN 85%   ABSTENCION   (insufficient_margin)          |
|   Market: 10.0%  EV: +9.7%  Edge: -8.7pp  [POLY]                     |
|   Bankroll: $100.00  Drawdown: 0.0% [GREEN]  Bet: --  Kelly a: --    |
+----------------------------------------------------------------------+

+----+-------------+-------------+---------+-----------+------+------+------+-----------+------+
| #  | Target      | Final       | Result  | Early 1m  | E.Ac | q    | Bet  | Pr 30s    | F.Ac |
+----+-------------+-------------+---------+-----------+------+------+------+-----------+------+
| 60 | $64,119.86  | $64,195.42  | UP      | ^ UP 92%  | OK   | 90%  | --   | ^ UP 71%  | OK   |
| 61 | $64,195.42  | $64,158.04  | DOWN    | v DN 65%  | OK   | 55%  | --   | v DN 98%  | OK   |
| 62 | $64,149.11  | $64,231.85  | UP      | ^ UP 98%  | OK   | 95%  | --   | ^ UP 99%  | OK   |
| 63 | $64,237.53  | LIVE        | ACTIVE  | wait      | --   | --   | --   | wait      | --   |
+----+-------------+-------------+---------+-----------+------+------+------+-----------+------+
  62 resolved | 26 UP | 36 DN | Final: 86% (43/50) | Early 1m: 87% (45/52) | Abstain: 10

Header Fields

The live Bitcoin price from Polymarket’s Chainlink oracle, updated every second.Color coding:
  • Green - Price is above the strike (UP territory)
  • Red - Price is below the strike (DOWN territory)
  • Yellow - Price equals strike or data unavailable
This is the real-time market price used for all calculations.
The target price for the current 5-minute market interval, fetched from the Vatic Trading API.BTC must close above this price for the market to resolve as UP, or below for DOWN.
Countdown timer showing minutes and seconds remaining until the current interval closes.Format: M:SS (e.g., 2:56 = 2 minutes 56 seconds)Key timestamps:
  • 4:30 - Interval opens, data collection begins
  • 1:00 - Early prediction captured (primary trading signal)
  • 0:30 - Final prediction captured
  • 0:00 - Interval closes, result determined
Connection status indicator:
  • [LIVE] (green) - WebSocket connected, receiving live data
  • […] (yellow) - Connecting or reconnecting
  • [OFF] (red) - Disconnected, no live data
The model’s current prediction, always visible even during abstention.Format: direction CONFIDENCE%Examples:
  • ^ UP 80% - 80% confident BTC will close above strike
  • v DN 95% - 95% confident BTC will close below strike
  • v DN 55% - Only 55% confident (low confidence)
How to read confidence:
  • 75%+ - High confidence, strong signal
  • 60-75% - Moderate confidence
  • 50-60% - Low confidence, weak signal
The bot’s trading decision for the current interval.When betting:
  • APUESTA: SUBE (green) - Betting on UP
  • APUESTA: BAJA (red) - Betting on DOWN
When abstaining:
  • ABSTENCION (yellow) with reason in parentheses
Abstention reasons:
  1. insufficient_data - Less than 50 price ticks collected
  2. dead_zone - Model probability too close to 50% (within 10pp)
  3. anomalous_volatility - Volatility exceeds 2x mean (unusual market)
  4. cold_streak - Accuracy dropped below 40% recently
  5. insufficient_ev - Expected Value less than 5%
  6. insufficient_margin - Edge less than 15 percentage points
  7. drawdown_suspension - In RED or CRITICAL drawdown level
Polymarket’s UP token price, representing the market’s implied probability that BTC closes above the strike.Example: Market: 10.0% means the market thinks there’s only a 10% chance of UP.If our model predicts 85% DOWN (15% UP) and the market shows 10%, there’s a 5pp edge.
Profit expected per dollar wagered, calculated as (p - q) / (1 - q) for DOWN bets or (p - q) / q for UP bets.Color coding:
  • Green - EV > 5% (excellent)
  • Yellow - EV 0-5% (marginal)
  • Red - EV < 0 (negative edge)
Example: EV: +9.7% means we expect to earn 0.097per0.097 per 1 wagered.
Difference between model probability and market probability in percentage points.Formula: p - qExample:
  • Model: 85% DOWN (15% UP)
  • Market: 10% UP
  • Edge: 15% - 10% = +5pp
Minimum edge threshold: 15pp (configurable)
Current trading capital available for betting. Tracks wins/losses over time.Starts at configured initial value (default $100).
Distance from the all-time high bankroll (high-water mark).Levels:
  • [GREEN] - 0-10% drawdown (normal operations)
  • [YELLOW] - 10-20% drawdown (cautious mode)
  • [RED] - 20-30% drawdown (defensive mode, trading suspended)
  • [CRITICAL] - 30%+ drawdown (all trading halted)
Drawdown affects Kelly sizing: higher drawdown = smaller bet sizes.
Recommended bet size from the fractional Kelly criterion, adjusted for model accuracy and drawdown.Shows -- during abstention or when not trading.
Fraction of full Kelly used for bet sizing, based on model’s Brier Score tier:
  • Brier < 0.15 → alpha = 0.25 (aggressive)
  • Brier 0.15-0.20 → alpha = 0.15 (moderate)
  • Brier 0.20-0.25 → alpha = 0.08 (conservative)
  • Brier > 0.25 → alpha = 0.03 (defensive)
Lower Brier Score = better calibration = higher alpha.

History Table Columns

ColumnDescriptionNotes
#Sequential interval numberIncrements every 5 minutes
TargetStrike price for this intervalFrom Vatic API
FinalBTC price at interval closeFrom Chainlink oracle
ResultUP or DOWNGreen = UP, Red = DOWN
Early 1mPrediction at 60s before closeThis is the trading metric
E.AcEarly accuracyOK = correct, MISS = wrong
qPolymarket UP token priceMarket probability
BetBet size in USDFrom Kelly criterion
Pr 30sPrediction at 30s before closeLatest prediction
F.AcFinal accuracyOK = correct, MISS = wrong

Why Early 1m Matters

The Early 1m prediction is the most important column because:
  1. Real trading signal - This is when you’d actually place bets (60s before close)
  2. Sufficient data - Model has 4 minutes of price history
  3. Time to execute - Enough time to submit orders before close
  4. Performance metric - This accuracy determines if the model is profitable
The 30s prediction is often more accurate but too late to trade on.

Stats Line

62 resolved | 26 UP | 36 DN | Final: 86% (43/50) | Early 1m: 87% (45/52) | Abstain: 10
Total number of closed intervals since bot started.
How many intervals closed above strike (UP) vs below strike (DOWN).Shows market direction bias.
Accuracy of predictions captured at 30 seconds before close.Format: percentage (correct/total)Example: 86% (43/50) = 43 correct out of 50 predictions
The critical metric - Accuracy of predictions captured at 60 seconds before close.This is the real-world trading performance. Target: 80%+Example: 87% (45/52) = 45 correct out of 52 early predictions
Number of intervals where no prediction was captured, either because:
  • Model abstained due to one of the 7 conditions
  • Bot wasn’t running during that interval
  • Data collection failed
Abstention rate should be monitored - too high means model is overly conservative.

Color Coding Reference

Price Colors

  • Green - Above strike (UP position)
  • Red - Below strike (DOWN position)
  • Yellow - Neutral or waiting for data

Decision Colors

  • Green background - APUESTA: SUBE (betting UP)
  • Red background - APUESTA: BAJA (betting DOWN)
  • Yellow background - ABSTENCION (not trading)

Accuracy Colors

  • Green OK - Correct prediction
  • Red MISS - Incorrect prediction
  • Gray — - No data or not applicable

Drawdown Colors

  • Green [GREEN] - 0-10% drawdown
  • Yellow [YELLOW] - 10-20% drawdown
  • Red [RED] - 20-30% drawdown
  • Red background [CRITICAL] - 30%+ drawdown

Reading Active Intervals

The last row in the table shows the current live interval:
| 63 | $64,237.53  | LIVE        | ACTIVE  | wait      | --   | --   | --   | wait      | --   |
  • LIVE in yellow - Interval is active, waiting for close
  • wait - Prediction not captured yet (appears until 60s mark)
  • - No data available yet
Once the interval closes, this row moves into history and a new live row appears.

Tips for Monitoring

Watch the Early 1m accuracy percentage - this is your north star metric. If it stays above 80%, the model has real predictive power.
A string of MISS results in the E.Ac column may trigger the cold_streak abstention. The bot will pause trading until accuracy recovers.
High abstention count isn’t necessarily bad - it means the model is disciplined. A bot that trades every interval regardless of edge will lose money.

Next Steps

Daily Reports

Learn how to interpret the comprehensive daily performance reports

Troubleshooting

Common issues and how to resolve them

Build docs developers (and LLMs) love