poly15m-v3 — Maker strategy under post-2026 fee rules
Two-phase maker on 15-min BTC binaries. Phase 1 (0-720s) quotes both sides at 6¢ spread via WebSocket. Phase 2 (720-900s) posts a directional GTC at $0.52 once multi-exchange median picks a winner.
| Strategy type | Maker rebate |
|---|---|
| Asset | BTC |
| Timeframe | 15m |
| Market type | Crypto binary |
| Minimum capital | $30 |
| Dependencies | @polymarket/clob-client, ws, ethers |
What it does
poly15m-v3 was the first 15-minute iteration to abandon taker entries entirely. It posts GTC limit orders that rest on the book, earning zero taker fee and qualifying for Polymarket's maker rewards program. The 15-minute window is split into a two-sided market-making phase and a late directional phase.
The edge
Taker fees on 15-minute crypto markets peak at ~1.56% at p=0.50. A $0.50 maker fill costs 0% and earns rewards on top. Required win rate drops from ~54% (taker) to 50% (maker), a much more forgiving accuracy target. The trick is filling: orders that don't fill within the window expire worthless. v3 solves this with two complementary phases.
How it works
Phase 1 — Market-making (0-720s, 12 minutes)
- Post a GTC buy on both Up and Down at $0.50 ± 3¢ (
MM_SPREAD = 0.06) - The Down side gets a tighter spread (
MM_DOWN_SPREAD_MULT = 0.35) because the Down book is consistently thinner and needs a tighter offer to fill - Refresh quotes every 15 seconds via Polymarket WebSocket
- 15 shares per side (
MM_SIZE = 15) - If only one side fills for 4 cycles in a row (
MM_MAX_ONESIDED_CYCLES = 4), abort Phase 1 to avoid a stuck inventory bet
Phase 2 — Directional (720-900s, last 3 minutes)
- Compute multi-exchange median price move since candle open
- If the move is ≥ 0.12% (
DIR_MIN_MOVE_PCT), that direction is the winner - Post a GTC buy on the winning side at $0.52 (
DIR_PRICE_YES) - 15 shares (
DIR_SIZE)
Risk gates
MAX_BET = $10per tradeMAX_POSITION_PER_MARKET = 30shares per sideMAX_CONSEC_LOSSES = 5triggers cooldownCANCEL_TIMEOUT_MS = 2000: max time to wait for a cancel to confirm before moving on
Sample output
[25/05/2026, 15:30:01] 📡 Binance connected [25/05/2026, 15:30:01] 📡 Polymarket WS connected [25/05/2026, 15:30:14] 📝 POST Up 15sh @ $0.47 [a3c9d12f...] [25/05/2026, 15:30:14] 📝 POST Down 15sh @ $0.43 [b8e2c4a1...] [25/05/2026, 15:34:28] FILL Down 15sh @ $0.43 [25/05/2026, 15:42:14] Phase 2: Binance +0.18% — posting Up @ $0.52 [25/05/2026, 15:42:14] 📝 POST Up 15sh @ $0.52 [d7f1c93e...] [25/05/2026, 15:43:51] FILL Up 15sh @ $0.52 [25/05/2026, 15:45:01] Resolved WIN | +$5.25 (zero taker fee) | Bal: $35.25
Design targets
Break-even at $0.50 maker entry: 50% WR (zero fee). Design target 52-55% WR on Phase 2 directional fills. Phase 1 MM fills are roughly even on price action (you bought both sides) but contribute to maker reward accumulation. Net expected value comes from Phase 2 plus rewards.
Trade rate: every 15-minute candle gets MM posts; only 30-50% of candles produce a Phase 2 directional fill because the 0.12% threshold filters out flat candles.
What's included
poly15m/poly15m-v3.jspoly15m/run.shpolymarket-limits.js- README with maker rewards setup and spread tuning notes
Configuration
| Flag | Default | Description |
|---|---|---|
| --asset BTC | BTC | Asset to trade. BTC supported at launch. |
| --live | — | Place real orders. Default is dry-run. |
| --sim-balance 30 | 30 | Starting balance in dry-run mode (USD). |
| --max-bet 10 | 10 | Hard cap per trade in USD. |
| --max-position 30 | 30 | Maximum shares per side per market. |
Related bots
poly15m-v7 — Zero-fee directional maker
v6 signal stack with maker (GTC) entries instead of FOK takers. Posts at best bid + 1 tick, walks the price up every 8s for up to 20 cycles, falls back to taker if still unfilled at the halfway point.
contrarian — GTC maker bids on underdog outcomes
GTC maker bids on 20-50¢ underdog outcomes across all Polymarket markets. Zero taker fees, 30-min scan loop, multi-layer risk stack. Inspired by @Car's +$22K strategy.