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.
Trade Polymarket's 5-minute crypto fast markets using real-time price signals. Default: BTC momentum from Binance. Works with ETH and SOL too.
Polymarket only. All trades execute on Polymarket with real USDC. Use
--livefor real trades, dry-run is the default.
This is a template. The default signal (Binance momentum) gets you started — remix it with your own signals, data sources, or strategy. The skill handles all the plumbing (market discovery, import, trade execution). Your agent provides the alpha.
⚠️ Fast markets carry Polymarket's 10% fee (
is_paid: true). Factor this into your edge calculations.
⚠️ Risk monitoring does not apply to sub-15-minute markets. Simmer's stop-loss and take-profit monitors check positions every 15 minutes — which means they will never fire on 5m or 15m markets before resolution. Any risk settings you configure in the Simmer dashboard have no effect on these positions. Size accordingly and do not rely on automated stop-losses for fast market trades.
--set asset=ETH) or ask your bot to look for whatever market you wantYou don't need to wait for markets to show up in Simmer. FastLoop finds them in real-time on Polymarket, then imports and trades them through Simmer.
Use this skill when the user wants to:
When user asks to install or configure this skill:
Ask for Simmer API key
SIMMER_API_KEYAsk for wallet private key (required for live trading)
WALLET_PRIVATE_KEYAsk about settings (or confirm defaults)
Set up cron or loop (user drives scheduling — see "How to Run on a Loop")
# 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
The script runs one cycle — your bot drives the loop. Set up a cron job or heartbeat:
Linux crontab (local/VPS installs):
# 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
OpenClaw native cron (containerized or OpenClaw-managed setups):
openclaw cron add \
--name "Fast Loop Trader" \
--cron "*/5 * * * *" \
--tz "UTC" \
--session isolated \
--message "Run fast loop trader: cd /path/to/skill && python fastloop_trader.py --live --quiet. Show the output summary." \
--announce
Via OpenClaw heartbeat: Add to your HEARTBEAT.md:
Run: cd /path/to/fast market && python fastloop_trader.py --live --quiet
Configure via config.json, environment variables, or --set:
# 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
| 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 |
{
"entry_threshold": 0.08,
"min_momentum_pct": 0.3,
"max_position": 10.0,
"asset": "BTC",
"window": "5m",
"signal_source": "binance"
}
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
Default signal (Binance momentum):
BTCUSDT)(price_now - price_5min_ago) / price_5min_agomin_momentum_pct (default 0.5%)entry_threshold (default 5¢)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.
This skill is a template. The default Binance momentum signal is just a starting point. The skill handles all the boring parts (market discovery, import, order execution, budget tracking). You bring the signal.
Ideas for custom signals:
To customize, edit get_momentum() in fastloop_trader.py or add your own signal function. The rest of the skill (discovery, import, sizing, fee-aware EV check) stays the same.
⚡ 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%)
All trades are tagged with source: "sdk:fastloop". This means:
"No active fast markets found"
"No fast markets with >60s remaining"
min_time_remaining if you want to trade closer to expiry"Import failed: Rate limit exceeded"
"Failed to fetch price data"
--set signal_source=coingecko as fallback"Trade failed: no liquidity"
"External wallet requires a pre-signed order"
WALLET_PRIVATE_KEY is not set in the environmentexport WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>"Balance shows $0 but I have USDC on Polygon"
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174) — not native USDC