Dr. Manhattan – Handel mit Vorhersagemärkten
Dr. Manhattan ist eine einheitliche API für Vorhersagemärkte, ähnlich wie CCXT für Kryptowährungsbörsen. Es unterstützt Polymarket, Kalshi, Opinion, Limitless und Predict.fun über eine einzige Schnittstelle.
Einrichtung
Abhängigkeiten mit uv installieren:
uv venv && uv pip install -e .
Für den MCP-Server (Claude-Integration):
uv sync --extra mcp
Unterstützte Börsen
| Börse | Chain/Typ | Authentifizierung |
|---|---|---|
| Polymarket | Polygon | Privater Schlüssel + Funder-Adresse |
| Kalshi | Regulierte CEX | API-Schlüssel + RSA-Privatschlüssel |
| Opinion | BNB Chain | API-Schlüssel + privater Schlüssel + Multi-Sig-Adresse |
| Limitless | Base | Privater Schlüssel |
| Predict.fun | BNB Chain | API-Schlüssel + privater Schlüssel (EOA oder Smart-Wallet) |
Verwendung als Python-Bibliothek
Nur Lesezugriff (ohne Anmeldedaten)
import dr_manhattan
polymarket = dr_manhattan.Polymarket({'timeout': 30})
markets = polymarket.fetch_markets()
for market in markets:
print(f"{market.question}: {market.prices}")
Mit Authentifizierung
import dr_manhattan
polymarket = dr_manhattan.Polymarket({
'private_key': '0x...',
'funder': '0x...',
})
order = polymarket.create_order(
markt_id="markt_123",
ergebnis="Ja",
seite=dr_manhattan.OrderSide.KAUFEN,
preis=0.65,
größe=100,
params={'token_id': 'token_id'}
)
Börsenfabrik
from dr_manhattan import create_exchange, list_exchanges
print(list_exchanges()) # ['polymarket', 'opinion', 'limitless', 'predictfun', 'kalshi']
exchange = create_exchange('polymarket', {'timeout': 30})
Verwendung über den MCP-Server
Dr. Manhattan stellt alle Handelsfunktionen als MCP-Tools bereit. Konfiguration in Claude Code (~/.claude/settings.json oder .mcp.json):
{
"mcpServers": {
"dr-manhattan": {
"command": "/pfad/zu/dr-manhattan/.venv/bin/python",
"args": ["-m", "dr_manhattan.mcp.server"],
"cwd": "/pfad/zu/dr-manhattan"
}
}
}
Referenz der MCP-Tools
Börsen-Tools:
list_exchanges– Alle verfügbaren Vorhersagemarkt-Börsen auflisten.get_exchange_info(exchange)– Metadaten und Fähigkeiten einer Börse abrufen.validate_credentials(exchange)– Prüfen, ob Anmeldedaten gültig sind, ohne zu handeln.
Markterkundung:
search_markets(exchange, query)– Märkte nach Stichwort durchsuchen. Dies ist der schnellste Weg, um Märkte zu einem Thema zu finden.fetch_markets(exchange, limit?, offset?)– Alle Märkte mit Paginierung abrufen.fetch_market(exchange, market_id)– Einen bestimmten Markt anhand seiner ID abrufen.fetch_markets_by_slug(exchange, slug)– Märkte anhand des Slugs oder der URL abrufen (Polymarket, Limitless).find_tradeable_market(exchange, binary?, limit?, min_liquidity?)– Einen geeigneten Markt zum Handeln finden.find_crypto_hourly_market(exchange, token_symbol?)– Stündliche Krypto-Preismärkte finden (Polymarket).fetch_token_ids(exchange, market_id)– Token-IDs für einen Markt abrufen.parse_market_identifier(identifier)– Slug aus einer Polymarket-URL extrahieren.get_tag_by_slug(slug)– Polymarket-Tag-Informationen abrufen.
Orderbuch:
get_orderbook(exchange, token_id)– Vollständiges Orderbuch (Gebote und Angebote) abrufen.get_best_bid_ask(exchange, token_id)– Beste Geld- und Briefkurse abrufen.
Handel:
create_order(exchange, market_id, outcome, side, price, size)– Eine Kauf- oder Verkaufsorder aufgeben. Der Preis liegt zwischen 0 und 1 (Wahrscheinlichkeit). Die Seite ist "buy" oder "sell".cancel_order(exchange, order_id, market_id?)– Eine bestimmte Order stornieren.cancel_all_orders(exchange, market_id?)– Alle offenen Orders stornieren.fetch_order(exchange, order_id, market_id?)– Details und Ausführungsstatus einer Order abrufen.fetch_open_orders(exchange, market_id?)– Alle offenen Orders auflisten.
Konto:
fetch_balance(exchange)– Kontostand abrufen (USDC).fetch_positions(exchange, market_id?)– Aktuelle Positionen mit Gewinn/Verlust abrufen.fetch_positions_for_market(exchange, market_id)– Positionen für einen bestimmten Markt abrufen.calculate_nav(exchange, market_id?)– Nettoinventarwert berechnen (Bargeld + Positionen).
Strategieverwaltung:
create_strategy_session(strategy_type, exchange, market_id, ...)– Eine Market-Making-Strategie im Hintergrund starten.get_strategy_status(session_id)– Echtzeit-Status einer Strategie abrufen (NAV, Positionen, Delta).get_strategy_metrics(session_id)– Leistungskennzahlen abrufen (Betriebszeit, Ausführungen).pause_strategy(session_id)– Eine laufende Strategie pausieren.resume_strategy(session_id)– Eine pausierte Strategie fortsetzen.stop_strategy(session_id, cleanup?)– Eine Strategie beenden und optional Orders stornieren.list_strategy_sessions– Alle aktiven Strategie-Sitzungen auflisten.
Häufige Arbeitsabläufe
Einen Markt finden und analysieren
- Verwenden Sie
search_marketsmit einem Stichwort, um relevante Märkte zu finden. - Wählen Sie einen Markt aus den Ergebnissen aus und notieren Sie sich seine
idundmetadata.clobTokenIds. - Verwenden Sie
get_orderbookmit einer Token-ID, um aktuelle Geld- und Briefkurse zu sehen. - Verwenden Sie
get_best_bid_askfür eine schnelle Spread-Überprüfung.
Einen Trade platzieren
- Finden Sie den Markt mit
search_marketsoderfetch_markets_by_slug. - Prüfen Sie mit
fetch_balancedie verfügbaren Mittel. - Rufen Sie mit
get_orderbookdas Orderbuch ab, um die aktuellen Kurse zu sehen. - Verwenden Sie
create_ordermit der Markt-ID, dem Ergebnis („Yes“ oder „No“), der Seite („buy“ oder „sell“), dem Preis (0–1) und der Größe. - Überwachen Sie die Order mit
fetch_orderoderfetch_open_orders.
Eine Market-Making-Strategie ausführen
- Finden Sie einen Markt mit
search_marketsoderfind_tradeable_market. - Starten Sie mit
create_strategy_session(strategy_type="market_making", exchange, market_id). - Überwachen Sie mit
get_strategy_statusundget_strategy_metrics. - Steuern Sie mit
pause_strategy,resume_strategyoderstop_strategy.
Portfolio prüfen
fetch_balancefür das Bargeld.fetch_positionsfür alle offenen Positionen mit nicht realisiertem Gewinn/Verlust.calculate_navfür den gesamten Portfoliowert (Bargeld + Positionen).
Schlüsselkonzepte
- Preise sind Wahrscheinlichkeiten im Bereich von 0 bis 1 (exklusive). Ein Preis von 0,65 bedeutet, dass der Markt eine Wahrscheinlichkeit von 65 % impliziert.
- Ergebnisse sind bei binären Märkten typischerweise „Yes“ und „No“. Ihre Preise summieren sich auf etwa 1.
- Token-IDs sind börsenspezifische Kennungen für jedes Ergebnis eines Marktes. Sie werden für Orderbuchabfragen benötigt.
- Slugs sind für Menschen lesbare URL-Kennungen (z. B. „trump-2024“), die von Polymarket und Limitless verwendet werden.
- Unterstützte Ordertypen: GTC (Good-Til-Cancel), FOK (Fill-Or-Kill), IOC (Immediate-Or-Cancel).
Beispiele ausführen
uv run python examples/list_all_markets.py polymarket
uv run python examples/spread_strategy.py --exchange polymarket --slug fed-decision
uv run python examples/spike_strategy.py -e opinion -m 813 --spike-threshold 0.02
Datenmodelle
Markt-Felder: id, question, outcomes, prices, volume, liquidity, close_time, tick_size, description, metadata (enthält slug, clobTokenIds).
Order-Felder: id, market_id, outcome, side (KAUFEN/VERKAUFEN), price, size, filled, status (AUSSTEHEND/OFFEN/AUSGEFÜHRT/STORNIERT), time_in_force.
Position-Felder: market_id, outcome, size, average_price, current_price. Eigenschaften: cost_basis, current_value, unrealized_pnl.
Orderbuch-Felder: bids (Preis, Größe absteigend), asks (Preis, Größe aufsteigend). Eigenschaften: best_bid, best_ask, mid_price, spread.