# Polymarket Fast Loop Improved

> Trade Polymarket BTC/ETH/SOL 5-minute and 15-minute fast markets using multi-signal CEX momentum. Adds funding rate confirmation, order book imbalance, time-of-day filtering, volatility-adjusted sizing, win-rate calibration, and fee-accurate EV math. Use when user wants to trade sprint/fast markets with a more rigorous edge filter.

- Skill: `modbender/polymarket-fast-loop-improved` (Agent Skill)
- Install (CLI): `npx skillmds@latest add modbender/polymarket-fast-loop-improved`
- Raw SKILL.md: https://api.skillmd.com/api/skills/modbender/polymarket-fast-loop-improved/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: modbender (https://skillmd.com/u/modbender)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/modbender/polymarket-fast-loop-improved

---


# Polymarket FastLoop Trader — Improved

An enhanced version of the Simmer FastLoop skill with rigorous edge filtering, multi-signal confirmation, and real calibration tracking.

> **Default is paper mode.** Use `--live` for real trades. Always run 100+ paper trades first to validate your win rate before going live.

> ⚠️ Fast markets carry Polymarket's 10% fee. Your signal needs to be right **63%+ of the time** to profit. This skill will tell you your actual win rate.

## Key Improvements Over Original

| Feature | Original | Improved |
|---------|----------|----------|
| Fee math | Approximate | Exact breakeven with configurable buffer |
| Signal | Binance momentum only | Momentum + funding rate + order book |
| Momentum threshold | 0.5% (too low) | 1.0% default, calibration-driven |
| Time filtering | None | Skips low-liquidity hours |
| Position sizing | Fixed | Volatility-adjusted |
| Win rate tracking | None | Logs outcomes, reports calibration |
| Market selection | Soonest expiry | Configurable sweet-spot window |
| Stats | None | Full P&L, win rate, signal breakdown |

## Quick Start

```bash
# Install dependency
pip install simmer-sdk

# Set API key
export SIMMER_API_KEY="your-key-here"

# Paper mode — see what would happen (default)
python fastloop_improved.py

# Go live
python fastloop_improved.py --live

# Check calibration stats (win rate, P&L, signal accuracy)
python fastloop_improved.py --stats

# Resolve any expired paper trades against real outcomes
python fastloop_improved.py --resolve

# Quiet mode for cron
python fastloop_improved.py --live --quiet
```

## How to Run on a Loop

**OpenClaw native cron:**
```bash
openclaw cron add \
  --name "FastLoop Improved" \
  --cron "*/5 * * * *" \
  --tz "UTC" \
  --session isolated \
  --message "Run improved fast loop: cd /path/to/skill && python fastloop_improved.py --live --quiet. Show output summary." \
  --announce
```

**Linux crontab:**
```
*/5 * * * * cd /path/to/skill && python fastloop_improved.py --live --quiet
```

## Configuration

```bash
# Raise momentum threshold (recommended: 1.0–2.0%)
python fastloop_improved.py --set min_momentum_pct=1.5

# Require order book confirmation
python fastloop_improved.py --set require_orderbook=true

# Set sweet-spot window for market selection (seconds remaining)
python fastloop_improved.py --set target_time_min=90 --set target_time_max=180

# Disable time-of-day filter (trade 24/7)
python fastloop_improved.py --set time_filter=false
```

### All Settings

| Setting | Default | Description |
|---------|---------|-------------|
| `entry_threshold` | 0.05 | Min divergence from 50¢ |
| `min_momentum_pct` | 1.0 | Min % BTC move (raised from 0.5) |
| `max_position` | 5.0 | Max $ per trade |
| `signal_source` | binance | binance or coingecko |
| `lookback_minutes` | 5 | Candle lookback window |
| `min_time_remaining` | 60 | Skip if less than N seconds left |
| `target_time_min` | 90 | Prefer markets with ≥ N seconds left |
| `target_time_max` | 210 | Prefer markets with ≤ N seconds left |
| `asset` | BTC | BTC, ETH, or SOL |
| `window` | 5m | 5m or 15m |
| `volume_confidence` | true | Skip low-volume signals |
| `require_funding` | false | Require funding rate confirmation |
| `require_orderbook` | false | Require order book imbalance confirmation |
| `time_filter` | true | Skip low-liquidity hours (02:00–06:00 UTC) |
| `vol_sizing` | true | Adjust size by recent volatility |
| `fee_buffer` | 0.05 | Extra edge required above fee breakeven |
| `daily_budget` | 10.0 | Max spend per UTC day |
| `starting_balance` | 1000.0 | Paper portfolio starting balance |

## Signal Logic

Three signals are evaluated independently. The momentum signal is always required. Funding and order book are optional confirmation layers.

### 1. Momentum (always on)
- Fetch N one-minute Binance candles
- `momentum = (close_now - open_then) / open_then * 100`
- Must exceed `min_momentum_pct`

### 2. Funding Rate (optional, `require_funding=true`)
- Fetch Binance perpetual funding rate for the asset
- Positive funding + upward momentum = longs crowded, signal is weaker → SKIP
- Negative funding + upward momentum = confirmation → TRADE
- Logic inverted for downward momentum

### 3. Order Book Imbalance (optional, `require_orderbook=true`)
- Fetch top 20 levels of Binance L2 book
- `imbalance = (bid_depth - ask_depth) / (bid_depth + ask_depth)`
- Imbalance > 0.1 confirms upward momentum
- Imbalance < -0.1 confirms downward momentum

### Fee-Accurate EV
```
entry_price  = market price of chosen side
win_profit   = (1 - entry_price) × (1 - fee_rate)
breakeven    = entry_price / (win_profit + entry_price)
required_div = (breakeven - 0.50) + fee_buffer
```
Trade only fires if `actual_divergence ≥ required_div`.

### Time-of-Day Filter
Skips 02:00–06:00 UTC by default. US session (13:00–21:00 UTC) is the highest-liquidity window for crypto prediction markets.

### Volatility-Adjusted Sizing
```
24h_vol = std(hourly_returns_last_24h) × √24
size    = max_position × min(1.0, 0.02 / 24h_vol)
```
High volatility → smaller position. Low volatility with strong trend → full size.

## Win Rate Calibration

The skill tracks every paper and live trade in `fastloop_ledger.json`. After market expiry, run `--resolve` to fetch the actual Polymarket outcome and log it. After 50+ trades, `--stats` shows your real win rate broken down by momentum threshold, time of day, and asset — so you can tune settings based on actual data rather than guessing.

## Troubleshooting

All troubleshooting from the original skill applies. Additional:

**"Funding rate fetch failed"**
- Binance futures API may be rate-limited. Skill falls back to momentum-only.

**"Order book imbalance: neutral"**
- Market is balanced, signal is ambiguous — skipped if `require_orderbook=true`.

**"Time filter: low liquidity window"**
- Current UTC hour is in the 02–06 block. Set `time_filter=false` to override.

