Polymarket Weather Trader
Trade Polymarket weather markets using NOAA (US) and Open-Meteo (international) forecasts via Simmer API. Inspired by gopfan2's weather trading approach. Use...
Trade Polymarket weather markets using NOAA (US) and Open-Meteo (international) forecasts via Simmer API. Inspired by gopfan2's weather trading approach. Use...
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Trade temperature markets on Polymarket using NOAA forecast data.
This is a template. The default signal is NOAA temperature forecasts — remix it with other weather APIs, different forecast models, or additional market types (precipitation, wind, etc.). The skill handles the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.
Weather market outcomes are discrete: a temperature bucket ("34-35°F") either matches the actual high on resolution day or it doesn't. The strategy works when the NOAA forecast is more accurate than what the market has priced in.
Test before going live. The skill defaults to paper mode — trades are simulated at real market prices while your USDC stays untouched. Pass
--live when you're ready. For a fully virtual sandbox, switch the SDK venue to sim for $SIM-denominated paper trading.
Simmer's server-side risk monitor handles stop-loss and take-profit automatically. Defaults (editable at
simmer.markets/dashboard → Settings → Auto Risk Monitor):
External wallet users: monitors emit alerts via the briefing endpoint — your agent must be running for sells to execute. Managed wallet users: server executes directly.
You can override defaults per-skill in the dashboard.
Use this skill when the user wants to:
SIMMER_WEATHER_BINARY_ONLY is now an autotune-exposed tunable — set true to trade only binary yes/no weather markets.max_position_usd and sizing_pct tuned to match typical use.--vol-targeting flag or SIMMER_WEATHER_VOL_TARGETING=true.
SIMMER_WEATHER_TARGET_VOL — target annualized vol (default 20%)SIMMER_WEATHER_VOL_MAX_LEVERAGE — max scale-up multiplier (default 2.0x)SIMMER_WEATHER_VOL_MIN_ALLOC — min allocation floor (default 20%)SIMMER_WEATHER_VOL_SPAN — EWMA responsiveness (default 10)SIMMER_WEATHER_ENTRY → SIMMER_WEATHER_ENTRY_THRESHOLDSIMMER_WEATHER_EXIT → SIMMER_WEATHER_EXIT_THRESHOLDSIMMER_WEATHER_MAX_POSITION → SIMMER_WEATHER_MAX_POSITION_USDSIMMER_WEATHER_MAX_TRADES → SIMMER_WEATHER_MAX_TRADES_PER_RUNSIMMER_WEATHER_SLIPPAGE_MAX — adjustable slippage safeguard (default 15%). Set higher for research mode on illiquid markets.SIMMER_WEATHER_MIN_LIQUIDITY — skip markets with liquidity below this USD threshold (default 0 = disabled). Pre-filters thin markets before execution.SIMMER_WEATHER_LOCATIONS and SIMMER_WEATHER_BINARY_ONLY now exposed as autotune tunables.SIMMER_WEATHER_BINARY_ONLY config to skip range-bucket events (e.g., "NYC 34-35°F") and only trade binary yes/no weather marketsSIMMER_WEATHER_MAX_TRADES config to limit trades per scan cycle (default: 5)scripts/status.py for quick balance and position checkssdk:weather for portfolio tracking--smart-sizing)When user asks to install or configure this skill:
Install the Simmer SDK
pip install simmer-sdk
Ask for Simmer API key
SIMMER_API_KEYAsk for wallet private key (required for live trading)
WALLET_PRIVATE_KEYAsk about settings (or confirm defaults)
Save settings to environment variables
Set up cron (disabled by default — user must enable scheduling)
| Setting | Environment Variable | Default | Description |
|---|---|---|---|
| Entry threshold | | 0.15 | Buy when price below this |
| Exit threshold | | 0.45 | Sell when price above this |
| Max position | | 2.00 | Maximum USD per trade |
| Max trades/run | | 5 | Maximum trades per scan cycle |
| Locations | | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |
| Binary only | | false | Skip range-bucket events (e.g., "34-35°F"), only trade binary yes/no markets |
| Smart sizing % | | 0.05 | % of balance per trade |
| Slippage max | | 0.15 | Skip trades with slippage above this (0.15 = 15%) |
| Min liquidity | | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |
| Vol targeting | | false | Enable volatility targeting for dynamic position sizing |
| Target vol | | 0.20 | Target annualized volatility (0.20 = 20%) |
| Vol max leverage | | 2.0 | Max scale-up multiplier in calm markets |
| Vol min alloc | | 0.2 | Min allocation floor in volatile markets (0.2 = 20%) |
| Vol EWMA span | | 10 | EWMA span for vol calculation (lower = more responsive) |
Legacy env var aliases (still accepted for backwards compatibility):
SIMMER_WEATHER_ENTRY, SIMMER_WEATHER_EXIT, SIMMER_WEATHER_MAX_POSITION, SIMMER_WEATHER_MAX_TRADES
Supported locations: NYC, Chicago, Seattle, Atlanta, Dallas, Miami
# Check account balance and positions python scripts/status.pyDetailed position list
python scripts/status.py --positions
API Reference:
https://api.simmer.marketsAuthorization: Bearer $SIMMER_API_KEYGET /api/sdk/portfolioGET /api/sdk/positions# Dry run (default — shows opportunities, no trades) python weather_trader.pyExecute real trades
python weather_trader.py --live
With smart position sizing (uses portfolio balance)
python weather_trader.py --live --smart-sizing
Check positions only
python weather_trader.py --positions
View config
python weather_trader.py --config
Disable safeguards (not recommended)
python weather_trader.py --no-safeguards
Disable trend detection
python weather_trader.py --no-trends
Enable volatility targeting (dynamic sizing based on market vol)
python weather_trader.py --live --smart-sizing --vol-targeting
Quiet mode — only output on trades/errors (ideal for high-frequency runs)
python weather_trader.py --live --quiet
Combine: frequent scanning, minimal noise
python weather_trader.py --live --smart-sizing --quiet
Each cycle the script:
sdk:weather for trackingWith
--smart-sizing, position size is calculated as:
SIMMER_WEATHER_SIZING_PCT)This prevents over-deployment and scales with your account size.
With
--vol-targeting, position sizes are dynamically adjusted based on realized market volatility:
position_size = base_size × clamp(target_vol / realized_vol, min_alloc, max_leverage)
Combines with smart sizing: first calculate base size from portfolio %, then apply the vol multiplier.
Before trading, the skill checks:
Disable with
--no-safeguards (not recommended).
All trades are tagged with
source: "sdk:weather". This means:
🌤️ Simmer Weather Trading Skill ==================================================⚙️ Configuration: Entry threshold: 15% (buy below this) Exit threshold: 45% (sell above this) Max position: $2.00 Locations: NYC Smart sizing: ✓ Enabled Safeguards: ✓ Enabled Trend detection: ✓ Enabled
💰 Portfolio: Balance: $150.00 Exposure: $45.00 Positions: 8
📍 NYC 2026-01-28 (high temp) NOAA forecast: 34°F Matching bucket: 34-35°F @ $0.12 💡 Smart sizing: $2.00 (capped at max position) ✅ Below threshold ($0.15) - BUY opportunity! 📉 (dropped 15% in 24h) Executing trade... ✅ Bought 62.5 shares @ $0.12
📊 Summary: Events scanned: 12 Entry opportunities: 1 Trades executed: 1
"Safeguard blocked: Severe flip-flop warning"
"Slippage too high"
"Resolves in Xh - too soon"
"No weather markets found"
"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 funds on Polygon"
"API key invalid"
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.