Dr. Manhattan - 予測市場取引
Dr. Manhattanは、暗号通貨取引所向けCCXTと同様の方法で予測市場を操作する統一APIです。Polymarket、Kalshi、Opinion、Limitless、Predict.funを単一のインターフェースでサポートします。
セットアップ
uvで依存関係をインストールします:
uv venv && uv pip install -e .
MCPサーバー(Claude連携)の場合:
uv sync --extra mcp
対応取引所
| 取引所 | チェーン/タイプ | 認証 |
|---|---|---|
| Polymarket | Polygon | 秘密鍵 + ファンダーアドレス |
| Kalshi | 規制対象CEX | APIキー + RSA秘密鍵 |
| Opinion | BNB Chain | APIキー + 秘密鍵 + マルチシグアドレス |
| Limitless | Base | 秘密鍵 |
| Predict.fun | BNB Chain | APIキー + 秘密鍵(EOAまたはスマートウォレット) |
Pythonライブラリとしての使用
読み取り専用(認証不要)
import dr_manhattan
polymarket = dr_manhattan.Polymarket({'timeout': 30})
markets = polymarket.fetch_markets()
for market in markets:
print(f"{market.question}: {market.prices}")
認証あり
import dr_manhattan
polymarket = dr_manhattan.Polymarket({
'private_key': '0x...',
'funder': '0x...',
})
order = polymarket.create_order(
market_id="market_123",
outcome="Yes",
side=dr_manhattan.OrderSide.BUY,
price=0.65,
size=100,
params={'token_id': 'token_id'}
)
取引所ファクトリ
from dr_manhattan import create_exchange, list_exchanges
print(list_exchanges()) # ['polymarket', 'opinion', 'limitless', 'predictfun', 'kalshi']
exchange = create_exchange('polymarket', {'timeout': 30})
MCPサーバー経由の使用
Dr. Manhattanはすべての取引機能をMCPツールとして公開します。Claude Code(~/.claude/settings.jsonまたは.mcp.json)で設定:
{
"mcpServers": {
"dr-manhattan": {
"command": "/path/to/dr-manhattan/.venv/bin/python",
"args": ["-m", "dr_manhattan.mcp.server"],
"cwd": "/path/to/dr-manhattan"
}
}
}
MCPツールリファレンス
取引所ツール:
list_exchanges- 利用可能な予測市場取引所をすべて一覧表示します。get_exchange_info(exchange)- 取引所のメタデータと機能を取得します。validate_credentials(exchange)- 取引を行わずに認証情報が有効か確認します。
市場発見:
search_markets(exchange, query)- キーワードで市場を検索します。特定のトピックに関する市場を最速で見つける方法です。fetch_markets(exchange, limit?, offset?)- ページネーションで全市場を取得します。fetch_market(exchange, market_id)- IDで特定の市場を取得します。fetch_markets_by_slug(exchange, slug)- スラッグまたはURLで市場を取得します(Polymarket、Limitless)。find_tradeable_market(exchange, binary?, limit?, min_liquidity?)- 取引に適した市場を検索します。find_crypto_hourly_market(exchange, token_symbol?)- 暗号通貨の時間ごとの価格市場を検索します(Polymarket)。fetch_token_ids(exchange, market_id)- 市場のトークンIDを取得します。parse_market_identifier(identifier)- PolymarketのURLからスラッグを抽出します。get_tag_by_slug(slug)- Polymarketのタグ情報を取得します。
オーダーブック:
get_orderbook(exchange, token_id)- 完全なオーダーブック(bidとask)を取得します。get_best_bid_ask(exchange, token_id)- 最良のbid価格とask価格を取得します。
取引:
create_order(exchange, market_id, outcome, side, price, size)- 買い注文または売り注文を出します。価格は0~1(確率)です。sideは"buy"または"sell"です。cancel_order(exchange, order_id, market_id?)- 特定の注文をキャンセルします。cancel_all_orders(exchange, market_id?)- すべてのオープン注文をキャンセルします。fetch_order(exchange, order_id, market_id?)- 注文の詳細と約定状況を取得します。fetch_open_orders(exchange, market_id?)- すべてのオープン注文を一覧表示します。
アカウント:
fetch_balance(exchange)- アカウント残高(USDC)を取得します。fetch_positions(exchange, market_id?)- 現在のポジションと損益を取得します。fetch_positions_for_market(exchange, market_id)- 特定の市場のポジションを取得します。calculate_nav(exchange, market_id?)- 純資産価値(現金+ポジション)を計算します。
戦略管理:
create_strategy_session(strategy_type, exchange, market_id, ...)- バックグラウンドでマーケットメイキング戦略を開始します。get_strategy_status(session_id)- 戦略のリアルタイムステータス(NAV、ポジション、デルタ)を取得します。get_strategy_metrics(session_id)- パフォーマンスメトリクス(稼働時間、約定数)を取得します。pause_strategy(session_id)- 実行中の戦略を一時停止します。resume_strategy(session_id)- 一時停止した戦略を再開します。stop_strategy(session_id, cleanup?)- 戦略を停止し、オプションで注文をキャンセルします。list_strategy_sessions- アクティブな戦略セッションをすべて一覧表示します。
一般的なワークフロー
市場を見つけて分析する
search_marketsをキーワードで使用して関連市場を見つけます。- 結果から市場を選択し、その
idとmetadata.clobTokenIdsを確認します。 get_orderbookをトークンIDで使用して、現在のbidとaskを確認します。get_best_bid_askで素早くスプレッドを確認します。
注文を出す
search_marketsまたはfetch_markets_by_slugで市場を見つけます。fetch_balanceで利用可能な資金を確認します。get_orderbookで現在の価格を確認します。create_orderに市場ID、結果("Yes"または"No")、サイド("buy"または"sell")、価格(0~1)、サイズを指定して注文します。fetch_orderまたはfetch_open_ordersで監視します。
マーケットメイキング戦略を実行する
search_marketsやfind_tradeable_marketで市場を見つけます。create_strategy_session(strategy_type="market_making", exchange, market_id)で開始します。get_strategy_statusとget_strategy_metricsで監視します。pause_strategy、resume_strategy、stop_strategyで制御します。
ポートフォリオを確認する
fetch_balanceで現金残高を確認します。fetch_positionsですべてのオープンポジションと未実現損益を確認します。calculate_navでポートフォリオの合計価値(現金+ポジション)を計算します。
主要な概念
- 価格は確率であり、0から1の範囲(排他的)です。価格0.65は市場が65%の確率を示していることを意味します。
- 結果はバイナリ市場では通常"Yes"と"No"です。これらの価格の合計は約1になります。
- トークンIDは各市場の結果に対する取引所固有の識別子です。オーダーブックのクエリに必要です。
- スラッグは人間が読めるURL識別子(例:"trump-2024")で、PolymarketとLimitlessで使用されます。
- 対応注文タイプ: GTC(Good-Til-Cancel)、FOK(Fill-Or-Kill)、IOC(Immediate-Or-Cancel)。
サンプルの実行
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
データモデル
Marketフィールド: id、question、outcomes、prices、volume、liquidity、close_time、tick_size、description、metadata(slug、clobTokenIdsを含む)。
Orderフィールド: id、market_id、outcome、side(BUY/SELL)、price、size、filled、status(PENDING/OPEN/FILLED/CANCELLED)、time_in_force。
Positionフィールド: market_id、outcome、size、average_price、current_price。プロパティ: cost_basis、current_value、unrealized_pnl。
Orderbookフィールド: bids(価格、サイズ降順)、asks(価格、サイズ昇順)。プロパティ: best_bid、best_ask、mid_price、spread。