Polymarket Bot Tutorial · 32개 챕터 중 16장

Polymarket의 statistical arbitrage: cross-market pairs(상관된 이벤트), Polymarket-vs-Kalshi spreads, mean reversion, 그리고 market이 결국 resolve될 때 stat-arb position을 어떻게 size할지.

이 장에서 다루는 내용

Polymarket의 statistical arbitrage는 상관된 market 사이의 일시적인 mispricing을 활용합니다. 예를 들어 Polymarket과 Kalshi의 같은 event, 또는 Polymarket 내부의 관련 market들입니다. edge는 작고(보통 1-3 cents), 운영상 매우 취약합니다. 이 장에서는 무엇이 작동하고 무엇이 작동하지 않는지, 그리고 대부분의 시도를 무너뜨리는 multi-leg execution risk를 솔직하게 다룹니다.

Cross-market statistical arbitrage는 Polymarket과 Kalshi, Polymarket과 Manifold, 또는 Polymarket 내부의 상관된 market 사이의 일시적인 pricing inconsistency를 노립니다. edge는 작고(보통 1-3 cents) 양쪽 leg의 빠른 execution이 필요합니다. 이 장은 대부분의 시도를 무너뜨리는 operational complexity까지 포함한 솔직한 playbook입니다.

  • prediction market에서 stat-arb가 의미하는 것
  • Polymarket-vs-Kalshi spread 예시
  • Polymarket 내부의 pairs(correlated events)
  • Mean reversion vs trend continuation
  • resolve되는(not perpetual) market의 sizing
  • Risk: resolution 이후의 divergence
  • Code: pairs monitor와 threshold-trigger

prediction market에서 stat-arb가 의미하는 것

prediction market에서 statistical arbitrage는 일관되게 가격이 맞아야 하는 두 market 사이의 spread를 거래하는 것을 뜻합니다. Polymarket에서는 세 가지 형태가 흔합니다.

  • Cross-venue: Polymarket과 Kalshi(또는 Manifold, PredictIt)에서 같은 event. 가격은 수렴해야 하지만 실제로는 2-5 cents 정도 벌어지기도 합니다.
  • Same-event-pair: NegRisk multi-outcome market에서 parent와 legs의 합. sum-to-1 invariant를 이용해 legs의 합이 1.0보다 작을 때 arb할 수 있습니다.
  • Correlated-event-pair: 관련된 outcome에 대한 두 market(예: "Trump president on Jan 1" vs "Trump president on Mar 1"). 서로 2-3 cents 이내에서 가격이 맞아야 합니다.

edge는 작습니다. 운영 복잡성은 현실적입니다. 대부분의 시도는 이론이 아니라 execution에서 실패합니다.

Polymarket-vs-Kalshi spread 예시

2025-26년 관찰에 따르면, Polymarket과 Kalshi는 주요 미국 event를 같은 내용으로 상장하지만, 안정적으로 1-4 cents 정도 가격 차이가 납니다. 이 gap은 구조적인 이유 때문에 존재하며, 어떤 arb에서도 반드시 모델링해야 합니다.

구조적 요인:

  • Fee asymmetry: Kalshi는 winning trades에 대해 4-7% 수수료를 받습니다(market마다 다름). Polymarket은 taker fee가 0입니다. arb 계산에는 Kalshi의 비용이 반영되어야 합니다.
  • Settlement risk premium: market의 resolution이 애매할 때 한 venue의 UMA가 다른 venue의 judge와 다르게 resolve될 수 있습니다. market은 이를 가격에 반영합니다.
  • Trader population: Polymarket은 더 젊고 crypto-native한 경향이 있고, Kalshi는 professional / hedge 성향이 강합니다. 같은 event에 대해 체계적으로 의견이 갈립니다.

arb는 gap이 구조적 premium과 fee를 초과할 때 작동합니다. 구조적 premium이 1c이고 합산 fee가 1c인 market에서 5-cent gap은 실제로는 3c의 edge입니다.

Polymarket 내부의 pairs(correlated events)

Polymarket 내부에서는 correlated-event pair가 cross-venue보다 arb하기 쉽습니다. fee 구조가 같고, wallet도 같고, atomic execution도 가능합니다.

일관되게 price가 어긋나는 예:

  • Trump president on date A vs Trump president on date B(B가 A보다 90일 미만으로 늦음).
  • Bitcoin이 7월 31일까지 100k 달러에 도달할까 vs 8월 31일까지 100k 달러에 도달할까.
  • 같은 binary market의 Yes vs No leg(sum은 1.0이어야 하지만, 얇은 book에서는 1.04까지 벌어지기도 함).

Yes+No=1 arb가 가장 깔끔합니다. 같은 market에서 양쪽 leg를 읽고, 합계가 0.97 아래로 내려가면(스프레드 tax를 감안하여) 양쪽 모두 FOK로 실행합니다. 필요한 capital은 양쪽 leg에서 대체로 비슷하며, 두 fill이 같은 response로 돌아오면 execution은 atomic합니다.

Mean reversion vs trend continuation

stat-arb에는 두 가지 regime이 있습니다. Mean reversion: pair가 noise 때문에 벌어졌고, 다시 붙을 것에 betting하는 경우입니다. Trend continuation: pair가 새로운 정보 때문에 벌어지기 시작했고, 더 벌어질 것에 betting하는 경우입니다.

이 둘을 구분하는 것이 어렵습니다. 휴리스틱: divergence가 눈에 띄는 volume과 함께 발생했다면(whale이 한 leg의 book을 밀어버림), 그건 news입니다. model이 없다면 역추세(fade)하지 마세요. 천천히, 낮은 volume으로 drift했다면 noise입니다. 자신 있게 reversion을 trade하세요.

새로운 builder에게는 mean reversion만 trade하라고 권합니다. historical drift의 1 standard deviation보다 작은 divergence를 보이는 pair에서만 하세요. Trend continuation에는 news를 잡아내는 model이 필요합니다. 그게 없다면 informed flow에 반대로 betting하는 셈입니다.

resolve되는(not perpetual) market의 sizing

prediction market은 resolve됩니다. Crypto pair는 그렇지 않습니다. 이 점이 math를 바꿉니다.

Polymarket의 pair-arb position은 고정된 payout schedule을 가집니다. 두 market이 모두 resolve되면, 예측된 spread와 실제 spread의 차이가 확정됩니다. rolling도 없고, 무한 보유도 없습니다.

size에 대한 함의: capital이 resolve될 때까지 묶이므로, 보유할 수 있는 최대 규모는 time-to-resolution에 의해 제한됩니다. 6개월 뒤에 resolve되는 pair에서 share당 3c를 벌 수 있더라도, 두 market이 완전히 size되어 있으면 그 사이에 추가 capital을 더 투입할 수 없습니다.

올바른 framing은 이것입니다. Polymarket의 stat-arb는 연속적인 strategy가 아니라 bounded-time trade의 연속입니다. gross PnL이 아니라 locked capital 단위당 하루 PnL을 비교해야 합니다.

Risk: resolution 이후의 divergence

최악의 stat-arb 결과는, convergence를 예측한 당신의 예측이 underlying premise가 틀려서 실패하는 경우입니다. 예:

  • 당신은 "Trump president on Apr 1"이 "Trump president on Mar 1"로 수렴할 거라 보고 short했습니다. 그런데 March impeachment 때문에 date 1 market은 YES로 resolve되고 date 2는 NO로 resolve됩니다. "spread는 flat해야 한다"는 thesis가 틀린 것입니다.
  • 같은 NBA Finals winner에 대해 Polymarket과 Kalshi를 arb했습니다. Polymarket은 official series에서 이긴 팀으로 resolve되지만, Kalshi는 overtime tie-breakers를 다르게 포함하는 약간 다른 definition으로 resolve됩니다. 둘 다 stated terms에 따라 YES로 resolve되지만, 결과는 반대입니다.

각 market의 resolution criteria를 꼼꼼히 읽으세요. Cross-venue arb는 resolution mismatch 하나만 있어도 양쪽 leg에서 전부 손실이 날 수 있습니다.

Code: pairs monitor와 threshold-trigger

Reference: 두 개의 correlated token을 모니터링하고, spread가 threshold를 넘으면 arb를 실행합니다.

def pairs_monitor(token_a, token_b, threshold_cents=3, size=10):
    """Buy A and Sell B when (1 - ask_A) + bid_B > 1 + threshold."""
    while True:
        book_a = fetch_book(token_a)
        book_b = fetch_book(token_b)
        if not (book_a.best_ask and book_b.best_bid):
            time.sleep(2); continue
        # implied: cost of buying A at ask + value of selling B at bid
        edge = (1 - book_a.best_ask) + book_b.best_bid - 1
        if edge > threshold_cents / 100:
            print(f"ARB edge={edge:.3f}; firing")
            r_a = fok_buy(token_a, price=book_a.best_ask, size=size)
            if r_a.status != "matched": continue
            r_b = fok_sell(token_b, price=book_b.best_bid, size=size)
            if r_b.status != "matched":
                # leg A filled, B failed -- unhedged, exit A
                fok_sell(token_a, price=book_a.best_bid, size=size)
        time.sleep(3)

partial-fill에 대한 cleanup은 매우 중요합니다. 이것이 없으면 partial execution 때문에 bot이 방향성 노출 상태로 남게 되며, 이는 stat-arb의 본래 목적과 정반대입니다.

자주 묻는 질문

Polymarket과 Kalshi 사이에서 arbitrage할 수 있나요?
네, 같은 event가 양쪽에 거래될 때 가능합니다. 규제 차이, fee 구조, 사용자층 차이 때문에 두 exchange 사이에는 2-5 cents의 spread가 지속됩니다. 단, Kalshi는 US-only이고 KYC가 필요하므로 양쪽에 account가 있어야 합니다. 설정은 /guide/polymarket-vs-kalshi/를 확인하세요. spread arbitrage는 실제로 가능하지만 운영 부담이 큽니다.
Polymarket 문맥에서 pairs trade란 무엇인가요?
가격 비율이 mean-revert하는 두 개의 correlated market입니다. 예를 들어 "Trump wins 2028"과 "Republicans win 2028 House"가 있습니다. Trump trade가 5% 급등했는데 House trade가 움직이지 않았다면, bot은 비율이 되돌아올 것이라고 가정하고 House를 매수하고 Trump를 매도합니다(또는 그 반대). edge는 작지만 정치 market에서는 일관적일 수 있습니다.
두 market이 모두 resolve될 때 stat-arb position은 어떻게 size하나요?
가장 큰 예상 divergence에 맞춰 size하세요. 모델이 spread가 되돌아오기 전에 8 cents 더 벌어질 수 있다고 말한다면, 8 cents 더 벌어졌을 때 loss limit을 넘지 않도록 size해야 합니다. 각 pair를 hard loss limit이 있는 독립 trade로 취급하세요. stat-arb를 공짜 돈처럼 생각하는 순간 계좌가 터집니다.
Polymarket-Kalshi arb는 지속적인가요?
네, 하지만 더 많은 bot이 발견할수록 줄어들고 있습니다. 2026년에도 liquid politics market에서는 1-3 cent spread가 몇 시간 동안 지속되는 것을 여전히 볼 수 있습니다. sports market은 더 좁은 spread를 보입니다. tail market(low-volume)은 더 넓지만 거래하기에는 비경제적인 spread를 보입니다.
두 market이 resolution까지 divergence를 이어가면 어떻게 되나요?
pairs trade는 실제 outcome을 기준으로 최종 PnL에 도달합니다. 그래서 prediction market에서의 pairs trading은 본질적으로 bounded입니다(perpetual처럼 divergence가 무한히 커질 수 없음). pairs trade의 net loss는 진입 시 가격 차이로 상한이 정해지며, 무한 손실이 아닙니다.
Polymarket pairs를 찾는 데 어떤 도구가 도움이 되나요?
활성 market 전반의 correlation matrix가 출발점입니다. gamma+CLOB에서 가져온 30일 price history로 만드세요. 과거 rho > 0.7인 pair 중 현재 typical ratio 대비 mispriced된 것들을 찾으세요. correlation은 시간이 지나면 약해지므로 matrix는 매주 업데이트하세요.