Skip to main content

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:

VenueTypeRegulationAuth
kalshiCFTC-regulated DCMfullAPI key
polymarketcrypto-based (UMA oracle)offshorewallet + sig
manifoldplay-money + real moneynone (charitable)API key
limitlessonchain, conditional tokensoffshorewallet + sig
predictfuncryptooffshorewallet + 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

VersionItems
0.1 (Wave 3)5 venues, consensus, search, arb detection
0.2 (Wave 3)OMS integration (orders route through mts1b-oms)
0.3Kalshi-CFTC compliance helpers
1.0 (LTS)Stable adapter interface

See also