Polymarket Bot Tutorial · 32개 중 14장
Polymarket에서의 news arbitrage: headlines, source feeds(RSS/Twitter/AP), latency budgets, false-positive filters, 그리고 news edge가 시장 price로 사라지는 시점을 어떻게 공략하는가.
이 장에서 다루는 내용
News arbitrage는 시장이 public information을 재가격 반영하기 전에 더 빠르게 거래하는 전략입니다. edge는 실제로 존재하지만 매우 좁습니다. 사람이 읽을 수 있을 때쯤이면 대부분의 "news"는 이미 price에 반영되어 있습니다. 이 장에서는 실제로 시장을 앞서가는 source가 무엇인지, 전략을 규정하는 latency budget이 무엇인지, 그리고 false-positive filter가 왜 필요한지 다룹니다. 이 filter가 없으면 bot이 모든 retweet에 반응하게 됩니다.
- Information edge가 어떤 모습인지
- News sources: RSS, Twitter, AP, official feeds
- Latency budget: 2초 이내 read-to-trade
- False-positive filters
- News edge가 사라지는 시점
- Code: news feed를 poll하고 관련 market에 FOK 실행
- Risk: half-truths와 walked-back headlines
Information edge가 어떤 모습인지
News arbitrage는 market이 public information을 재가격 반영하기 전에 더 빠르게 거래하는 것을 의미합니다. edge는 보통 30~300초의 매우 좁은 window, 즉 fact가 public이 된 시점과 Polymarket이 이를 반영하는 시점 사이에 존재합니다.
이 edge가 진짜가 되려면 세 가지가 충족되어야 합니다. 첫째, news source가 평균적인 Polymarket trader보다 빨라야 합니다(Twitter는 mainstream press보다 빠르고, AP wire는 Twitter보다 빠릅니다). 둘째, news가 모호하지 않아야 합니다(부상 발표, 법원 판결 등). 해석이 들어가면 latency를 잡아먹습니다. 셋째, spread tax를 감안해도 price move가 충분히 커야 합니다.
이 edge를 노리는 bot은 크게 두 부류로 나뉩니다. 하나는 direct sources를 구독하고 parsing하는 bot이고, 다른 하나는 Polymarket에서 비정상적인 price move를 감지해 news 발생을 추론하는 bot입니다. 둘 다 유효합니다. 첫 번째는 선행하고, 두 번째는 추종합니다.
News sources: RSS, Twitter, AP, official feeds
공개 정보 상태에 도달하는 latency 기준으로 순위를 매기면, 가장 빠른 것은 다음과 같습니다.
- Direct primary sources: 법원 filings, 정부 press release, 중앙은행 발표. 종종 public RSS 또는 API를 제공합니다. 가장 빠르고 false-positive rate가 가장 낮습니다.
- AP wire / Reuters Eikon (유료). 전통적 trader들이 사용하는 wire입니다. 소비자용 Twitter보다 약 5~30초 빠릅니다.
- Twitter (X, 유료 API). verified account 목록: official org account, beat reporter. 무료 API는 rate limit이 너무 빡빡합니다. Pro tier를 결제하거나 relay service를 사용하세요.
- Specialized newsletters / Discord: 유료 Substack, embargoed industry feed. 틈새 market(crypto, esports)에 유용합니다.
- Mainstream press websites: news-arb edge에는 너무 느립니다.
RSS가 제공되는 모든 곳에서는 RSS를 쓰세요. 무료이고 polling interval이 안정적입니다. 나머지는 Twitter를 사용합니다. production 수준의 news desk라면 AP를 사용하세요.
Latency budget: 2초 이내 read-to-trade
Bot은 총 1~2초 안에 ingest, classify, decide, order placement를 끝내야 합니다. 예산은 다음과 같습니다.
- Ingest: 50~300ms (websocket feed, RSS poll, Twitter stream).
- Classify: 50~200ms (regex / keyword match, 필요하면 prompt를 cache하는 LLM).
- Decide: 50ms (rules table lookup; news tag를 market slug에 매핑).
- Place: 200~500ms (CLOB로 signed FOK order 전송).
예산을 가장 크게 잡아먹는 것은 LLM classification입니다. 500-token GPT-4 call은 1~3초를 추가하며, 그게 곧 arb window 전체가 사라지는 것입니다. production에서는 keyword rules로 classify하고, LLM은 keyword set의 offline calibration에만 사용하세요.
False-positive filters
false-positive를 걸러내지 않는 news-arb bot은 모든 retweet에 반응하며 spread tax로 서서히 손실을 봅니다. 필터는 세 가지가 있습니다.
- Source whitelist: 사전 승인된 list에 있는 account/feed에만 반응합니다. list는 작습니다(10~30개 source).
- Keyword + confirmation pair: keyword 한 번만 맞는 것은 noise입니다. 30초 안에 서로 독립적인 두 source에서 일치가 나오면 signal입니다.
- Market-state guard: 지난 60초 동안 이미 > 5% 움직인 market은 건너뜁니다. 다른 사람이 이미 news를 잡았고, edge는 사라진 상태입니다.
잘 튜닝된 filter의 false-positive rate는 대략 5~10건 중 1건 수준입니다. false-positive rate가 90%면 전략이 망가지고, 50%면 작은 position size로는 운용 가능합니다.
News edge가 사라지는 시점
"news가 public이 된 시점"에서 "price가 news를 반영하는 시점"까지의 window는 해마다 더 빨리 닫힙니다. 2020년에는 중간 정도의 정치 market이 headline을 흡수하는 데 몇 분이 걸렸습니다. 2026년에는 같은 headline도 price가 완전히 움직이기 전 30~90초로 압축됩니다.
edge가 사라졌다는 신호: flagged trade의 per-trade PnL이 30-trade window에서 +3c에서 flat으로 떨어집니다. 이미 price에 반영된 것으로 밝혀지는 false-positive 비율이 70%를 넘습니다. 또는 다른 사람이 먼저 도착해 당신의 FOK ask가 200ms 안에 체결됩니다.
edge가 사라졌을 때의 정직한 pivot은 더 느리고 해석이 필요한 news로 옮기는 것입니다. 예를 들어 법원 판결, 중앙은행 회의록처럼 의미를 parsing하는 데 latency 경쟁보다 시간이 더 걸리는 영역입니다. 아니면 전략을 중단하세요.
Code: news feed를 poll하고 관련 market에 FOK 실행
Production skeleton: news source를 poll하고, rule match를 실행한 뒤, hit가 나오면 FOK order를 전송합니다.
import feedparser, time, re
from py_clob_client.client import ClobClient
RULES = [
{"regex": re.compile(r"out for season|torn ACL", re.I), "tag":"injury-fade"},
{"regex": re.compile(r"federal reserve.*(rate cut|rate hike)", re.I), "tag":"fed-move"},
]
seen = set()
while True:
feed = feedparser.parse("https://example.com/news.rss")
for entry in feed.entries[:20]:
if entry.id in seen: continue
seen.add(entry.id)
for rule in RULES:
if rule["regex"].search(entry.title + " " + entry.summary):
# Look up relevant Polymarket markets, place FOK
fire(rule["tag"], entry)
break
time.sleep(15)
Polling interval: RSS는 5~15초. 가능하면 WebSocket을 사용하세요(Twitter, AP wire). source 제공 ID로 항상 dedup하고, polling이 정확히 한 번만 발생한다고 가정하지 마세요.
Risk: half-truths와 walked-back headlines
News-arb bot의 최악의 날은 headline이 틀렸음이 드러나는 순간입니다. 예: Reuters tweet가 "Trump fires Yellen"이라고 올리자 market이 8 cents 상승했고, 12분 뒤 tweet가 삭제되고 정정됩니다. +8c에 매수한 bot은 이제 -3c 재고를 떠안게 되며, 별다른 대응책도 없습니다.
대응책:
- Two-source confirmation: 단일 tweet만으로는 절대 거래하지 마세요. 60~180초 안에 두 번째 독립 source의 corroborating signal이 필요합니다.
- Source confidence에 따른 position size 조절: AP wire = full size; verified beat reporter의 Twitter = 50%; rumor source = 25%.
- Retract signal 시 auto-exit: 사용한 source가 30분 이내에 correction을 내면 PnL과 무관하게 market에서 즉시 exit합니다.
Walk-back 문제는 news-arb position sizing의 hard ceiling입니다. signal당 $50만 거래하면 30% false-positive rate도 버틸 수 있지만, $500를 거래하면 버티기 어렵습니다.





