home / skills / openclaw / skills / simmer-fastloop

simmer-fastloop skill

/skills/adlai88/simmer-fastloop

This skill automates Polymarket BTC fast-loop trading using Simmer API momentum signals to execute short-term bets and monitor swift market moves.

npx playbooks add skill openclaw/skills --skill simmer-fastloop

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
7.7 KB
---
name: simmer-fastloop
displayName: Polymarket FastLoop Trader
description: Trade Polymarket BTC 5-minute and 15-minute fast markets using CEX price momentum signals via Simmer API. Default signal is Binance BTC/USDT klines. Use when user wants to trade sprint/fast markets, automate short-term crypto trading, or use CEX momentum as a Polymarket signal.
metadata: {"clawdbot":{"emoji":"⚡","requires":{"env":["SIMMER_API_KEY"]},"cron":null,"autostart":false}}
authors:
  - Simmer (@simmer_markets)
version: "1.0.1"
---

# Polymarket FastLoop Trader

Trade Polymarket's 5-minute BTC fast markets using real-time price momentum from Binance.

> **Polymarket only.** All trades execute on Polymarket with real USDC. Use `--live` for real trades, dry-run is the default.

**How it works:** Every cycle, the script finds the current live BTC fast market, checks BTC price momentum on Binance, and trades if momentum diverges from market odds.

**This is a template.** The default signal (Binance momentum) gets you started. Your agent's reasoning is the edge — layer on sentiment analysis, multi-exchange spreads, news feeds, or custom signals to improve it.

> ⚠️ Fast markets carry Polymarket's 10% fee (`is_paid: true`). Factor this into your edge calculations.

## When to Use This Skill

Use this skill when the user wants to:
- Trade BTC sprint/fast markets (5-minute or 15-minute)
- Automate short-term crypto prediction trading
- Use CEX price momentum as a Polymarket signal
- Monitor sprint market positions

## Setup Flow

When user asks to install or configure this skill:

1. **Ask for Simmer API key**
   - Get from simmer.markets/dashboard → SDK tab
   - Store in environment as `SIMMER_API_KEY`

2. **Ask about settings** (or confirm defaults)
   - Asset: BTC, ETH, or SOL (default BTC)
   - Entry threshold: Min divergence to trade (default 5¢)
   - Max position: Amount per trade (default $5.00)
   - Window: 5m or 15m (default 5m)

3. **Set up cron or loop** (user drives scheduling — see "How to Run on a Loop")

## Quick Start

```bash
# Set your API key
export SIMMER_API_KEY="your-key-here"

# Dry run — see what would happen
python fastloop_trader.py

# Go live
python fastloop_trader.py --live

# Live + quiet (for cron/heartbeat loops)
python fastloop_trader.py --live --quiet

# Live + smart sizing (5% of balance per trade)
python fastloop_trader.py --live --smart-sizing --quiet
```

## How to Run on a Loop

The script runs **one cycle** — your bot drives the loop. Set up a cron job or heartbeat:

**Every 5 minutes (one per fast market window):**
```
*/5 * * * * cd /path/to/skill && python fastloop_trader.py --live --quiet
```

**Every 1 minute (more aggressive, catches mid-window opportunities):**
```
* * * * * cd /path/to/skill && python fastloop_trader.py --live --quiet
```

**Via OpenClaw heartbeat:** Add to your HEARTBEAT.md:
```
Run: cd /path/to/fast market && python fastloop_trader.py --live --quiet
```

## Configuration

Configure via `config.json`, environment variables, or `--set`:

```bash
# Change entry threshold
python fastloop_trader.py --set entry_threshold=0.08

# Trade ETH instead of BTC
python fastloop_trader.py --set asset=ETH

# Multiple settings
python fastloop_trader.py --set min_momentum_pct=0.3 --set max_position=10
```

### Settings

| Setting | Default | Env Var | Description |
|---------|---------|---------|-------------|
| `entry_threshold` | 0.05 | `SIMMER_SPRINT_ENTRY` | Min price divergence from 50¢ to trigger |
| `min_momentum_pct` | 0.5 | `SIMMER_SPRINT_MOMENTUM` | Min BTC % move to trigger |
| `max_position` | 5.0 | `SIMMER_SPRINT_MAX_POSITION` | Max $ per trade |
| `signal_source` | binance | `SIMMER_SPRINT_SIGNAL` | Price feed (binance, coingecko) |
| `lookback_minutes` | 5 | `SIMMER_SPRINT_LOOKBACK` | Minutes of price history |
| `min_time_remaining` | 60 | `SIMMER_SPRINT_MIN_TIME` | Skip fast markets with less time left (seconds) |
| `asset` | BTC | `SIMMER_SPRINT_ASSET` | Asset to trade (BTC, ETH, SOL) |
| `window` | 5m | `SIMMER_SPRINT_WINDOW` | Market window duration (5m or 15m) |
| `volume_confidence` | true | `SIMMER_SPRINT_VOL_CONF` | Weight signal by Binance volume |

### Example config.json

```json
{
  "entry_threshold": 0.08,
  "min_momentum_pct": 0.3,
  "max_position": 10.0,
  "asset": "BTC",
  "window": "5m",
  "signal_source": "binance"
}
```

## CLI Options

```bash
python fastloop_trader.py                    # Dry run
python fastloop_trader.py --live             # Real trades
python fastloop_trader.py --live --quiet     # Silent except trades/errors
python fastloop_trader.py --smart-sizing     # Portfolio-based sizing
python fastloop_trader.py --positions        # Show open fast market positions
python fastloop_trader.py --config           # Show current config
python fastloop_trader.py --set KEY=VALUE    # Update config
```

## Signal Logic

Default signal (Binance momentum):

1. Fetch last 5 one-minute candles from Binance (`BTCUSDT`)
2. Calculate momentum: `(price_now - price_5min_ago) / price_5min_ago`
3. Compare momentum direction to current Polymarket odds
4. Trade when:
   - Momentum ≥ `min_momentum_pct` (default 0.5%)
   - Price diverges from 50¢ by ≥ `entry_threshold` (default 5¢)
   - Volume ratio > 0.5x average (filters out thin moves)

**Example:** BTC up 0.8% in last 5 min, but fast market YES price is only $0.52. The 3¢ divergence from the expected ~$0.55 → buy YES.

### Customizing Your Signal

The default momentum signal is a starting point. To add your own edge:

- **Multi-exchange:** Compare prices across Binance, Kraken, Bitfinex — divergence between exchanges can predict CLOB direction
- **Sentiment:** Layer in Twitter/social signals — a viral tweet can move fast markets
- **Technical indicators:** RSI, VWAP, order flow analysis
- **News:** Breaking news correlation — use your agent's reasoning to interpret headlines

The skill handles all the Simmer plumbing (discovery, import, trade execution). Your agent provides the alpha.

## Example Output

```
⚡ Simmer FastLoop Trading Skill
==================================================

  [DRY RUN] No trades will be executed. Use --live to enable trading.

⚙️  Configuration:
  Asset:            BTC
  Entry threshold:  0.05 (min divergence from 50¢)
  Min momentum:     0.5% (min price move)
  Max position:     $5.00
  Signal source:    binance
  Lookback:         5 minutes
  Min time left:    60s
  Volume weighting: ✓

🔍 Discovering BTC fast markets...
  Found 3 active fast markets

🎯 Selected: Bitcoin Up or Down - February 15, 5:30AM-5:35AM ET
  Expires in: 185s
  Current YES price: $0.480

📈 Fetching BTC price signal (binance)...
  Price: $97,234.50 (was $96,812.30)
  Momentum: +0.436%
  Direction: up
  Volume ratio: 1.45x avg

🧠 Analyzing...
  ⏸️  Momentum 0.436% < minimum 0.500% — skip

📊 Summary: No trade (momentum too weak: 0.436%)
```

## Source Tagging

All trades are tagged with `source: "sdk:fastloop"`. This means:
- Portfolio shows breakdown by strategy
- Other skills won't interfere with your fast market positions
- You can track fast market P&L separately

## Troubleshooting

**"No active fast markets found"**
- Fast markets may not be running (off-hours, weekends)
- Check Polymarket directly for active BTC fast markets

**"No fast markets with >60s remaining"**
- Current window is about to expire, next one isn't live yet
- Reduce `min_time_remaining` if you want to trade closer to expiry

**"Import failed: Rate limit exceeded"**
- Free tier: 10 imports/day. Pro: 50/day
- Fast market trading needs Pro for reasonable frequency

**"Failed to fetch price data"**
- Binance API may be down or rate limited
- Try `--set signal_source=coingecko` as fallback

**"Trade failed: no liquidity"**
- Fast market has thin book, try smaller position size

Overview

This skill trades Polymarket 5-minute and 15-minute BTC fast markets using CEX price momentum signals via the Simmer API. It defaults to Binance BTC/USDT klines and runs one decision cycle per invocation, so you drive scheduling with cron or a heartbeat. Dry-run is the default; enable --live to execute real USDC trades.

How this skill works

Each run discovers the current live Polymarket fast market for the chosen asset, fetches recent CEX price candles (default Binance), computes short-term momentum, and compares momentum direction to market odds. When momentum and market odds diverge beyond configured thresholds and volume confirms the move, the script submits a trade on Polymarket through Simmer. All trades are tagged for tracking and the script respects min time-to-expiry and position sizing rules.

When to use it

  • Automate BTC sprint/fast markets (5m or 15m)
  • Use centralized exchange momentum as a signal for Polymarket trades
  • Run a low-latency short-term crypto strategy using Simmer plumbing
  • Monitor and tag sprint market P&L separately from other strategies
  • Integrate custom signals (news, multi-exchange, sentiment) on top of the default momentum

Best practices

  • Start in dry-run mode to validate settings and behavior before enabling --live
  • Factor Polymarket’s 10% fast-market fee into your edge and position sizing
  • Use small default max_position and enable smart-sizing after testing
  • Set min_time_remaining to avoid trading windows about to expire
  • Combine Binance momentum with volume weighting or multi-exchange checks to reduce false signals
  • Tag trades and review per-strategy performance regularly to tune thresholds

Example use cases

  • Run every 5 minutes via cron to trade the 5-minute BTC fast market using Binance momentum
  • Run every minute to catch mid-window momentum shifts and optionally filter by min_time_remaining
  • Switch asset and signal_source to trade ETH or SOL sprint markets using the same logic
  • Layer a sentiment or news filter: only trade momentum signals when a positive social spike is detected
  • Use smart-sizing to allocate a percentage of portfolio balance for each sprint trade automatically

FAQ

What settings must I configure before trading?

Provide your SIMMER_API_KEY, choose asset (BTC default), set entry_threshold, min_momentum_pct, max_position, and window. Defaults are conservative for quick testing.

Why did the skill skip a trade despite momentum?

The skill enforces min_momentum_pct, entry_threshold from 50¢, a volume confidence filter, and min_time_remaining. Any failing check will skip execution to avoid poor edges.

How do I run this on a schedule?

The script runs one cycle per invocation. Use cron, a heartbeat, or your orchestration to call python fastloop_trader.py (--live --quiet) at your desired cadence.