Snipe Polymarket opportunities from your own signal sources. Monitors RSS feeds with Trading Agent-grade safeguards.
--- name: polymarket-signal-sniper description: Snipe Polymarket opportunities from your own signal sources. Monitors RSS feeds with Trading Agent-grade safeguards. metadata: author: Simmer (@simmer_markets) version: "1.5.3" displayName: Polymarket Signal Sniper difficulty: intermediate --- # Polymarket Signal Sniper Your signals, Simmer's trading intelligence. > ๐จ **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds. > **This is a template.** The default signal source is RSS feeds โ remix it with any data source (APIs, webhooks, social media, custom scrapers). The skill handles all the plumbing (market matching, safeguards, trade execution). Your agent provides the alpha. ## When to Use This Skill Use this skill when the user wants to: - Monitor RSS feeds for trading opportunities - Trade on breaking news before markets react - Configure their own signal sources and keywords - Get Trading Agent-grade safeguards on their trades ## Setup Flow When user asks to install or configure this skill: 1. **Install the Simmer SDK** ```bash 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 wallet private key** (required for live trading) - This is the private key for their Polymarket wallet (the wallet that holds USDC) - Store in environment as `WALLET_PRIVATE_KEY` - The SDK uses this to sign orders client-side automatically โ no manual signing needed - Not needed for $SIM paper trading on the Simmer venue ## Quick Commands ```bash # Check account balance and positions python scripts/status.py # Detailed position list python scripts/status.py --positions ``` **API Reference:** - Base URL: `https://api.simmer.markets` - Auth: `Authorization: Bearer $SIMMER_API_KEY` - Portfolio: `GET /api/sdk/portfolio` - Positions: `GET /api/sdk/positions` ## Quick Start (Ad-Hoc Usage) **User provides RSS feed and market directly:** ``` User: "Watch this RSS feed for greenland news: https://news.google.com/rss/search?q=greenland" User: "Snipe any news about trump from this feed" ``` โ Run with `--feed` and `--market` flags: ```bash python signal_sniper.py --feed "https://news.google.com/rss/search?q=greenland" --market "greenland-acquisition" --dry-run ``` ## Persistent Setup (Optional) For automated recurring scans, configure via environment: | Setting | Environment Variable | Default | Description | |---------|---------------------|---------|-------------| | RSS Feeds | `SIMMER_SNIPER_FEEDS` | (none) | Comma-separated RSS URLs | | Markets | `SIMMER_SNIPER_MARKETS` | (auto) | Comma-separated market IDs (auto-discovers from keywords if empty) | | Keywords | `SIMMER_SNIPER_KEYWORDS` | (none) | Comma-separated keywords to match | | Confidence | `SIMMER_SNIPER_CONFIDENCE_THRESHOLD` | 0.7 | Min confidence to trade (0.0-1.0) | | Max USD | `SIMMER_SNIPER_MAX_USD` | 25 | Max per trade | | Max trades/run | `SIMMER_SNIPER_MAX_TRADES_PER_RUN` | 5 | Maximum trades per scan cycle | **Polymarket Constraints:** - Minimum 5 shares per order - Trades below this threshold are rejected with an error message ## How It Works Each cycle the script: 1. Polls configured RSS feeds 2. Filters articles by keywords (if configured) 3. Matches articles to target markets (auto-discovers from keywords if no markets configured) 4. For each match, calls SDK context endpoint for safeguards: - Position awareness (already holding?) - Flip-flop detection (recently changed direction?) - Slippage estimates (is market liquid?) - Time decay (resolving soon?) - Resolution criteria (what actually resolves this market?) 5. If safeguards pass, infers trade direction from article sentiment 6. Executes trade via SDK (with max trades per run cap) 7. Tracks processed articles to avoid duplicates ## Running the Skill **Run a scan (dry run by default โ no trades):** ```bash python signal_sniper.py ``` **Execute real trades:** ```bash python signal_sniper.py --live ``` **Check for signals without trading:** ```bash python signal_sniper.py --scan-only ``` **View current config:** ```bash python signal_sniper.py --config ``` **Override for one run:** ```bash python signal_sniper.py --feed "https://..." --keywords "trump,greenland" --market "abc123" ``` **Show processed articles:** ```bash python signal_sniper.py --history ``` ## Interpreting Context Warnings Before trading, ALWAYS check the context warnings. The skill will show you: | Warning | Action | |---------|--------| | `MARKET RESOLVED` | Do NOT trade | | `HIGH URGENCY: Resolves in Xh` | Consider if signal is timely enough | | `flip_flop_warning: SEVERE` | Skip - you've been reversing too much | | `flip_flop_warning: CAUTION` | Proceed carefully, need strong signal | | `Wide spread (X%)` | Reduce position size or skip | | `Simmer AI signal: X% more bullish/bearish` | Consider Simmer's oracle opinion | ## Analyzing Signals When you find a matching article, analyze it carefully: 1. **Read the headline and summary** - What is the actual news? 2. **Check resolution_criteria** - What ACTUALLY resolves this market? - Example: "greenland" in headline doesn't mean "acquisition complete" - The resolution might be "US formally acquires Greenland by 2027" - Does this signal move the needle on THAT specific criteria? 3. **Assess confidence** (0.0-1.0): - How directly does this signal relate to resolution criteria? - Is the source credible? - Is this news likely already priced in? 4. **Only trade if**: - Confidence > threshold (default 0.7) - No severe warnings - Signal validates against resolution criteria ## Example Conversations **User: "Set up news sniping for the Greenland market"** โ Ask for RSS feeds they want to monitor โ Configure with market ID and keywords โ Enable cron for recurring scans **User: "Check this feed for trading signals"** โ Run: `python signal_sniper.py --feed "URL" --scan-only` โ Show found articles and potential matches **User: "Snipe any bitcoin news from CoinDesk"** โ Run with CoinDesk RSS and bitcoin-related markets โ Show matches and ask if they want to trade **User: "What signals have we processed?"** โ Run: `python signal_sniper.py --history` โ Show recent articles and actions taken ## Example Trade Flow ``` 1. RSS poll finds: "Trump and Denmark reach preliminary Greenland agreement" 2. Keywords match: "greenland", "trump" 3. Call context endpoint for market "greenland-acquisition-2027" 4. Check warnings: none severe โ 5. Resolution criteria: "Resolves YES if US formally acquires Greenland by 2027" 6. You analyze: "preliminary agreement" โ "formally acquires" but bullish signal 7. Confidence: 0.75 (positive indicator, not definitive) 8. Check slippage: 2.5% on $25 โ 9. Execute: BUY YES $25 10. Report: "๐ฏ Sniped: Trump/Greenland agreement โ BUY YES $25" ``` ## Troubleshooting **"No feeds configured"** - Provide feeds in message: "watch this RSS: https://..." - Or set `SIMMER_SNIPER_FEEDS` environment variable **"No matching articles found"** - Check keywords are correct - RSS feed might not have recent articles - Try `--scan-only` to see what's in the feed **"Skipped due to flip-flop warning"** - You've been changing direction too much on this market - Wait before trading again, or find new information **"Slippage too high"** - Market is illiquid - Reduce trade size or skip **"Already processed"** - This article was already seen - Working as intended (dedup) **"External wallet requires a pre-signed order"** - `WALLET_PRIVATE_KEY` is not set in the environment - The SDK signs orders automatically when this env var is present โ no manual signing code needed - Fix: `export WALLET_PRIVATE_KEY=0x<your-polymarket-wallet-private-key>` - Do NOT attempt to sign orders manually or modify the skill code โ the SDK handles it **"Balance shows $0 but I have funds on Polygon"** - Polymarket V2 (live 2026-04-28) uses **pUSD** (PolyUSD, 1:1 backed by USDC.e). If your wallet holds USDC.e, migrate at [simmer.markets/dashboard](https://simmer.markets/dashboard) with one click (~30s) - If you bridged native USDC (Circle), swap to USDC.e first, then migrate to pUSD - Full migration guide: [docs.simmer.markets/v2-migration](https://docs.simmer.markets/v2-migration) ## Finding Good RSS Feeds Tips for choosing signal sources: - **Google News RSS**: `https://news.google.com/rss/search?q=YOUR_TOPIC` - **Niche sources**: Better than mainstream (less priced in) - **Official sources**: Government, company announcements - **Twitter lists โ RSS**: Use services like Nitter or RSS.app The skill works best when: - Feeds are relevant to your target markets - You have specific keywords to filter noise - Sources publish before mainstream coverage
don't have the plugin yet? install it then click "run inline in claude" again.