Install
openclaw skills install polymarket-bundle-tennis-set-match-traderTrades cross-market constraint violations in tennis Set 1 Games O/U, Match Games O/U, Total Sets O/U, Set Handicap, and Set/Match Winner bundles on Polymarket. Match total always exceeds Set 1 total so P(Match O/U X OVER) must be >= P(Set 1 O/U X OVER) and Total Sets O/U 2.5 constrains set handicap pricing. Violations are structural arbitrage sized by conviction.
openclaw skills install polymarket-bundle-tennis-set-match-traderThis is a template. The default signal detects cross-market constraint violations between tennis Set 1 O/U, Match O/U, Total Sets O/U, and Set Handicap props -- remix it with live score feeds, surface-specific models, or player fatigue data. The skill handles all the plumbing (market discovery, bundle construction, trade execution, safeguards). Your agent provides the alpha.
Tennis matches on Polymarket spawn multiple correlated prop markets: Set 1 Games O/U, Match Games O/U, Total Sets O/U, Set Handicap, and Set/Match Winner. These props are mathematically constrained -- match total games must always exceed Set 1 total games, and Total Sets O/U 2.5 directly implies the probability of a straight-sets finish which constrains set handicap pricing. When Polymarket prices violate these structural constraints, it is pure arbitrage.
Each tennis match prop is priced by its own order book with independent liquidity. Retail traders view each prop in isolation -- they price "Set 1 Games O/U 9.5" and "Match Games O/U 9.5" independently, ignoring the mathematical certainty that Match total >= Set 1 total. Similarly, "Total Sets O/U 2.5 OVER" at 60% means there is a 40% chance of a straight-sets finish, which directly bounds what "Set Handicap -1.5" should price at. No sportsbook would allow these constraints to be violated, but Polymarket has no central line-setter enforcing cross-prop consistency.
get_markets(limit=200) fallbackThe 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 mean nothing runs automatically until configured in Simmer UI.
| Variable | Required | Notes |
|---|---|---|
SIMMER_API_KEY | Yes | Trading authority. Treat as a 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 at full conviction |
SIMMER_MIN_TRADE | 5 | Floor for any trade |
SIMMER_MIN_VOLUME | 3000 | Min market volume filter (USD) |
SIMMER_MAX_SPREAD | 0.08 | Max bid-ask spread |
SIMMER_MIN_DAYS | 1 | Min days until resolution |
SIMMER_MAX_POSITIONS | 8 | Max concurrent open positions |
SIMMER_YES_THRESHOLD | 0.38 | Buy YES only if market probability <= this |
SIMMER_NO_THRESHOLD | 0.62 | Sell NO only if market probability >= this |
SIMMER_MIN_VIOLATION | 0.03 | Min constraint violation magnitude to trigger a trade |
Traditional sportsbooks employ professional line-setters who enforce mathematical consistency across all props within the same match. Polymarket has no such mechanism -- each prop is priced by its own order book. Tennis is especially vulnerable because:
This skill treats the tennis prop bundle as a system of constraints and trades the repair when any constraint is violated.
simmer-sdk by Simmer Markets (SpartanLabsXyz)