Polymarket Bot Tutorial · Chương 13 trong 32
Market making trên Polymarket: cách quote bid và ask, capture spread, kiếm maker rebates (20-25% của taker fees), toán học về inventory risk, và khi nào MM hoạt động trên prediction markets.
Chương này nói về gì
Market making trên Polymarket có nghĩa là liên tục quote cả hai phía của order book và kiếm spread trên mỗi vòng giao dịch. Chiến lược này đã quá quen thuộc trong traditional finance; những điểm khác biệt riêng của Polymarket là chương trình maker-rebate và adverse-selection profile của prediction markets, vốn cao hơn các CFD venues. Chương này là phần toán học trung thực.
- Market making bằng tiếng Anh đơn giản
- Lợi thế từ spread + rebate
- Inventory risk và skew
- Khi nào MM hoạt động trên Polymarket (và khi nào không)
- Code skeleton: quote cả hai phía ở mức +/- N cent
- Điều chỉnh quote theo news flow
- Tắt bot khi adverse selection tăng vọt
Market making bằng tiếng Anh đơn giản
Một market maker liên tục quote cả giá mua (bid) và giá bán (ask), rộng hơn mid với một spread cố định. Khi ai đó hit bid, maker mua rẻ; khi ai đó lift ask, maker bán đắt; chênh lệch giữa bid và ask là doanh thu của maker cho mỗi vòng giao dịch.
Chiến lược này dựa trên order flow, không phải định hướng giá. Maker không đưa ra quan điểm YES sẽ thắng hay không; họ đặt cược rằng flow sẽ tiếp tục và spread sẽ vẫn được trả.
Rủi ro là adverse selection: những người hit bid của bạn có thông tin mà bạn không có. Theo thời gian, lợi nhuận MM phụ thuộc vào việc spread có đủ rộng để bù cho slippage từ các trader có thông tin hay không.
Lợi thế từ spread + rebate
Hai nguồn doanh thu cho một Polymarket maker.
Spread capture: quote bid 0.45 và ask 0.47 quanh mid 0.46. Mỗi fill ở bid mà bạn sau đó có thể thoát ở ask sẽ kiếm được 2 cent. Lợi thế ròng phụ thuộc vào mất cân bằng fill và biến động giá.
Maker rebate: chương trình liquidity-rewards của Polymarket trả rebate theo mỗi share cho các maker fills trong những market đủ điều kiện. Con số thay đổi; hãy kiểm tra trang rewards chính thức để biết giá trị hiện tại. Rebate được trả bằng pUSD định kỳ, tách biệt với chính giao dịch.
Với đa số market, spread capture là nguồn doanh thu lớn hơn. Rebate trở nên đáng kể khi bạn có thể quote ở những market rộng hơn (năm bầu cử, vòng playoff lớn của thể thao) nơi Polymarket tăng rebate để thu hút thanh khoản.
Inventory risk và skew
Một MM bị hit liên tục ở bid sẽ tích lũy vị thế long. Rủi ro là mid giảm trong khi inventory đang long; maker chịu lỗ trên vị thế dù đã có doanh thu spread.
Các biện pháp phòng vệ: quote skew (hạ bid khi inventory đang long, nâng ask khi đang short, để làm giảm fill một chiều); inventory cap (ngừng quote ở phía mà bạn đã quá long); active rebalancing (thỉnh thoảng cross spread để giảm vị thế khi inventory chạm giới hạn).
Toán học: nếu 60% fill ở bid không bao giờ thoát trước khi giá di chuyển bất lợi 2 cent, chiến lược đang lỗ trên chính các fill đó. Skew mạnh khi fill imbalance > 65/35.
Khi nào MM hoạt động trên Polymarket (và khi nào không)
MM hoạt động trên Polymarket khi có đủ ba điều kiện sau.
- Liquid book: đủ cạnh tranh quote để spread của bạn cạnh tranh nhưng không bằng 0. Các market bầu cử 2024, trận NFL/NBA lớn, BTC up/down 5m đều phù hợp.
- Two-sided flow: cả người mua và người bán đều hoạt động. Những market một chiều (gần như đã giải quyết ở mức 0.95+) không có gì để maker capture.
- Bounded price moves: các cú nhảy 5 cent nuốt hết lợi nhuận spread. Những market ổn định quanh mid-range (0.40-0.60) là thân thiện nhất.
MM thất bại ở: các market bị chi phối bởi tin tức nơi mid nhảy nhanh hơn tốc độ bạn có thể re-quote; order book kém thanh khoản nơi bạn là quote duy nhất và trade tiếp theo đi qua 5 level; các market sắp giải quyết nơi một phía đang hội tụ về 0 hoặc 1.
Code skeleton: quote cả hai phía ở mức +/- N cent
Pseudocode cho một maker đơn giản nhất nhưng vẫn khả thi.
SPREAD_CENTS = 2
INVENTORY_CAP_SHARES = 50
def make_loop(token_id):
while True:
book = fetch_book(token_id)
mid = (book.best_bid + book.best_ask) / 2
inv = chain_balance(token_id)
# Skew: pull the side we are too long on
bid_px = mid - SPREAD_CENTS/200 - (0.005 if inv > INVENTORY_CAP_SHARES * 0.6 else 0)
ask_px = mid + SPREAD_CENTS/200 + (0.005 if inv < -INVENTORY_CAP_SHARES * 0.6 else 0)
cancel_my_existing_quotes(token_id)
if inv < INVENTORY_CAP_SHARES:
place_gtc(token_id, side="BUY", price=bid_px, size=5)
if inv > -INVENTORY_CAP_SHARES:
place_gtc(token_id, side="SELL", price=ask_px, size=min(5, inv))
time.sleep(2)
Production makers bổ sung: theo dõi inventory theo từng phía, thứ tự cancel-before-place, thêm jitter vào khoảng thời gian re-quote để tránh bị đoán trước, kill-switch khi adverse selection tăng (phần tiếp theo).
Điều chỉnh quote theo news flow
Khi một sự kiện tin tức xảy ra, fair value di chuyển trước khi quote của bạn di chuyển. Một MM không kéo quote khi có news flow sẽ bị bắt bài.
Tín hiệu: tỷ lệ cancel của incoming fills tăng hơn khoảng 3x baseline trong vòng 30 giây, hoặc một kiểm tra chéo từ event stream rộng hơn (Polymarket Twitter/Discord, Bloomberg headline feed). Khi phát hiện, maker kéo toàn bộ quote trong 60-120 giây, chờ mid mới ổn định, rồi re-quote quanh tâm mới.
Cách triển khai đơn giản nhất là theo dõi last-trade-price stream cho token. Một cú nhảy lớn hơn 2 standard deviations so với rolling-window mean sẽ kích hoạt tạm dừng. Bot sẽ quay lại khi giá đã ổn định trong 30+ giây.
Tắt bot khi adverse selection tăng vọt
Lối thoát cứng. Nếu fill PnL của bot trong 50 fill gần nhất chuyển sang âm mạnh, có vấn đề: hoặc market hiện đã bị chi phối bởi tin tức và bạn không nên market making, hoặc spread đang quá chặt so với mức adverse-selection hiện tại.
Điều kiện dừng để mã hóa:
- 5 bid fills liên tiếp không có ask fill, mid giảm > 1c kể từ fill đầu tiên.
- Realized PnL của 25 round-trip fills gần nhất thấp hơn -25% so với kỳ vọng.
- WebSocket disconnect hoặc phát hiện stale book.
- Inventory ở mức cap ở bất kỳ phía nào trong > 5 phút.
Khi được kích hoạt, hủy tất cả lệnh, flatten inventory ở market, dừng trong 15+ phút. Một market maker không có kill switch sẽ mất tiền trong các giai đoạn biến động cho đến khi trader phát hiện thủ công - mà điều đó luôn mất lâu hơn bạn nghĩ.





