Communitygithub.com

guzus/dr-manhattan

통합 CCXT 스타일 API로 예측 시장(Polymarket, Kalshi, Opinion, Limitless, Predict.fun)을 거래합니다. 사용자가 예측 시장을 탐색, 검색, 거래하거나 잔액 및 포지션 확인, 주문 관리, 시장 조성 전략 실행, 거래소 간 가격 비교를 원할 때 사용하세요.

dr-manhattan란 무엇인가요?

Dr. Manhattan은 CCXT가 암호화폐 거래소에서 하는 것처럼 예측 시장을 위한 통합 API를 제공하는 AI 에이전트 스킬입니다. Polymarket, Kalshi, Opinion, Limitless, Predict.fun 등 여러 예측 시장 플랫폼을 단일 인터페이스로 지원합니다. Python 라이브러리와 MCP 서버를 통해 Claude Code와 같은 AI 어시스턴트가 직접 시장 검색, 주문 생성 및 취소, 잔액 및 포지션 조회는 물론 백그라운드에서 마켓 메이킹 전략까지 실행할 수 있도록 합니다. 가격은 0~1 사이의 확률로 표현되며, GTC, FOK, IOC 등 다양한 주문 유형을 지원합니다. 이 스킬은 개발자와 트레이더가 복잡한 예측 시장을 간단한 API 호출로 통합 관리할 수 있게 해주며, 특히 AI 에이전트가 조건에 따라 자율적으로 거래 의사 결정을 내리는 데 최적화되어 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add guzus/dr-manhattan

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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

지원 거래소

거래소체인/유형인증
PolymarketPolygon개인 키 + 펀더 주소
Kalshi규제 CEXAPI 키 + RSA 개인 키
OpinionBNB 체인API 키 + 개인 키 + 다중 서명 주소
LimitlessBase개인 키
Predict.funBNB 체인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) - 전체 주문장(매수 및 매도)을 가져옵니다.
  • get_best_bid_ask(exchange, token_id) - 최우선 매수 및 매도 가격을 가져옵니다.

거래:

  • create_order(exchange, market_id, outcome, side, price, size) - 매수 또는 매도 주문을 제출합니다. 가격은 0-1(확률)입니다. 사이드는 "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 - 모든 활성 전략 세션을 나열합니다.

일반적인 워크플로우

시장 찾기 및 분석

  1. search_markets를 키워드와 함께 사용하여 관련 시장을 찾습니다.
  2. 결과에서 시장을 선택하고 id와 metadata.clobTokenIds를 확인합니다.
  3. get_orderbook을 토큰 ID와 함께 사용하여 현재 매수/매도 호가를 확인합니다.
  4. get_best_bid_ask로 빠른 스프레드 확인을 합니다.

거래 실행

  1. search_markets 또는 fetch_markets_by_slug로 시장을 찾습니다.
  2. fetch_balance로 사용 가능한 자금을 확인합니다.
  3. get_orderbook으로 주문장을 확인하여 현재 가격을 봅니다.
  4. create_order를 시장 ID, 결과("Yes" 또는 "No"), 사이드("buy" 또는 "sell"), 가격(0-1), 크기와 함께 사용합니다.
  5. fetch_order 또는 fetch_open_orders로 모니터링합니다.

마켓 메이킹 전략 실행

  1. search_markets 또는 find_tradeable_market으로 시장을 찾습니다.
  2. create_strategy_session(strategy_type="market_making", exchange, market_id)로 시작합니다.
  3. get_strategy_status와 get_strategy_metrics로 모니터링합니다.
  4. pause_strategy, resume_strategy, 또는 stop_strategy로 제어합니다.

포트폴리오 확인

  1. fetch_balance로 현금을 확인합니다.
  2. fetch_positions로 모든 미실현 손익이 포함된 미체결 포지션을 확인합니다.
  3. calculate_nav로 총 포트폴리오 가치(현금 + 포지션)를 계산합니다.

주요 개념

  • 가격은 확률입니다. 0에서 1 사이(제외)의 값을 가집니다. 0.65의 가격은 시장이 65%의 확률을 암시함을 의미합니다.
  • 결과는 일반적으로 이진 시장에서 "Yes"와 "No"입니다. 두 가격의 합은 약 1입니다.
  • 토큰 ID는 각 시장 결과에 대한 거래소별 식별자입니다. 주문장 조회에 필요합니다.
  • 슬러그는 사람이 읽을 수 있는 URL 식별자(예: "trump-2024")로, Polymarket과 Limitless에서 사용됩니다.
  • 지원 주문 유형: GTC(지정가 대기), FOK(전부 체결 또는 취소), IOC(즉시 체결 또는 취소).

예제 실행

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

데이터 모델

시장 필드: id, question, outcomes, prices, volume, liquidity, close_time, tick_size, description, metadata (slug, clobTokenIds 포함).

주문 필드: id, market_id, outcome, side (BUY/SELL), price, size, filled, status (PENDING/OPEN/FILLED/CANCELLED), time_in_force.

포지션 필드: market_id, outcome, size, average_price, current_price. 속성: cost_basis, current_value, unrealized_pnl.

주문장 필드: bids (가격, 크기 내림차순), asks (가격, 크기 오름차순). 속성: best_bid, best_ask, mid_price, spread.

관련 스킬