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ĩ.

Các câu hỏi thường gặp

Bot retail có thực sự kiếm tiền bằng market-making trên Polymarket không?
Đôi khi có, ở một số market nhất định. Maker rebate (20-25% của taker fees) cộng với spread 1-3 cent mỗi vòng giao dịch có thể cộng dồn thành lợi nhuận thực. Nhưng trên Polymarket, news flow có thể làm một market di chuyển 20+ cent trong vài giây - một market maker không có news feed nhanh sẽ bị adverse selection. Phù hợp nhất cho các market thể thao thanh khoản cao trước trận và trong các giai đoạn ít tin tức.
Nên quote rộng bao nhiêu trên Polymarket?
Tối thiểu là spread đủ để bù cho adverse-selection tệ nhất mà bạn dự kiến. Với thể thao/chính trị thanh khoản cao: lệch 1-3 cent mỗi phía so với mid. Với market mỏng: 5+ cent. Nếu bạn không thể quote đủ chặt để cạnh tranh với các maker khác nhưng đủ rộng để sống sót qua biến động, thì market đó không thể market-make được đối với bạn.
Nên đặt giới hạn inventory như thế nào?
Đặt hard cap inventory cho mỗi market ở mức 50-200 USD cho đến khi bạn chứng minh được lợi nhuận ổn định trong nhiều tháng. Skew quote để đẩy inventory về trạng thái trung tính - nếu bạn tích lũy Yes, hãy hạ Yes bid và hạ No ask để khuyến khích No được mua ngược lại. Đừng bao giờ để một market duy nhất chiếm 20%+ bankroll của bạn.
Có cần VPS nhanh để market-make Polymarket không?
Có. Market making là chiến lược Polymarket nhạy với latency nhất. Một VPS bị jitter sẽ tạo ra quote cũ và bị bắt bài. Chúng tôi dùng TradingVPS cho các MM bots của mình vì jitter luôn ở mức thấp. Commodity cloud (DO/Vultr) phù hợp cho paper trading MM nhưng không phù hợp để chạy live.
Polymarket MM khác crypto MM ở điểm nào?
Có hai khác biệt lớn: (1) Polymarket có các sự kiện outcome cứng (tin tức, chung kết thể thao) có thể làm giá di chuyển 30-100 cent gần như ngay lập tức - sắc hơn nhiều so với crypto. (2) Market Polymarket cuối cùng sẽ được giải quyết, nên khác với các crypto pairs, vị thế MM có thời hạn kết thúc rõ ràng. Cả hai điều này đều khiến bạn phải giữ vị thế ngắn hơn và giới hạn rủi ro chặt hơn.
Tôi có thể market-make các market crypto 5 phút trên Polymarket không?
Có thể nhưng rất khó. Các market 5 phút có khoảng 288 lần hết hạn mỗi ngày cho mỗi cặp, bị thống trị bởi bot nhanh hơn, và spread chặt hơn. Phần lớn retail MM bots đều lỗ ở đó vì adverse selection. Chúng tôi sẽ trình bày đúng cách chiến lược crypto 5 phút trong chương 23 của series này.