poly15m-v2 — Reactive composite signal, hold to resolution
v1 composite signal with ATR-adaptive entry threshold (0.5 × ATR, 0.05% fallback). FOK taker at $0.51 between 45s and 600s. All early exits disabled, holds every position to Chainlink resolution.
| Strategy type | Scalping |
|---|---|
| Asset | BTC |
| Timeframe | 15m |
| Market type | Crypto binary |
| Minimum capital | $30 |
| Dependencies | @polymarket/clob-client, ws, ethers |
What it does
poly15m-v2 keeps v1's composite signal (momentum + volume imbalance + velocity) and changes two things: the entry threshold scales with realized volatility (ATR-adaptive instead of static), and every early exit is disabled. Every trade rides to Chainlink resolution.
The edge
v1's static thresholds misfire across volatility regimes: too tight in calm markets (no trades), too loose in volatile ones (overtrading). v2's threshold is 0.5 × ATR-derived percent (0.05% fallback). In calm markets it lowers the bar; in volatile ones it raises it. This is what "reactive" means in the source comments.
The hold-to-resolution rule is the second change. v1's retracement-based exits triggered on most trades and locked in losses or partial wins before the underlying had a chance to confirm. v2's premise: on 15-minute candles the variance is too high for an early-exit rule to add value. Either the signal works on the full window or it doesn't.
How it works
- Connect to Binance + Coinbase + Kraken WebSockets for the multi-feed median price.
- ATR computation: rolling, derived from Binance 1-minute candles.
- Compute composite (same shape as v1).
- Adaptive threshold:
threshold = max(0.05%, 0.5 × ATR_pct). - Entry window: 45s to 600s into the candle (wider than v1's 90-270s because hold-to-resolution forgives later entries).
- Trend filter: skip if the BTC price is more than 0.10% counter to the dominant trend direction in the entry window.
- FOK taker at $0.51, sized at 8% of balance, capped at
--max-bet. - No early exits. Position holds until 15-minute Chainlink resolution.
Sample output
[25/05/2026, 15:32:14] 📡 Binance connected [25/05/2026, 15:33:50] 📡 Composite=1.42 ATR=0.18% threshold=0.090% — entering [25/05/2026, 15:33:51] BUY (FOK) 16sh @ $0.51 ($8.30 incl fee) [25/05/2026, 15:33:51] Filled: 0xc9a1... [25/05/2026, 15:45:01] Resolved WIN | +$7.70 | Bal: $37.70
Design targets
Break-even at $0.51 entry: required WR ≈ 51.7%. Design target 54-58% realized WR through the ATR-gated composite. Hold-to-resolution means fewer flash exits but bigger swings per trade.
Trade rate: similar to v1 (15-25% of candles trigger), but distribution shifts toward more entries in volatile regimes and fewer in calm ones.
FAQ
Why was hold-to-resolution chosen over a tighter exit rule?
Backtests on v1's exit ladder showed early exits hit the right call ~30% of the time and stopped out winners ~70% of the time. Net effect was negative expected value. v2's hold-to-resolution accepts the variance for higher per-trade expectation.
What's included
poly15m/poly15m-v2.jspoly15m/run.shpolymarket-limits.js- README with ATR window tuning + trend filter 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-balance 0 | 0 | Cap the balance used for sizing. 0 = use full balance. |
Related bots
poly15m-v1 — Directional momentum BTC scalper
First 15-minute iteration. Composite signal (momentum + volume imbalance + velocity) fires a FOK taker at $0.53 between 90s and 270s. ATR-band filter, time-decaying retracement exit.
poly15m-v6 — Enhanced orderbook signal BTC scalper
Polymarket book + Chainlink RTDS + CVD + OFI + chop filter + trained meta-model. Needs 3 of 8 confirmation layers before FOK taker at $0.52. Quarter-Kelly with drawdown scaling, holds to resolution.