Kalshi Weather Trader
by @simmer
Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to t...
clawhub install kalshi-weather-traderπ About This Skill
name: kalshi-weather-trader description: Trade Kalshi weather markets using NOAA forecasts via Simmer SDK and DFlow on Solana. Port of the popular polymarket-weather-trader. Use when user wants to trade temperature markets on Kalshi, automate weather bets, or check NOAA forecasts. metadata: author: Simmer (@simmer_markets) version: "1.0.6" displayName: Kalshi Weather Trader difficulty: intermediate attribution: Strategy inspired by gopfan2, powered by DFlow primaryEnv: SIMMER_API_KEY envVars: - name: SIMMER_API_KEY required: true description: "Your Simmer SDK API key β get from simmer.markets/dashboard" - name: SOLANA_PRIVATE_KEY required: true description: "Solana wallet private key (base58) for signing DFlow trades. Kalshi has no managed-wallet mode β self-custody is the only option. Store only in secured environment; never commit."
Kalshi Weather Trader
Trade temperature markets on Kalshi using NOAA forecast data, via DFlow on Solana.
> 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 all the plumbing (market discovery, NOAA parsing, trade execution, safeguards). Your agent provides the alpha.
> Powered by DFlow. Kalshi trades execute via DFlow's Solana-based prediction market infrastructure. KYC verification through Proof is required for buys.
When to Use This Skill
Use this skill when the user wants to:
Setup Flow
When user asks to install or configure this skill:
1. Install the Simmer SDK
pip install simmer-sdk
2. Ask for Simmer API key
- They can get it from simmer.markets/dashboard β SDK tab
- Store in environment as SIMMER_API_KEY
3. Ask for Solana private key (required for live trading)
- This is the base58-encoded secret key for their Solana wallet
- Store in environment as SOLANA_PRIVATE_KEY
- The SDK uses this to sign transactions client-side automatically
4. Verify KYC
- Required for Kalshi buys (not sells)
- Complete at dflow.net/proof
- Check status: curl "https://api.simmer.markets/api/proof/status?wallet=YOUR_SOLANA_ADDRESS"
5. Fund the wallet - SOL on Solana mainnet for transaction fees (~0.01 SOL) - USDC on Solana mainnet for trading capital
6. Ask about settings (or confirm defaults) - Entry threshold: When to buy (default 15Β’) - Exit threshold: When to sell (default 45Β’) - Max position: Amount per trade (default $2.00) - Locations: Which cities to trade (default NYC)
7. Save settings to environment variables
8. Set up cron (disabled by default β user must enable scheduling)
Configuration
| Setting | Environment Variable | Default | Description |
|---------|---------------------|---------|-------------|
| Entry threshold | SIMMER_WEATHER_ENTRY_THRESHOLD | 0.15 | Buy when price below this |
| Exit threshold | SIMMER_WEATHER_EXIT_THRESHOLD | 0.45 | Sell when price above this |
| Max position | SIMMER_WEATHER_MAX_POSITION_USD | 2.00 | Maximum USD per trade |
| Max trades/run | SIMMER_WEATHER_MAX_TRADES_PER_RUN | 5 | Maximum trades per scan cycle |
| Locations | SIMMER_WEATHER_LOCATIONS | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |
| Binary only | SIMMER_WEATHER_BINARY_ONLY | false | Skip range-bucket events, only trade binary yes/no markets |
| Smart sizing % | SIMMER_WEATHER_SIZING_PCT | 0.05 | % of balance per trade |
| Slippage max | SIMMER_WEATHER_SLIPPAGE_MAX | 0.15 | Skip trades with slippage above this (0.15 = 15%) |
| Min liquidity | SIMMER_WEATHER_MIN_LIQUIDITY | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |
Supported locations: NYC, Chicago, Seattle, Atlanta, Dallas, Miami
Quick Commands
# 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/positionsRunning the Skill
# Dry run (default β shows opportunities, no trades)
python weather_trader.pyExecute real trades
python weather_trader.py --liveWith smart position sizing (uses portfolio balance)
python weather_trader.py --live --smart-sizingCheck positions only
python weather_trader.py --positionsView config
python weather_trader.py --configQuiet mode β only output on trades/errors (ideal for high-frequency runs)
python weather_trader.py --live --smart-sizing --quiet
How It Works
Each cycle the script:
1. Fetches active weather markets from Simmer API
2. Groups markets by event (each temperature day is one event)
3. Parses event names to get location and date
4. Fetches NOAA forecast for that location/date
5. Finds the temperature bucket that matches the forecast
6. Safeguards: Checks context for flip-flop warnings, slippage, time decay
7. Trend Detection: Looks for recent price drops (stronger buy signal)
8. Entry: If bucket price < threshold and safeguards pass β BUY
9. Exit: Checks open positions, sells if price > exit threshold
10. Tagging: All trades tagged with sdk:kalshi-weather for tracking
Safeguards
Before trading, the skill checks:
Disable with --no-safeguards (not recommended).
Troubleshooting
"Safeguard blocked: Severe flip-flop warning"
"Slippage too high"
"No weather markets found"
POST /api/sdk/markets/import/kalshi"KYC verification required"
"SOLANA_PRIVATE_KEY not set"
export SOLANA_PRIVATE_KEY="Insufficient SOL for transaction fees"
"API key invalid"
βοΈ Configuration
| Setting | Environment Variable | Default | Description |
|---------|---------------------|---------|-------------|
| Entry threshold | SIMMER_WEATHER_ENTRY_THRESHOLD | 0.15 | Buy when price below this |
| Exit threshold | SIMMER_WEATHER_EXIT_THRESHOLD | 0.45 | Sell when price above this |
| Max position | SIMMER_WEATHER_MAX_POSITION_USD | 2.00 | Maximum USD per trade |
| Max trades/run | SIMMER_WEATHER_MAX_TRADES_PER_RUN | 5 | Maximum trades per scan cycle |
| Locations | SIMMER_WEATHER_LOCATIONS | NYC | Comma-separated cities (NYC, Chicago, Seattle, Atlanta, Dallas, Miami) |
| Binary only | SIMMER_WEATHER_BINARY_ONLY | false | Skip range-bucket events, only trade binary yes/no markets |
| Smart sizing % | SIMMER_WEATHER_SIZING_PCT | 0.05 | % of balance per trade |
| Slippage max | SIMMER_WEATHER_SLIPPAGE_MAX | 0.15 | Skip trades with slippage above this (0.15 = 15%) |
| Min liquidity | SIMMER_WEATHER_MIN_LIQUIDITY | 0 | Skip markets with liquidity below this USD amount (0 = disabled) |
Supported locations: NYC, Chicago, Seattle, Atlanta, Dallas, Miami
π Tips & Best Practices
"Safeguard blocked: Severe flip-flop warning"
"Slippage too high"
"No weather markets found"
POST /api/sdk/markets/import/kalshi"KYC verification required"
"SOLANA_PRIVATE_KEY not set"
export SOLANA_PRIVATE_KEY="Insufficient SOL for transaction fees"
"API key invalid"