Polymarket Bot Tutorial · 32개 챕터 중 21번째
Polymarket binary Yes/No 시장 bot 전략: standard event contracts, hard-capped 1x leverage, portfolio breadth로 확장하는 방법, 흔한 실수(0.99 추격), 그리고 code skeleton.
이 챕터에서 다루는 내용
Binary(Yes/No) 시장은 Polymarket의 기반입니다. 대부분의 전략이 여기에서 실행됩니다. 이 챕터에서는 leverage cap, 신규 빌더를 흔히 걸려 넘어지게 만드는 0.99-price trap, 그리고 production bot이 수렴하는 breadth-not-size 패턴을 다룹니다.
- Binary market이 다루는 범위
- 1x leverage cap와 이를 우회해 확장하는 방법
- 흔한 실수: 0.99 가격 추격
- 효과적인 leverage로서의 portfolio breadth
- 시장별 risk vs portfolio risk
- Code: binary market 스캔 및 규모를 반영한 매수 실행
Binary market이 다루는 범위
Binary market은 Polymarket의 기반입니다: 두 outcome token을 가진 단일 yes/no 질문입니다. "Will Trump win the 2024 election?"은 binary이고, 5명의 후보가 있는 "Who will win the 2024 election?"은 NegRisk입니다(11장).
binary market의 두 outcome token(YES와 NO)은 작은 spread tax를 제외하면 합이 1.0이 됩니다. 어느 쪽이든 살 수 있으며, 양쪽 모두 자체 order book을 갖습니다. pricing은 대칭적입니다. YES를 0.40에 사는 것은 expected payoff 관점에서 NO를 0.60에 파는 것과 같습니다.
Polymarket의 tournament가 아닌 대부분의 시장은 binary입니다: 날씨 질문, 단일 이벤트 정치 결과, 개별 스포츠 경기, 단일 price-target crypto 질문 등이 그렇습니다. bot 패턴은 이들 대부분에서 유사합니다.
1x leverage cap와 이를 우회해 확장하는 방법
Polymarket binary는 1x leverage입니다. 0.40에 100 shares를 사기 위해 $40를 쓰면 최대 payout은 $100입니다. margin도 없고 liquidation도 없습니다. capital efficiency는 2-25x를 사용할 수 있는 perp futures(24장)보다 낮습니다.
1x cap 주변에서 확장한다는 것은 다음 중 하나를 의미합니다: (1) 시장 전반에 더 많은 capital을 배치하기-leverage보다 diversification, (2) resolving markets를 통해 capital을 순환시키기-각 resolution에서 capital이 풀려 다음 시장으로 이동, (3) sum-to-1 arb가 effective synthetic leverage를 만들어낼 수 있는 NegRisk market을 사용하기.
Binary 전략에 대한 올바른 관점은 low-leverage, high-breadth입니다. 50개 시장에 50개의 작은 position을 두는 것이 일반적인 성숙한 bot 프로필이지, 5개 시장에 5개의 큰 position을 두는 것이 아닙니다.
흔한 실수: 0.99 가격 추격
가장 흔한 binary-bot 실패는 거의 결론이 난 heavy favorite를 0.99에 사서, YES로 해결될 때 1c payout을 쉽게 얻을 것이라고 기대하는 것입니다.
수학적으로 보면: 0.99에서 99c를 지불해 1c를 얻습니다. 1%의 실패율(100개 시장 중 1개), 각 실패가 99c의 손실을 만든다면 99개의 성공적인 1c 승리를 모두 상쇄합니다. 극단으로 갈수록 risk-reward 비율은 매우 가혹합니다.
capacity도 문제입니다. 0.99 부근의 book은 얇아서, 의미 있는 규모로 주문을 넣으면 price가 0.995 이상으로 밀리며 이미 얇은 edge를 더 깎아먹습니다.
tail-yield arb profile을 위한 특정 전략이 없다면 가격이 > 0.92인 시장은 피하세요. 대부분의 binary bot은 0.85 위에서는 매수하면 안 됩니다.
효과적인 leverage로서의 portfolio breadth
개별 position에는 leverage를 걸 수 없지만, 여러 개의 비상관 bet을 동시에 보유함으로써 portfolio의 variance 특성을 활용해 사실상 leverage를 얻을 수는 있습니다.
각각 $20인 50개 position은 총 $1,000가 걸린 상태입니다. win rate가 55%이고 +3c/-4c economics라면, expected daily PnL은 (0.55 × 3 − 0.45 × 4) × 50 × $0.20 = $1.50 기대값이며, variance는 제한적입니다. 같은 expected return이지만, 단일 $1,000 position보다 drawdown은 훨씬 낮습니다.
제약: position은 진정으로 uncorrelated여야 합니다. 한 주말의 NFL favorite 50개는 독립적인 50개 bet이 아닙니다. 대체로 여러 경기에서 weather와 favorite 요인이 상관되어 움직이는 하나의 큰 bet에 가깝습니다. sport, event type, time horizon 전반으로 diversification하세요.
시장별 risk vs portfolio risk
두 가지 risk cap이 필요합니다.
- 시장별: edge와 무관하게 시장당 최대 $X. 단일 시장에서의 치명적 손실을 제한합니다. 일반적인 값: 시장당 $25-100.
- Portfolio: 언제든 배치 가능한 총 capital 최대치. 비상관의 나쁜 날들에 걸친 총 drawdown을 제한합니다. 일반적인 값: wallet balance의 50-70%.
시장별 cap이 더 중요합니다. 하나의 bug나 edge 소멸 이벤트의 blast radius를 제한하기 때문입니다. Portfolio cap은 sanity check입니다. 50개 이상의 position이 있으면, 설령 이것이 없어도 대수의 법칙이 보통 당신을 bounds 안에 유지시켜 줍니다.
두 cap 모두 머릿속이 아니라 code에 의해 강제되어야 합니다. cap enforcement가 없는 bot은 결국 capital의 90%를 단일 시장에 배치하는 설정을 찾아내고, 그걸 잃게 됩니다.
Code: binary market 스캔 및 규모를 반영한 매수
Reference: 상위 거래량 binary market을 스캔하고, 유효한 setup을 필터링하며, 규모를 반영한 FOK 매수를 실행합니다.
def scan_and_buy():
events = gamma_top_events(limit=50, active=True, closed=False)
for ev in events:
for m in ev.get("markets", []):
if m.get("negRisk"): continue # binaries only
outs = json.loads(m["outcomes"])
prices = [float(p) for p in json.loads(m["outcomePrices"])]
for i, out_name in enumerate(outs):
if not setup_qualifies(m, i, prices[i]): continue
tok = json.loads(m["clobTokenIds"])[i]
size = compute_size(m, prices[i])
if size < 5: continue
place_fok(tok, "BUY", prices[i] + 0.02, size, neg_risk=False)
def setup_qualifies(m, idx, price):
return 0.10 <= price <= 0.85 # avoid extremes
setup_qualifies 함수가 바로 당신의 strategy가 들어가는 곳입니다. wrapper는 단지 plumbing일 뿐입니다.





