polyclaw은(는) 무엇을 하나요?
OpenClaw를 위한 거래 가능한 Polymarket 스킬입니다. 시장을 탐색하고, 지갑을 관리하며, 거래를 실행하고, 포지션을 추적합니다.
기능
- 시장 탐색 - Polymarket 예측 시장 검색 및 탐색
- 지갑 관리 - 환경 변수 기반 지갑 설정
- 거래 - 스플릿 + CLOB 실행을 통한 YES/NO 포지션 매수
- 포지션 추적 - 진입 가격, 현재 가격 및 손익(P&L) 추적
- 헤지 발견 - 논리적 함의를 통한 LLM 기반 커버링 포트폴리오 발견
빠른 시작
먼저, 의존성을 설치합니다 (스킬 디렉토리에서):
cd {baseDir}
uv sync
첫 번째 설정 (거래 필수)
첫 거래 전에 Polymarket 계약 승인을 설정합니다 (일회성, 가스비 약 0.01 POL 소요):
uv run python scripts/polyclaw.py wallet approve
이 명령은 Polygon에 6개의 승인 트랜잭션을 제출합니다. 지갑당 한 번만 수행하면 됩니다.
시장 탐색
# 거래량 기준 트렌딩 시장
uv run python scripts/polyclaw.py markets trending
# 시장 검색
uv run python scripts/polyclaw.py markets search "election"
# 시장 세부 정보 (모든 필드가 포함된 전체 JSON 반환)
uv run python scripts/polyclaw.py market <market_id>
출력 옵션:
- 기본 출력은 서식이 지정된 테이블입니다 (표시에 적합)
- 전체 질문 텍스트를 자르지 않고 보려면
--full플래그 사용 - 구조화된 JSON 출력을 위해
scripts/markets.py --json trending을 통해--json플래그 사용
지갑 관리
# 지갑 상태 확인 (주소, 잔액)
uv run python scripts/polyclaw.py wallet status
# 계약 승인 설정 (일회성)
uv run python scripts/polyclaw.py wallet approve
지갑은 POLYCLAW_PRIVATE_KEY 환경 변수를 통해 구성됩니다.
거래
# $50에 YES 포지션 매수
uv run python scripts/polyclaw.py buy <market_id> YES 50
# $25에 NO 포지션 매수
uv run python scripts/polyclaw.py buy <market_id> NO 25
포지션
# 모든 포지션 및 손익(P&L) 목록
uv run python scripts/polyclaw.py positions
헤지 발견
커버링 포트폴리오 찾기 - 대우 논리를 통해 서로를 헤지하는 시장 포지션 쌍입니다.
# 트렌딩 시장에서 헤지 스캔
uv run python scripts/polyclaw.py hedge scan
# 쿼리와 일치하는 시장 스캔
uv run python scripts/polyclaw.py hedge scan --query "election"
# 특정 시장의 헤지 관계 분석
uv run python scripts/polyclaw.py hedge analyze <market_id_1> <market_id_2>
출력 옵션:
- 기본 출력은 계층(Tier), 적용 범위(Coverage), 비용(Cost), 대상(Target), 커버(Cover)를 보여주는 서식이 지정된 테이블입니다
- 구조화된 JSON 출력을 위해
--json플래그 사용 - 최소 적용 범위를 필터링하려면
--min-coverage 0.90사용 (기본값 0.85) - 계층별로 필터링하려면
--tier 1사용 (1=최고, 기본값 2)
적용 범위 계층:
- 계층 1 (높음): >=95% 적용 범위 - 거의 차익거래 기회
- 계층 2 (좋음): 90-95% - 강력한 헤지
- 계층 3 (보통): 85-90% - 적당하지만 눈에 띄는 위험
- 계층 4 (낮음): <85% - 투기적 (기본적으로 필터링됨)
LLM 모델: OpenRouter를 통해 nvidia/nemotron-nano-9b-v2:free를 사용합니다. 모델 선택이 중요합니다. 일부 모델은 가짜 상관 관계를 찾는 반면, 다른 모델(DeepSeek R1 등)은 출력 형식 문제가 있습니다. 필요한 경우 --model <model_id>로 재정의합니다.
보안
MVP의 경우, 단순성과 Claude Code 호환성을 위해 개인 키가 환경 변수에 저장됩니다.
보안 경고: 이 지갑에는 소액만 유지하세요. 정기적으로 안전한 지갑으로 인출하세요.
환경 변수
| 변수 | 필수 | 설명 |
|---|---|---|
CHAINSTACK_NODE | 예 (거래) | Polygon RPC URL |
OPENROUTER_API_KEY | 예 (헤지) | LLM 헤지 발견을 위한 OpenRouter API 키 |
POLYCLAW_PRIVATE_KEY | 예 (거래) | EVM 개인 키 (16진수, 0x 접두사 포함 또는 미포함) |
HTTPS_PROXY | 권장 | CLOB용 로테이팅 리지덴셜 프록시 (예: IPRoyal) |
CLOB_MAX_RETRIES | 아니요 | IP 로테이션을 사용한 최대 CLOB 재시도 횟수 (기본값: 5) |
POLY_BUILDER_CODE | 아니요 | 기여도를 위한 Bytes32 빌더 코드 (polymarket.com/settings?tab=builder에서 가져옴). 설정 시 모든 주문에 첨부됩니다. |
보안 경고: 이 지갑에는 소액만 유지하세요. 정기적으로 안전한 지갑으로 인출하세요. 환경 변수의 개인 키는 자동화에 편리하지만 암호화된 저장소보다 덜 안전합니다.
거래 흐름
- 포지션 스플릿 - pUSD가 CTF 계약을 통해 YES + NO 토큰으로 분할됩니다
- 원치 않는 쪽 매도 - 원치 않는 쪽이 CLOB 주문장(V2)을 통해 매도됩니다
- 결과 - 원하는 포지션을 보유하고, 원치 않는 쪽을 매도하여 일부 비용을 회수합니다
예: $0.70에 YES 매수
- $100 pUSD 분할 → 100 YES + 100 NO 토큰
- 100 NO 토큰을 ~$0.30에 매도 → ~$27 pUSD 회수
- 순 비용: 100 YES 토큰에 ~$73 (진입: $0.73)
USDC.e만 있는 경우, 거래 전에 Collateral Onramp의 wrap() 함수를 통해 1:1로 pUSD로 래핑하십시오.
Polymarket 계약 (Polygon 메인넷, CLOB V2)
- pUSD (담보):
0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB - USDC.e (Onramp 입력):
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 - Collateral Onramp:
0x93070a847efEf7F70739046A929D47a521F5B8ee - CTF (조건부 토큰):
0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 - CTF Exchange (V2):
0xE111180000d2663C0091e4f400237545B87B996B - Neg Risk CTF Exchange (V2):
0xe2222d279d744050d28e00520010520000310F59
의존성
uv로 설치합니다 (스킬 디렉토리에서):
cd {baseDir}
uv sync
제한 사항
- 거래에는 지갑 승인 설정이 필요합니다 (일회성)
- 유동성이 충분하지 않으면 CLOB 매도가 실패할 수 있습니다
CLOB Cloudflare 차단
Polymarket의 CLOB API는 데이터 센터 IP 및 일부 리지덴셜 ISP를 포함한 많은 IP의 POST 요청을 차단하는 Cloudflare 보호를 사용합니다. 이는 '원치 않는 토큰 매도' 단계에 영향을 미칩니다.
해결책: 리지덴셜 프록시 및 재시도 로직
권장 설정은 로테이팅 리지덴셜 프록시(예: IPRoyal, BrightData)를 사용하는 것입니다. CLOB 클라이언트는 IP가 작동할 때까지 새 IP로 자동 재시도합니다:
export HTTPS_PROXY="http://user:[email protected]:12321"
export CLOB_MAX_RETRIES=10 # 기본값은 5
이 설정을 사용하면 프록시가 차단되지 않은 IP를 찾을 때까지 IP를 로테이션하므로 CLOB 주문은 일반적으로 5-10회 재시도 내에 성공합니다.
대체 해결 방법:
--skip-sell사용 — YES 및 NO 토큰을 모두 보유하고 polymarket.com에서 수동으로 매도- 프록시 없음 — 스플릿은 여전히 작동합니다. CLOB 매도만 영향을 받습니다.
모든 재시도 후에도 CLOB가 실패하면 스플릿은 여전히 성공한 것입니다. 출력에서 수동으로 매도할 토큰 수를 알려줍니다.
문제 해결
"사용 가능한 지갑이 없습니다"
POLYCLAW_PRIVATE_KEY 환경 변수를 설정하세요:
export POLYCLAW_PRIVATE_KEY="0x..."
"pUSD 잔액 부족"
uv run python scripts/polyclaw.py wallet status로 잔액을 확인하세요. 거래에는 pUSD(Polymarket USD)가 필요합니다. USDC.e가 있는 경우 Collateral Onramp(0x9307...B8ee)를 통해 1:1로 래핑하세요. polymarket.com UI는 자동으로 이 작업을 수행합니다. API 사용자는 수동으로 래핑합니다.
"CLOB 주문 실패"
CLOB 매도는 다음으로 인해 실패할 수 있습니다:
- 매도 가격에 유동성 부족
- Cloudflare가 IP 차단 (프록시 사용 시도)
스플릿은 여전히 성공했습니다. 토큰을 보유하고 있지만, 원치 않는 쪽을 매도하지 못한 것입니다.
"승인이 설정되지 않았습니다"
첫 거래에는 계약 승인이 필요합니다. 다음을 실행하세요:
uv run python scripts/polyclaw.py wallet approve
라이선스
Apache 2.0