---
name: polymarket-fast-scaler
description: Trade Polymarket BTC 5-minute fast markets using a magnitude-gated conviction-ladder strategy. Only fires when |1m BTC momentum| >= 0.10% — the backtested threshold above which the strategy shows positive EV. Position size scales with signal strength (3 conviction tiers). Use when user wants disciplined, gate-filtered BTC fast-market trading.
metadata:
  author: Simmer (@simmer_markets)
  version: "0.9.0"
  status: scaffold
  displayName: Polymarket FastScaler
  difficulty: advanced
---
# Polymarket FastScaler

Trade Polymarket BTC 5-minute fast markets with a conviction-ladder strategy. Only enters when Binance 1m momentum exceeds the 0.10% magnitude gate — the EV-positive regime validated by backtest. Position size scales with signal strength across 3 tiers.

> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.

> **Polymarket only.** All trades execute on Polymarket with real USDC. Paper mode is the default.

> ⚠️ **Strategy invariants.** Do not lower `magnitude_gate_pct` below 0.10% without re-running the backtest. The 89.4% win rate is gated on this threshold. Below it, the strategy enters the noise zone where fees dominate.

> ⚠️ **Risk monitoring does not apply to sub-15-minute markets.** Simmer's stop-loss and take-profit monitors check positions every 15 minutes — they will never fire on 5m markets before resolution. Size accordingly.

## Strategy

**Signal**: Binance 1m candle at window-open — `momentum = (close - open) / open × 100`

**Gate**: `|momentum| >= magnitude_gate_pct` (default 0.10%). Below = no trade.

**Side**: `momentum > 0 → YES`, `momentum < 0 → NO`. Pure direction — no divergence filter.

**Sizing (conviction ladder)**:
| Tier | |momentum| | Position |
|------|-----------|----------|
| 1 | 0.10% – 0.20% | $3 |
| 2 | 0.20% – 0.35% | $5 |
| 3 | ≥ 0.35% | $10 |

**Hold**: position held to expiry. No exit logic.

**Why this works**: Polymarket fast markets resolve on Chainlink oracle snapshots. At the moment of the 1m window-open candle, strong BTC momentum correlates with the resolution direction before the market re-prices. The 0.10% gate filters the noise zone where this correlation collapses and fees dominate.

**Backtest (BTC 5m, 30d)**: +5.04% gross / 218 markets / 89.4% win rate at |momentum| ≥ 0.10%. Past performance does not guarantee future results — see DISCLAIMER.md.

## When to Use This Skill

Use this skill when the user wants to:
- Trade BTC 5-minute fast markets on Polymarket with a validated magnitude filter
- Automate conviction-scaled position sizing based on signal strength
- Run a disciplined, gate-filtered fast-market strategy (not raw momentum)

**Do NOT use for**: ETH/SOL/XRP fast markets (separate backtest required), 15m windows (backtest pending), or any strategy where the user wants to trade below the 0.10% magnitude gate.

## Setup Flow

1. **Install the Simmer SDK**
   ```bash
   pip install simmer-sdk
   ```

2. **Set your Simmer API key**
   ```bash
   export SIMMER_API_KEY="your-key-here"
   # Get from: simmer.markets/dashboard → SDK tab
   ```

3. **Run in paper mode first**
   ```bash
   python fast_scaler.py
   ```

4. **Set up cron (every minute)**
   ```bash
   # crontab -e
   * * * * * cd /path/to/skill && python fast_scaler.py --live --quiet
   ```

## Quick Start

```bash
# Paper mode (default) — see what the strategy would do
python fast_scaler.py

# Live trading
python fast_scaler.py --live

# Live + quiet (for cron)
python fast_scaler.py --live --quiet

# Show current positions
python fast_scaler.py --positions

# Tune the magnitude gate (don't go below 0.10%)
python fast_scaler.py --set magnitude_gate_pct=0.12

# Adjust position sizes
python fast_scaler.py --set position_tier3_usd=15
```

## Key Config Parameters

| Parameter | Default | Description |
|-----------|---------|-------------|
| `magnitude_gate_pct` | 0.10 | Min \|momentum\| % to trade. **Strategy invariant — don't lower below 0.10.** |
| `ladder_tier2_pct` | 0.20 | Momentum threshold to enter tier 2 sizing |
| `ladder_tier3_pct` | 0.35 | Momentum threshold to enter tier 3 (max) sizing |
| `position_tier1_usd` | 3.0 | Position size for tier 1 |
| `position_tier2_usd` | 5.0 | Position size for tier 2 |
| `position_tier3_usd` | 10.0 | Position size for tier 3 |
| `daily_budget_usd` | 30.0 | Max total USD per day across all trades |
| `per_market_cap_usd` | 10.0 | Max USD on a single market window |
| `asset` | BTC | Asset (BTC only in v1.0) |
| `window` | 5m | Window (5m only in v1.0) |
| `order_type` | GTC | GTC or FAK |

## What to Watch For

- **Gate fires ~7×/day** on BTC under normal conditions (0.10% threshold). Significantly fewer = check if markets are live and Binance is reachable. Significantly more = consider raising the gate.
- **Per-market cap** (default $10) prevents stacking multiple bets on the same slot. Leave it at or below `position_tier3_usd`.
- **Daily budget** (default $30) is the safety cap. At 7 trades/day × avg $5 = $35, the default may cut the last ~1 trade. Increase if you want full daily exposure.

## Invariants — don't raise without re-backtesting

The +5.04% / 89.4% backtest result is conditional on the parameter values it was run against. Three values are **invariants** — changing them invalidates the backtest and the skill becomes an unvalidated experiment:

- **`magnitude_gate_pct ≥ 0.10`** — lowering admits noise; backtest win rate degrades fast below 0.10%.
- **`position_tier3_usd ≤ 10`** — the conviction ladder ($3/$5/$10) is sized for the observed win-rate distribution. Raising T3 without re-running the backtest scales bet size beyond what the empirical edge supports.
- **`daily_budget_usd ≤ 50`** — the daily budget caps total daily exposure. Raising it past ~$50 admits parameter combinations the backtest didn't cover.

Lowering any of these is always safe. Raising them is your call but invalidates the empirical evidence cited above.

## Geo-fallback (Binance.us)

The skill fetches BTC 1m klines from `api.binance.com`. In geo-restricted regions (e.g. US-hosted Railway deployments) Binance returns HTTP 451. The skill auto-falls-back to `api.binance.us` in that case. If both endpoints are unreachable, market discovery returns nothing for that cycle — the skill exits cleanly with no orders placed.

If you're running this on a host that can reach neither endpoint, you'll need to proxy/VPN the request or run the skill from a host that can reach Binance.

## Gamma fallback liveness gap

When the Simmer SDK's primary market-discovery path is unavailable, the skill falls back to Polymarket's Gamma API. Gamma-sourced markets come through without `is_live_now` precision — the skill uses a time-window heuristic instead. This can occasionally admit a market that has time remaining on the clock but isn't yet in the live trading window. Known gap; tracked for future fix.

## Advanced: Extending the Strategy

The conviction ladder and magnitude gate are the two load-bearing components. All other parameters are tunable without invalidating the backtest. If you want to:

- **Use ETH/SOL**: change `asset` — but run your own backtest first. The 0.10% gate and 89.4% win rate are BTC-only results.
- **Use 15m markets**: change `window` — 15m backtest is on the roadmap but not yet run.
- **Tighten the ladder**: raise `ladder_tier2_pct` / `ladder_tier3_pct` for fewer but higher-conviction trades.
- **Cap exposure**: lower `position_tier3_usd` or `daily_budget_usd`.

## Caveats

- Fast markets resolve on Chainlink, not Binance. The strategy trades the correlation, not the exact price.
- Spreads on newly opened fast markets can be wide — the 10% spread cap filters most of these.
- This is an alpha skill (status: scaffold). Run paper validation before committing real funds.
