---
name: polymarket-elon-tweets
description: 'Trade Polymarket "Elon Musk # tweets" markets using XTracker post count data. Buys adjacent range buckets when combined cost < $1 for structural edge. Use when user wants to trade tweet count markets, automate Elon tweet bets, check XTracker stats, or run noovd-style trading.'
metadata:
  author: Simmer (@simmer_markets)
  version: "1.3.5"
  displayName: Polymarket Elon Tweet Trader
  difficulty: advanced
  attribution: Strategy inspired by @noovd
---
# Polymarket Elon Tweet Trader

Trade "Elon Musk # tweets" markets on Polymarket using XTracker post count data.

> 🚨 **Framework, not a production trading system.** Read [DISCLAIMER.md](./DISCLAIMER.md) before connecting to a wallet with real funds.

## When to Use This Skill

Use this skill when the user wants to:
- Trade Elon Musk tweet count markets automatically
- Set up @noovd-style bucket trading
- Check XTracker pace and stats for current tweet events
- Monitor and exit existing tweet market positions
- Configure bucket spread or entry thresholds

## How the Strategy Works

Polymarket runs weekly "How many tweets will Elon post?" events with range buckets (e.g., 200-219, 220-239, 240-259). Exactly one bucket resolves YES = $1. The strategy:

1. **Get XTracker pace** — XTracker tracks Elon's real-time post count and projects the final total
2. **Find center bucket** — The bucket containing XTracker's projected pace
3. **Buy adjacent buckets** — Buy the center + neighbors (configurable spread)
4. **Check combined cost** — Only buy if the sum of bucket prices < $1 (the +EV threshold)
5. **One bucket pays $1** — When the event resolves, one of your buckets pays $1, covering costs

## 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

4. **Ask about settings** (or confirm defaults)
   - Max bucket sum: Combined price threshold (default 90¢)
   - Max position: Amount per bucket (default $5.00)
   - Bucket spread: How many neighbors to buy (default 1 = center ± 1)
   - Exit threshold: When to sell (default 65¢)

5. **Save settings to config.json or environment variables**

6. **Set up cron** (disabled by default — user must enable scheduling)

## Configuration

| Setting | Env Variable | Config Key | Default | Description |
|---------|-------------|------------|---------|-------------|
| Max bucket sum | `SIMMER_ELON_MAX_BUCKET_SUM` | `max_bucket_sum` | 0.90 | Only buy if cluster prices sum < this |
| Max position | `SIMMER_ELON_MAX_POSITION_USD` | `max_position_usd` | 5.00 | Maximum USD per bucket |
| Bucket spread | `SIMMER_ELON_BUCKET_SPREAD` | `bucket_spread` | 1 | Neighbors on each side (1 = 3 buckets) |
| Smart sizing % | `SIMMER_ELON_SIZING_PCT` | `sizing_pct` | 0.05 | % of balance per trade |
| Max trades/run | `SIMMER_ELON_MAX_TRADES_PER_RUN` | `max_trades_per_run` | 6 | Maximum trades per scan cycle |
| Exit threshold | `SIMMER_ELON_EXIT_THRESHOLD` | `exit_threshold` | 0.65 | Sell when bucket price above this |
| Slippage max | `SIMMER_ELON_SLIPPAGE_BPS` | `slippage_max_bps` | 100 | Skip trade if slippage exceeds this (basis points, e.g. 100 = 1%) |
| Min position | `SIMMER_ELON_MIN_POSITION` | `min_position_usd` | 2.00 | Floor for smart sizing (USD) |
| Data source | `SIMMER_ELON_DATA_SOURCE` | `data_source` | xtracker | Data source (xtracker) |
| Order type | `SIMMER_ELON_ORDER_TYPE` | `order_type` | GTC | Order type: GTC (good-til-cancelled) or FAK (fill-and-kill) |

Config priority: config.json > environment variables > defaults.

## 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`

## Running the Skill

```bash
# Dry run (default — shows opportunities, no trades)
python elon_tweets.py

# Execute real trades
python elon_tweets.py --live

# With smart position sizing (uses portfolio balance)
python elon_tweets.py --live --smart-sizing

# Show XTracker stats only
python elon_tweets.py --stats

# Check positions only
python elon_tweets.py --positions

# View config
python elon_tweets.py --config

# Update config
python elon_tweets.py --set max_position_usd=10.00

# Disable safeguards (not recommended)
python elon_tweets.py --no-safeguards

# Quiet mode — only output on trades/errors (ideal for cron)
python elon_tweets.py --live --quiet

# Combine: frequent scanning, minimal noise
python elon_tweets.py --live --smart-sizing --quiet
```

## How It Works

Each cycle the script:
1. Fetches active XTracker trackings for Elon Musk tweet events
2. Gets real-time stats: current count, projected pace, days remaining
3. Searches Simmer for matching tweet count markets (auto-imports if missing)
4. Finds the bucket matching XTracker's pace projection
5. Evaluates adjacent buckets (center ± spread)
6. **Entry**: If sum of cluster prices < max_bucket_sum → BUY each bucket
7. **Exit**: Checks open positions, sells if any bucket price > exit_threshold
8. **Safeguards**: Checks context for flip-flop warnings, slippage
9. **Tagging**: All trades tagged with `sdk:elon-tweets` for tracking

## Auto-Import

If tweet count markets aren't on Simmer yet, the skill automatically imports them:
- Derives the Polymarket event URL from the XTracker tracking title
- Uses the SDK import endpoint (supports multi-outcome events)
- Imports all outcome buckets as a group
- Counts as 1 daily import regardless of bucket count

## Smart Sizing

With `--smart-sizing`, position size is calculated as:
- 5% of available USDC balance (configurable via `sizing_pct`)
- Capped at max position setting ($5.00 default)
- Falls back to fixed size if portfolio unavailable

## Safeguards

Before trading, the skill checks:
- **Flip-flop warning**: Skips if you've been reversing too much
- **Slippage**: Skips if estimated slippage > 15%
- **Market status**: Skips closed or resolved markets
- **Extreme prices**: Skips buckets priced > 98% or < 2%

Disable with `--no-safeguards` (not recommended).

## Source Tagging

All trades are tagged with `source: "sdk:elon-tweets"`. This means:
- Portfolio shows breakdown by strategy
- Other skills won't sell your tweet positions
- You can track tweet trading P&L separately

## Example Output

```
🐦 Simmer Elon Tweet Trader
==================================================

⚙️ Configuration:
  Max bucket sum:  $0.90
  Max position:    $5.00
  Bucket spread:   1 (center ± 1 = 3 buckets)
  Exit threshold:  65%
  Data source:     xtracker

📊 XTracker Stats:
  Tracking: Elon Musk # tweets Feb 13 - Feb 20
  Current count: 187 posts
  Pace: 243 projected
  Days remaining: 2.3

🎯 Target cluster: 240-259 (center) + 220-239, 260-279
  240-259: $0.35
  220-239: $0.22
  260-279: $0.18
  Cluster sum: $0.75 (< $0.90 threshold) ✅

  Executing trades...
  ✅ Bought 14.3 shares of 240-259 @ $0.35
  ✅ Bought 22.7 shares of 220-239 @ $0.22
  ✅ Bought 27.8 shares of 260-279 @ $0.18

📊 Summary:
  Events scanned: 2
  Clusters evaluated: 2
  Trades executed: 3
  Exits: 0
```

## Troubleshooting

**"No XTracker trackings found"**
- XTracker may not have active Elon tweet events
- New events usually start on Wednesdays/Thursdays

**"Cluster sum $X.XX exceeds threshold"**
- Buckets are too expensive — edge is too thin
- Wait for prices to drop or widen bucket_spread

**"No matching Simmer markets found"**
- Markets may not be imported yet — skill will auto-import on next run
- Check that your API key has import capacity (10/day free, 50/day Pro)

**"Safeguard blocked: flip-flop warning"**
- You've been changing direction too much on this market
- Wait before trading again

**"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)

**"API key invalid"**
- Get new key from simmer.markets/dashboard → SDK tab
