Polymarket Bot Tutorial · 32개 중 23장

Polymarket 5분 BTC/ETH up-down market bot 패턴: 하루 288번의 expiration, latency가 중요한 실행, edge source, 대부분의 retail bot이 왜 지는지, 그리고 전략용 code skeleton.

이 장에서 다루는 내용

Polymarket의 5분 BTC up/down series는 하루에 288번 resolve되므로, 작은 edge도 여러 번 반복되면 누적 효과가 커집니다. 하지만 latency와 edge 기준이 professional firm 수준이라 대부분의 retail bot은 여기서 손해를 봅니다. 이 장은 그중에서도 살아남는 것들만 다룹니다.

  • 5-min crypto market이 무엇인지
  • 하루 288번의 expiration = 누적 반복
  • 왜 retail bot이 여기서 지는지
  • 살아남는 edge source
  • Latency budget
  • Risk: 거래당 작게, 하루 전체는 크게
  • Code: 5-min strategy skeleton

5-min crypto market이란

Polymarket의 5분 crypto market은 BTC(그리고 ETH) 가격에 대한 binary up/down 질문입니다. 새 market은 5분마다 열리며, 각 market은 open 후 5분 시점의 closing price를 기준으로 published oracle에서 가져온 값으로 resolve됩니다.

이로 인해 자산당 하루 288개의 market이 생깁니다. 어떤 edge든 누적 기회가 매우 큽니다. 거래당 edge가 작더라도 하루에 100회 이상 활용할 수 있으면 의미 있는 수준이 됩니다.

반대로, 기준선은 professional firm이 정합니다. mid는 underlying price feed와 매우 촘촘하게 움직이며, book은 보통 반대 방향 leg에서 얇습니다.

하루 288번의 expiration = 누적 반복

만약 거래당 edge가 0.5c이고 win rate가 55%이며 하루 60번 거래할 수 있다면, 기대 일일 PnL은 60 × 0.5c = 10-share position 기준 $0.30, 즉 하루 $3입니다. 작아 보이지만 누적되면 의미가 있습니다. 252 trading day × $3 = 연 $750이며, 거의 0에 가까운 capital exposure로 가능한 수익입니다(포지션은 5분 내에 resolve됩니다).

같은 edge가 분기마다 한 번만 resolve되는 binary에서 연 $750를 만들려면, 훨씬 더 큰 거래 규모와 더 넓은 손실 tail이 필요합니다.

5-min market은 Polymarket에서 작지만 빈번한 edge가 연간 의미 있는 수익으로 이어질 수 있는 거의 유일한 영역입니다.

왜 retail bot이 여기서 지는가

retail 진입자를 꾸준히 무너뜨리는 세 가지 failure mode가 있습니다.

  • Latency: professional firm은 50-100ms 안에 주문을 넣지만, retail bot은 1-3초가 걸립니다. 실행할 때쯤이면 price는 이미 새로운 mid에 도달해 있습니다.
  • Information asymmetry: underlying CEX(Binance, Coinbase)는 Polymarket의 price feed보다 trade tape를 더 빨리 찍습니다. 직접 CEX subscription이 없는 bot은 stale data로 거래하고 있는 셈입니다.
  • Spread tax: 5분 cadence에서는 0.5c spread × 60 trades = 피할 수 없는 비용이 하루 30c입니다. 수익을 내려면 먼저 이 비용을 넘어야 합니다.

retail bot이 손익분기점에 머물거나 손해를 보는 이유는 보통 pros보다 빠를 수 없고, spread tax도 피할 수 없기 때문입니다. retail에 맞는 전략은 pros보다 더 빠른 전략이 아니라, 특정 정보 우위를 가진 느린 의사결정 전략입니다.

살아남는 edge source

5-min market에서 retail이 활용할 수 있는 것들입니다.

  • Funding-rate-driven directional bias: perp futures의 극단적인 positive funding은 mean reversion을 예고하므로 funding rate에 반대 방향으로 거래합니다.
  • Open-interest-clearing windows: 매시 정각에는 perp futures liquidation 가능성이 높아집니다. 그 구간의 극단적 움직임을 fade합니다.
  • Late-window resolution arbitrage: 5분 window의 마지막 30초에는 resolution price를 점점 더 알 수 있게 됩니다. 그런데 book은 live tape와 맞지 않는 확률에 얇은 liquidity를 내놓는 경우가 많습니다.

작동하지 않는 것: 순수 technical signal(RSI, moving averages), 단순 momentum copy, bot이 pros보다 빨라야만 하는 모든 전략.

Latency budget

실행 가능한 5-min strategy의 budget은 대략 다음과 같습니다.

  • Read signal source (CEX trade tape, funding rate): 100-300ms
  • Compute decision: 50ms
  • Place FOK order: 200-500ms
  • Receive fill confirmation: 200ms

총합: 550-1050ms. paid RPC와 direct CEX WebSocket subscription이 있는 VPS에서는 가능합니다. 집에서 쓰는 laptop이나 free-tier API로는 어렵습니다.

총 500ms 미만이 필요한 전략은 professional 영역입니다. retail은 거기에 경쟁해서는 안 됩니다.

Risk: 거래당 작게, 하루 전체는 크게

5-min market sizing: 거래당 작게, 일일 한도는 제한합니다.

  • Per-trade: market당 5-15 shares($1-6). 5 미만이면 GTC sell이 사실상 어렵고, 15를 넘으면 entry에서 book을 밀게 됩니다.
  • Daily total: 50-100 trades. 그 이상은 하나의 oracle quirk에 대한 상관 exposure를 키웁니다.
  • Daily PnL kill switch: 누적 PnL이 $10 이상 하락했거나(또는 배정 자본의 5%) 즉시 중단합니다. 5-min market의 나쁜 날은 보통 strategy assumption이 깨졌다는 뜻입니다. 하루를 버티고, debug하고, redeploy하세요.

거래당 규모와 일일 횟수 사이의 비대칭은 의도된 것입니다. 깊이보다 breadth로 승부하는 구조입니다.

Code: 5-min strategy skeleton

Reference: funding-rate-driven 5-min bot의 trading loop입니다.

def five_min_loop():
    while True:
        wait_for_next_window_open()  # blocks until xx:x0:00 or xx:x5:00
        markets = find_open_5min_markets("btc")
        if not markets: continue

        funding = fetch_perp_funding_rate("BTCUSDT")
        bias = "DOWN" if funding > 0.001 else "UP" if funding < -0.001 else None
        if bias is None: continue

        market = markets[0]
        token = market["clobTokenIds"][0 if bias == "UP" else 1]
        book = fetch_book(token)
        if not book.best_ask or book.best_ask > 0.55: continue

        place_fok(token, "BUY", book.best_ask + 0.01, 10)

production 버전에서 추가할 것들: 5분 window 전반에 걸쳐 position을 추적해 정확한 exit timing을 잡기, live 전 30개 window 동안 paper-trade 하기, 연속 손실 시 중단하기.

자주 묻는 질문

Polymarket 5-minute crypto market이란 무엇인가요?
BTC, ETH, SOL이 5분 후 더 높아질지 낮아질지를 매 5분마다 resolve하는 binary market입니다. pair당 하루 약 288번의 expiration이 있습니다. 많은 small bet을 감수하는 빠른 trader를 위해 설계되었습니다.
5-minute crypto market은 retail bot에게 수익성이 있나요?
어렵습니다. spread는 좁고, 더 빠른 bot이 지배하며, bet당 edge도 작습니다. 수학적으로는 bet당 기대 edge 0.5% × 하루 288 bets = gross 기준 144%처럼 보이지만, variance가 매우 크고 slippage가 대부분을 갉아먹습니다. 우리가 본 대부분의 retail bot은 여기서 돈을 잃습니다.
5-minute crypto market에서 살아남는 edge는 무엇인가요?
orderbook이 사용하는 것보다 더 빠른 price feed입니다(예: Binance order book imbalance가 Polymarket spot보다 먼저 움직임). Polymarket 5-min과 crypto perp funding rates 사이의 statistical arb도 가능합니다. 순수 pattern-matching은 이미 arbitrage로 사라졌습니다.
Latency 요구사항은 어떻게 되나요?
독립형 strategy라면 read-to-trade 기준 200ms 미만이 필요합니다. 최상의 fill을 노린다면 50ms 미만이 필요합니다. 이 strategy는 low-jitter network가 있는 colocated VPS(NY4)에서 돌리는 것이 가장 좋습니다. retail에서조차 trading-tuned host가 제값을 하는 드문 사례 중 하나입니다.
5-minute crypto bot을 돌리려면 자본이 얼마나 필요한가요?
0부터 시작해 1000개 이상의 closed position을 paper-trade 하며 variance를 이해하세요. live에서는 $500-1000 bankroll, 거래당 $1-3로 시작하고, 30일 live 결과가 paper와 맞을 때만 규모를 키우세요. bankroll이 $500 미만으로 내려가면 거래당 규모가 너무 작아 fee가 수익을 잠식합니다.
여러 개의 5-minute strategy를 동시에 돌릴 수 있나요?
가능하지만, 권장하지는 않습니다. 3개 pair(BTC, ETH, SOL) 전체가 매우 강하게 상관되어 있어 동시에 보유한 position은 진정한 diversification이 아닙니다. 한 pair를 먼저 마스터한 뒤, 그다음에 두 번째 pair를 추가하는 식이 좋습니다.