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.

Version v1.0.0 · One-time payment · Source code download
Strategy typeMaker rebate
AssetBTC
Timeframe15m
Market typeCrypto binary
Minimum capital$30
Dependencies@polymarket/clob-client, ws, ethers

What it does

poly15m-v7 is poly15m-v6's signal stack with a maker (GTC) entry layer bolted on. The eight confirmation layers and the trained meta-model are identical. The change is at entry: instead of paying ~0.8% taker fee at $0.52, the bot posts a GTC limit order at best bid + 1 tick and walks the price up every 8 seconds until it fills or the window closes.

The edge

At $0.50 maker fill, you need a 50% win rate to break even. At $0.52 taker, you need ~52.7%. Removing the fee drag is worth ~100-300 basis points of expected return per trade, depending on entry tier. v7 also earns maker rewards on every fill, which stacks on top.

The trade-off is fill risk: a GTC order can sit unfilled and miss the entry window. v7 mitigates this two ways. First, the repricing ladder posts aggressively (best bid + 1 tick) and walks up every 8 seconds, so the order tracks the book as the favored side rallies. Second, the fallback: after half the repricing budget is consumed, if still unfilled, the bot falls back to a FOK taker. You pay the fee on the fallback but you never miss the window.

How it works

Same signal stack as v6:

  1. Polymarket book signal (mid + depth imbalance)
  2. Chainlink RTDS confirmation
  3. CVD (Cumulative Volume Delta)
  4. OFI (Order Flow Imbalance)
  5. Chop detector
  6. Trend filter (last 5 resolved)
  7. On-chain trade tape
  8. Futures liquidations

Entry differs:

  • Window: 90s to 540s into the candle (earlier than v6 because maker orders need fill time)
  • Initial price: best bid + 1 tick on the favored side
  • Repricing: every 8 seconds (MAKER_REPRICE_SEC = 8), walk the price up one tick if still unfilled
  • Cap: never post above $0.58 (MAKER_MAX_PRICE)
  • Max attempts: 20 repricings (MAKER_MAX_REPRICES)
  • Fallback: at attempt 10+, switch to FOK taker if still unfilled (MAKER_TAKER_FALLBACK = true)

Phase B (last 90s "favorite" entries when one side trades $0.90+): remains FOK taker. Time pressure makes maker repricing risky there.

Sizing: same quarter-Kelly as v6, hard cap --max-bet.

Sample output

[25/05/2026, 15:30:01] Meta-model loaded (n=287 trades, threshold 62/100) [25/05/2026, 15:32:48] Signals: 4/8 agree, meta=71/100 — entering Up [25/05/2026, 15:32:48] POST GTC 11sh Up @ $0.49 (best bid + 1 tick) [25/05/2026, 15:32:56] REPRICE 11sh Up @ $0.50 (attempt 2) [25/05/2026, 15:33:04] FILL 11sh Up @ $0.50 (0 fee) [25/05/2026, 15:45:01] Resolved WIN | +$5.50 | Bal: $35.50

Design targets

Break-even at $0.50 maker fill: 50% WR. Design target 55-58% realized WR, identical to v6 because the signal stack is identical. Net advantage over v6 is the fee saving plus maker rewards.

Fill rate is the key uncertainty: realistic target is 70-85% of attempted trades fill via maker, the rest via taker fallback at the original $0.52 price.

FAQ

Why a 50/50 split between maker and taker fallback?

The fallback at attempt 10 (half the repricing budget) gives the maker order enough cycles to fill in normal market conditions (~60-80 seconds of repricing) while preserving enough time before the entry window closes to fall back via taker if needed.

How is v7 different from v6?

Signal stack and trade frequency are identical. v7 saves the taker fee on ~70-85% of trades (the ones that fill via maker), at the cost of fill-risk variance. v6 is simpler operationally; v7 has higher expected return.

Should I retrain the meta-model for v7?

The pre-trained model ships with both bots. If you retrain, it uses your combined v6+v7 trade history. The model is signal-based, not entry-method-based, so it generalizes across both.

What's included

  • poly15m/poly15m-v7.js
  • poly15m/run.sh
  • polymarket-limits.js
  • tools/meta_label_train.py
  • data/meta-model.json
  • README with maker rewards setup, repricing ladder tuning, and Phase B notes

Configuration

FlagDefaultDescription
--asset BTCBTCAsset to trade. BTC supported at launch.
--livePlace real orders. Default is dry-run.
--sim-balance 3030Starting balance in dry-run mode (USD).
--max-bet 1010Hard cap per trade in USD.
--max-loss 00Daily loss limit in USD. 0 = disabled.

Related bots