Skills polymarket-simmer-fastloop

Trade Polymarket BTC/ETH/SOL 5/15-minute fast markets with momentum and order book filters.

install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/andrewbrownrd/polymarket-simmer-fastloop" ~/.claude/skills/openclaw-skills-polymarket-simmer-fastloop && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/andrewbrownrd/polymarket-simmer-fastloop" ~/.openclaw/skills/openclaw-skills-polymarket-simmer-fastloop && rm -rf "$T"
manifest: skills/andrewbrownrd/polymarket-simmer-fastloop/SKILL.md
source content

Polymarket Simmer FastLoop Trader

[!TIP] This is a template. The default signal is a Mean Reversion strategy using Binance momentum exhaustion and L2 order book imbalance. Remix it with alternative signals like trend-following momentum, social sentiment feeds, or cross-venue arbitrage models. The skill handles all the plumbing (market discovery, fee-accurate EV math, position tracking). Your agent provides the alpha.

Automated trading skill for Polymarket BTC/ETH/SOL 5-minute and 15-minute fast markets.

Default is paper mode. Use

--live
for real trades.

Strategy

When the latest 5-minute candle shows a rapid spike (momentum > threshold) the script buys the reverse side, capturing the pullback. Signals are filtered by:

  • Momentum: Binance 1-minute candles, configurable threshold (default 1.0%).
  • Order Book Imbalance (optional): Top 20 levels of Binance L2 book confirm directional bias.
  • NOFX Institutional Netflow: Filters trades using institutional flow data.
  • Time-of-Day Filter: Skips low-liquidity hours (02:00–06:00 UTC) by default.
  • Fee-Accurate EV: Only trades when divergence exceeds fee breakeven + buffer.
  • Volatility-Adjusted Sizing: High volatility reduces position size automatically.
  • Pre-Caching (Ignition): On every run, the skill scans and caches upcoming market IDs to disk (
    fast_markets_cache.json
    ). At market open, the Simmer API briefly hides the market — the skill uses the cache to execute trades during this "API blackout" window, ensuring no opportunity is missed.

Setup

1. Get Simmer API Key

  • Register at simmer.markets.
  • Go to Dashboard -> SDK tab.
  • Copy your API key:
    export SIMMER_API_KEY="your-key-here"
    .

2. Required Environment Variables

VariableRequiredDescriptionValues
SIMMER_API_KEY
YesYour Simmer SDK keyGet from simmer.markets
TRADING_VENUE
YesExecution environment
simmer
(Paper) or
polymarket
(Live)
WALLET_PRIVATE_KEY
OptionalYour Polymarket wallet keyRequired only if
TRADING_VENUE="polymarket"
  • simmer
    (Default): Paper Trading. Simulates trades using virtual funds. No real USDC needed.
  • polymarket
    : Real Trading. Connects to Polymarket. You must have USDC in the wallet.

[!WARNING] Never share your

WALLET_PRIVATE_KEY
or
SIMMER_API_KEY
. The SDK signs trades locally; your private key is never transmitted.

Quick Start

pip install simmer-sdk
export SIMMER_API_KEY="your-key-here"

# Paper mode (default)
python polymarket-simmer-fastloop.py

# Live trading
python polymarket-simmer-fastloop.py --live

# Check win rate and P&L stats
python polymarket-simmer-fastloop.py --stats

# Resolve expired trades against real outcomes
python polymarket-simmer-fastloop.py --resolve

# Quiet mode for cron
python polymarket-simmer-fastloop.py --live --quiet

Cron Setup

OpenClaw:

openclaw cron add \
  --name "Simmer FastLoop" \
  --cron "*/5 * * * *" \
  --tz "UTC" \
  --session isolated \
  --message "Run: cd /path/to/skill && python polymarket-simmer-fastloop.py --live --quiet. Show output summary." \
  --announce

Linux crontab:

*/5 * * * * cd /path/to/skill && python polymarket-simmer-fastloop.py --live --quiet

All Settings

SettingDefaultDescription
entry_threshold
0.05Min divergence from 50c
min_momentum_pct
1.0Min % asset move to trigger
max_position
5.0Max $ per trade
signal_source
binancebinance or coingecko
lookback_minutes
5Candle lookback window
min_time_remaining
60Skip if < N seconds left
target_time_min
90Prefer markets with >= N seconds left
target_time_max
210Prefer markets with <= N seconds left
asset
BTCBTC, ETH, or SOL
window
5m5m or 15m
volume_confidence
trueSkip low-volume signals
require_orderbook
falseRequire order book confirmation
time_filter
trueSkip 02:00–06:00 UTC
vol_sizing
trueAdjust size by volatility
fee_buffer
0.05Extra edge above fee breakeven
daily_budget
10.0Max spend per UTC day
starting_balance
1000.0Paper portfolio starting balance

🎨 Remixing the Signal

This skill is a remixable template. We distinguish between Plumbing (Infrastructure) and Alpha (Strategy).

Core Components:

  • The Plumbing (Structural): Market discovery (Gamma/Simmer fallback), Pre-Caching, execution via Simmer SDK, and fee-accurate EV calculations.
  • The Alpha (Replaceable): The decision-making logic inside
    run_strategy
    where
    side
    is determined based on CEX signals.

How to Remix:

  1. Find the Signal logic: In
    polymarket-simmer-fastloop.py
    , look for the
    run_strategy
    function around line ~950.
  2. Modify the Decision:
    • Swap the
      side = "no"
      and
      side = "yes"
      logic to change from Mean Reversion to Trend Following.
    • Replace
      get_momentum
      with your own model or API (e.g., custom XGBoost classifier or GPT-4o signal).
  3. Refine Execution: Edit
    calculate_position_size
    to implement custom risk management formulas.

Use this template to bypass the complexity of Polymarket's order book and focus entirely on your strategy logic.

Troubleshooting

"Momentum below threshold" — Asset move is too small. Lower

min_momentum_pct
if needed.

"Order book imbalance: neutral" — Market is balanced, signal skipped when

require_orderbook=true
.

"Time filter: low liquidity window" — Current hour is 02–06 UTC. Set

time_filter=false
to override.