A market-making strategy that places GTC (Good-Till-Cancelled) limit orders on both sides of liquid Polymarket prediction markets, capturing the bid/ask spread.
Market Selection: Finds active markets with:
is_paid=False) — 10% fee kills the edgePricing: Fetches the live CLOB midpoint for each market and quotes:
mid - 0.02 (2¢ below mid)(1 - mid) - 0.02 (2¢ below NO mid)Order Management: Cancels existing open orders before placing new ones each run.
Limits: Max $5 per order, max 3 markets per run.
Environment variables (required):
VariableRequiredDescriptionSIMMER_API_KEY✅ YesYour Simmer API key — get it at simmer.markets/dashboard → SDK tabTRADING_VENUEOptionalpolymarket (default) or sim for paper trading with virtual $SIM
Python dependency: simmer-sdk — install with pip install simmer-sdk
bash
export SIMMER_API_KEY=sk_live_... # required
export TRADING_VENUE=sim # optional: paper mode with $SIM
pip install simmer-sdk
bash
# Dry run (default)
python market_maker.py
# Live trading
python market_maker.py --live
# Show current positions
python market_maker.py --positions
# Show config
python market_maker.py --config
# Set config
python market_maker.py --set max_order_usd=10.0
Env VarDefaultDescriptionSIMMER_MM_MAX_ORDER_USD5.0Max USD per limit orderSIMMER_MM_MAX_MARKETS3Max markets per runSIMMER_MM_MIN_VOL_24H10000Min 24h volume filterSIMMER_MM_SPREAD_OFFSET0.02How far below mid to quote (2¢)SIMMER_MM_MIN_PRICE0.15Min YES price to considerSIMMER_MM_MAX_PRICE0.85Max YES price to considerSIMMER_MM_MIN_HOURS_TO_RESOLVE4Min hours to resolution