no-bot — Nothing ever happens
GTC maker bids on the "No" side of binary yes/no markets at ≤$0.25. Hard-coded "nothing ever happens" bias. Filters out sports, multi-outcome, near-expiry (<24h), and ultra-long (>30d) markets.
| Strategy type | Maker rebate |
|---|---|
| Asset | Multi-market |
| Timeframe | Event-driven |
| Market type | Binary yes/no |
| Minimum capital | $100 |
| Dependencies | @polymarket/clob-client-v2, ethers |
What it does
no-bot is the contrarian-strategy's stricter sibling. It scans active Polymarket markets, finds binary yes/no questions where "No" is priced under $0.25, and posts GTC maker bids on the "No" side only. It does not bid "Yes" on anything, ever. Sports, multi-outcome ladders, markets resolving in under 24 hours, and markets more than 30 days out are all filtered out.
Inspired by sterlingcrispin/nothing-ever-happens.
The edge
Speculative event markets ("Will X be confirmed by July?", "Will Y file an IPO this year?", "Will Z resign?") systematically over-price "Yes". The base rate for novel events is much lower than the median 25¢ bid in this band suggests, because users are excited to bet on something happening but not on something not happening.
Buying "No" at $0.25 means you collect $0.75 of profit when the answer is "no" (which is most of the time) and lose $0.25 when it is "yes". The math: at $0.25 entry, break-even is a 25% "no" hit rate. Most speculative binaries clear 60-80% "no" resolution rates over a 6-month horizon.
Zero taker fee on GTC entries means the entire 75¢ profit per winning share lands in the wallet.
How it works
The scan cycle runs every 30 minutes:
- Pull all active markets from Polymarket Gamma API
- Drop sports markets via keyword match (nba, nfl, ufc, formula 1, etc., full list in source)
- Drop multi-outcome markets (only true binary yes/no qualifies)
- Drop markets resolving in under 24h (no spread to monetize) or more than 30 days out (capital lockup)
- Drop markets where 24h volume is below
--min-volume(default $10k) - For each qualifying market, post a GTC bid for
--bet-sizeshares on the "No" outcome at ≤--max-price
Fill check (every 2 min) and resolution poll (every 5 min) work identically to contrarian.
Eight circuit breakers, same shape as contrarian: daily loss, drawdown, consecutive losses, error window, position cap, pending-order cap, min balance, stale-order cancel.
Sample output
[25/05/2026, 17:30:14] Scanning 847 active markets... [25/05/2026, 17:30:18] 11 candidates (binary yes/no, No ≤ $0.25, after sports filter) [25/05/2026, 17:30:20] [LIVE] BUY No (GTC) 8sh @ $0.250 ($2.00, zero fee) [25/05/2026, 17:30:22] Order posted: 0xa8f3e2c... (GTC maker) [26/05/2026, 04:12:33] FILL (sim) "Will Pope visit Mongolia in 2026?" — No @ $0.22
Design targets
Break-even at $0.25 entry with zero fees: 25% "no" hit rate. The strategy's design assumes the realized rate sits in the 60-80% band for the filtered universe, giving a 35-55 percentage-point edge per trade in expectation.
Capital sizing: $100 starting bank, $2 bets, 20 max simultaneous bids, 30 max held positions. Worst case in a long losing streak: all 30 positions go to zero = $60 loss, well within the default 40% drawdown circuit.
FAQ
How does this compare to contrarian?
contrarian will bid on any underdog priced 20-50¢ across any market shape (sports, multi-outcome, binary). no-bot is narrower: binary yes/no only, "No" side only, ≤25¢, sports filtered out. Use no-bot if you specifically want the "nothing ever happens" thesis isolated.
Can I run both?
Yes. They use different lock files and different stats files. Just make sure your daily loss limits across both are sized to your bank.
What's included
others/no-bot.jspolymarket-limits.js- README with the full sports keyword list and a worked example of bias customization
Configuration
| Flag | Default | Description |
|---|---|---|
| --live | — | Place real orders. Default is dry-run. |
| --sim-balance 100 | 100 | Starting balance in dry-run mode (USD). |
| --bet-size 2 | 2 | Fixed bet size per order in USD. |
| --max-price 0.25 | 0.25 | Maximum price to bid on "No" (default $0.25). |
| --min-volume 10000 | 10000 | Minimum 24h volume filter (USD). |
| --min-hours 24 | 24 | Minimum hours to close before bidding. |
| --max-hours 720 | 720 | Maximum hours to close (default 30 days). |
| --max-order-age 48 | 48 | Cancel unfilled orders older than N hours. |
| --max-loss 0 | 0 | Daily loss limit in USD. 0 = disabled. |
| --max-consec-losses 8 | 8 | Consecutive loss limit before cooldown. |