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.
| Strategy type | Scalping |
|---|---|
| Asset | BTC |
| Timeframe | 15m |
| Market type | Crypto binary |
| Minimum capital | $30 |
| Dependencies | @polymarket/clob-client, ws, ethers |
What it does
poly15m-v1 is the original 15-minute iteration of the 5-min engine, with timing scaled 3x. Three independent signals (price momentum, volume imbalance, velocity) are combined into a composite score. When that score clears the threshold AND ATR sits inside a healthy band, the bot fires a FOK taker at $0.53 sized at 7% of balance.
The edge
A 15-minute candle has lower signal-to-noise than 5 minutes: false starts in the first minute are common, but by minute 1.5-4.5 the move has usually established itself. v1's entry window (90s to 270s) targets exactly that zone. The composite score is harder to fool than any single signal alone: a fast price move with thin volume gets filtered out, a heavy volume with no price action gets filtered out.
How it works
- Connect to Binance WebSocket (BTC kline) plus Coinbase + Kraken as redundant feeds. The multi-feed median is the price signal, aligning with Chainlink RTDS aggregation.
- Compute composite continuously: momentum (% change over rolling window) + volume imbalance (aggressor flow) + velocity (% / sqrt-second).
- ATR filter: skip the candle if ATR < 0.08% (no movement to ride) or ATR > 0.40% (too volatile, signal unreliable).
- Fire FOK at $0.53 the moment composite ≥
COMPOSITE_SCORE_THRESHOLD(1.3) inside the 90-270s window. - Exit logic (unless
--no-exits): time-decaying retracement schedule. First 4 minutes only exit on 90% retracement; tightens to 30% by minute 10. Last 2 minutes are exit-frozen so resolution runs. - Resolve via Gamma API on Chainlink RTDS.
Risk gates: anti-martingale multipliers (1.15x after win, 0.75x after loss), MAX_CONSEC_LOSSES = 4 triggers 15-min cooldown, MIN_BALANCE = $3.
Sample output
[25/05/2026, 15:32:14] Binance connected [25/05/2026, 15:32:14] Coinbase connected [25/05/2026, 15:32:14] Kraken connected [25/05/2026, 15:33:42] BUY (FOK) 13sh @ $0.53 ($7.04 incl fee) [25/05/2026, 15:33:42] Filled: 0xa1b2c3d4... [25/05/2026, 15:45:01] Resolved WIN | +$5.96 | Bal: $35.96
Design targets
Break-even at $0.53 entry (15-min crypto fee curve peaks at p=0.50):
fee = shares × 0.25 × 0.53 × (0.53 × 0.47)^2 ≈ 0.82% of bet
Required WR ≈ 53.8% to break even. Design target is 55-60% WR through the composite filter and ATR band. With ~96 candles per day (one every 15 min) and an estimated 15-25% triggered, that's 14-24 trades per day at $7-$10 each.
FAQ
Why pay $29 for v1 if v6 exists?
v6 is the current focus and adds 8 confirmation layers including a trained meta-model. v1 is the simplest 15-minute scalper and the cleanest baseline if you want to study how composite alone performs. Buyers often want both to compare.
What's included
poly15m/poly15m-v1.jspoly15m/run.sh(auto-restart wrapper)polymarket-limits.js- README with composite weight tuning and a worked example of disabling exits
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-loss 0 | 0 | Daily loss limit in USD. 0 = disabled. |
| --no-exits | — | Disable early exits, hold to resolution. |
Related bots
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.
poly5m-v4 — Split-window momentum BTC scalper
Buy-both-sides Gabagool on 5-min BTC. Picks up cheap YES + NO at $0.49 or less, locks profit when pair stays below $0.98. CLOB v2 / pUSD, polls books every 2s from 10s to 260s.