Install
openclaw skills install polymarket-macro-sentiment-divergence-traderDetects macro sentiment divergence across Polymarket prediction markets. When positive-sentiment categories (sports winners, tech milestones, entertainment, crypto UP) and negative-sentiment categories (geopolitical escalation, catastrophe, disease outbreaks, crypto DOWN) are both priced high simultaneously, that is logically inconsistent. Trades against the stale side of the divergence.
openclaw skills install polymarket-macro-sentiment-divergence-traderThis is a template. The default signal classifies markets into positive/negative sentiment buckets, computes a divergence index, and trades against the stale side when macro sentiment is logically inconsistent. The skill handles all the plumbing (market discovery, trade execution, safeguards). Your agent provides the alpha.
Prediction markets collectively reflect macro sentiment. "Positive" markets (sports favorites winning, tech milestones being hit, crypto going UP, entertainment events succeeding) and "negative" markets (geopolitical escalation, catastrophe events, disease outbreaks, crypto going DOWN) should not both be priced high simultaneously. If the average probability of positive-sentiment markets is 0.65 and the average probability of negative-sentiment markets is 0.60, both sides are saying "likely" -- but the world cannot be both great and terrible at the same time. One side is stale.
The structural edge: retail traders price individual markets in isolation. They don't cross-reference whether their collective bets are internally consistent. A sports fan pricing "Lakers win championship" at 70% is not checking whether "major recession in 2026" is also at 65%. But those two bets are in tension -- championship attendance, sponsorship revenue, and betting volumes all correlate with economic health.
The divergence formula: positive_index + negative_index - 1.0. When both indices exceed 0.5, the sum exceeds 1.0 and the divergence is positive. A divergence of 0.15+ means the collective market is pricing in logically contradictory macro states.
get_markets(limit=200) plus targeted keyword searchpositive_index = average probability of positive-sentiment marketsnegative_index = average probability of negative-sentiment marketsdivergence = positive_index + negative_index - 1.0SIMMER_DIVERGENCE_THRESHOLD (default 0.15):
Positive sentiment (things going well):
Negative sentiment (things going badly):
The side with less recent price movement (closer to 50% on average) is considered stale -- it hasn't repriced to whatever new information caused the other side to move. Distance from 50% serves as a proxy for recency of directional movement.
The skill defaults to paper trading (venue="sim"). Real trades only with --live flag.
| Scenario | Mode | Financial risk |
|---|---|---|
python trader.py | Paper (sim) | None |
| Cron / automaton | Paper (sim) | None |
python trader.py --live | Live (polymarket) | Real USDC |
autostart: false and cron: null -- nothing runs automatically until you configure it in Simmer UI.
| Variable | Required | Notes |
|---|---|---|
SIMMER_API_KEY | Yes | Trading authority. Treat as high-value credential. |
All declared as tunables in clawhub.json and adjustable from the Simmer UI.
| Variable | Default | Purpose |
|---|---|---|
SIMMER_MAX_POSITION | 40 | Max USDC per trade (reached at 100% conviction) |
SIMMER_MIN_VOLUME | 5000 | Min market volume filter (USD) |
SIMMER_MAX_SPREAD | 0.10 | Max bid-ask spread (10%) |
SIMMER_MIN_DAYS | 3 | Min days until resolution |
SIMMER_MAX_POSITIONS | 8 | Max concurrent open positions |
SIMMER_YES_THRESHOLD | 0.38 | Buy YES if market price <= this value |
SIMMER_NO_THRESHOLD | 0.62 | Sell NO if market price >= this value |
SIMMER_MIN_TRADE | 5 | Floor for any trade (min USDC regardless of conviction) |
SIMMER_DIVERGENCE_THRESHOLD | 0.15 | Min divergence score to trigger trades |
SIMMER_MIN_BUCKET_SIZE | 3 | Min markets required per sentiment bucket |
simmer-sdk by Simmer Markets (SpartanLabsXyz)