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.

Version v1.0.0 · One-time payment · Source code download
Strategy typeMaker rebate
AssetMulti-market
TimeframeEvent-driven
Market typeBinary 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:

  1. Pull all active markets from Polymarket Gamma API
  2. Drop sports markets via keyword match (nba, nfl, ufc, formula 1, etc., full list in source)
  3. Drop multi-outcome markets (only true binary yes/no qualifies)
  4. Drop markets resolving in under 24h (no spread to monetize) or more than 30 days out (capital lockup)
  5. Drop markets where 24h volume is below --min-volume (default $10k)
  6. For each qualifying market, post a GTC bid for --bet-size shares 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.js
  • polymarket-limits.js
  • README with the full sports keyword list and a worked example of bias customization

Configuration

FlagDefaultDescription
--livePlace real orders. Default is dry-run.
--sim-balance 100100Starting balance in dry-run mode (USD).
--bet-size 22Fixed bet size per order in USD.
--max-price 0.250.25Maximum price to bid on "No" (default $0.25).
--min-volume 1000010000Minimum 24h volume filter (USD).
--min-hours 2424Minimum hours to close before bidding.
--max-hours 720720Maximum hours to close (default 30 days).
--max-order-age 4848Cancel unfilled orders older than N hours.
--max-loss 00Daily loss limit in USD. 0 = disabled.
--max-consec-losses 88Consecutive loss limit before cooldown.

Related bots