mts1b-prediction-markets
Prediction-market adapters: Kalshi, Polymarket, Manifold, Limitless, PredictFun.
Repo: github.com/MTS1B/mts1b-prediction-markets Layer: 6 Wave: 3 (months 8-12) Depends on: foundation, platform, llm, operations Audience: prediction-market traders
What it is
A treasury-allocated sleeve for prediction markets: politics, economics, science, culture. Each venue is a different beast:
| Venue | Type | Regulation | Auth |
|---|---|---|---|
kalshi | CFTC-regulated DCM | full | API key |
polymarket | crypto-based (UMA oracle) | offshore | wallet + sig |
manifold | play-money + real money | none (charitable) | API key |
limitless | onchain, conditional tokens | offshore | wallet + sig |
predictfun | crypto | offshore | wallet + sig |
⚠️ Polymarket /event/ URLs 404 — use polymarket.com/markets?_q= instead. Adapter handles.
⚠️ Kalshi schema migrated to yes_bid_dollars (decimal); adapter parses both new and legacy formats defensively.
Module layout
mts1b_prediction_markets/
├── kalshi/
│ ├── client.py
│ ├── auth.py
│ └── markets/
├── polymarket/
│ ├── client.py
│ ├── auth.py # wallet signature
│ └── markets/
├── manifold/
├── limitless/
├── predictfun/
├── unified/
│ ├── consensus.py # cross-venue YES probability
│ ├── search.py # find markets across venues by topic
│ └── arb.py # YES on one venue vs NO on another
└── api/
└── rest.py
Reading prices
from mts1b_prediction_markets.kalshi import Kalshi
async with Kalshi(api_key="...") as k:
market = await k.market_by_ticker("PRESDEM-24")
# Market(ticker="PRESDEM-24", title="Will Democrats win 2024?",
# yes_bid_dollars=Decimal("0.42"), yes_ask_dollars=Decimal("0.43"),
# no_bid_dollars=Decimal("0.57"), no_ask_dollars=Decimal("0.58"),
# last_trade_dollars=Decimal("0.42"), volume_usd=12_300_000)
Consensus + arb
from mts1b_prediction_markets.unified import consensus, find_arbs
# Cross-venue median YES probability for a search term
c = await consensus(query="Trump elected 2024", venues=["kalshi", "polymarket", "manifold"])
# Consensus(query="Trump elected 2024",
# matches=[("kalshi", 0.55), ("polymarket", 0.58), ("manifold", 0.60)],
# median=0.58,
# dispersion_iqr=0.05)
# Arb opportunities
arbs = await find_arbs(query="Trump elected 2024", min_edge_pct=2.0)
# [Arb(market_a="kalshi:PRESREP-24", yes_buy_price=0.55,
# market_b="polymarket:0x...", no_buy_price=0.40,
# net_edge_pct=5.0,
# stake_optimal_yes=0.42, stake_optimal_no=0.58)]
Order placement
from mts1b_prediction_markets.kalshi import Kalshi
async with Kalshi(api_key="...") as k:
order = await k.place_order(
ticker="PRESDEM-24",
side="yes",
quantity=100, # contracts
limit_price_dollars=Decimal("0.42"),
type="limit",
time_in_force="day",
)
OMS integration (Wave 3+): mts1b-oms learns a few prediction-market broker adapters so policy + audit + risk-gates apply consistently.
Kalshi specifics
CFTC-regulated; only U.S.-based users; KYC required. Categories: economics, climate, politics (CFTC has tight constraints here), science, entertainment.
async with Kalshi(api_key="...") as k:
politics_markets = await k.markets(category="politics", status="open")
# [Market(ticker="PRESDEM-24", ...), ...]
Polymarket specifics
UMA Oracle resolves outcomes. Settlement in USDC on Polygon. Wallet signatures required for orders. Adapter manages the wallet via:
from mts1b_prediction_markets.polymarket import Polymarket
async with Polymarket(
private_key_hex="<NEVER hard-code; load from Vault>",
chain="polygon",
) as pm:
market = await pm.market_by_slug("trump-elected-2024")
# ...
Vault path: secret/mts1b/prediction_markets/polymarket/wallet_private_key.
⚠️ Polymarket on most U.S. jurisdictions is geo-blocked. Operators are responsible for compliance.
Manifold specifics
Charitable mana → USD conversion is restricted, but markets give clean probability signals. Useful for:
- Calibration testing against Kalshi/Polymarket
- Forecasting topics CFTC won't permit on Kalshi
- Building consensus
Limitless + PredictFun
Crypto-native, smaller TVL, sometimes have niche markets (e.g., basketball player prop probabilities). Same wallet-sig auth as Polymarket.
Build + test
pip install -e ".[dev]"
pytest -m unit
pytest -m live --venue=manifold # free venue for live testing
Roadmap
| Version | Items |
|---|---|
| 0.1 (Wave 3) | 5 venues, consensus, search, arb detection |
| 0.2 (Wave 3) | OMS integration (orders route through mts1b-oms) |
| 0.3 | Kalshi-CFTC compliance helpers |
| 1.0 (LTS) | Stable adapter interface |
See also
mts1b-sports— sister repo for sports bettingmts1b-treasury— fund managementmts1b-llm— narrative generation, market discovery