Polymarket Bot Tutorial · Bölüm 13 / 32
Polymarket'te market making: bid ve ask nasıl kotelenir, spread nasıl yakalanır, maker rebates (taker fees'in %20-25'i) nasıl kazanılır, inventory risk matematiği ve MM'nin prediction markets'te ne zaman işe yaradığı.
Bu bölüm neleri kapsıyor
Polymarket'te market making, bir market book'unun iki tarafına da sürekli quote vermek ve her round trip'te spread'i kazanmak demektir. Bu strateji geleneksel finansta iyi bilinir; Polymarket'e özgü farklar ise maker-rebate programı ve prediction markets'in adverse selection profilidir; bu profil CFD platformlarından daha yüksektir. Bu bölüm, işin dürüst matematiğidir.
- Basit İngilizceyle market making
- Spread + rebate avantajı
- Inventory risk ve skew
- Polymarket'te MM ne zaman işe yarar (ve ne zaman yaramaz)
- Code skeleton: iki tarafı +/- N cents ile quote etme
- News flow'a göre quote'ları ayarlama
- Adverse selection sıçradığında botu kapatma
Basit İngilizceyle market making
Bir market maker, bir market book'unun hem alış fiyatını (bid) hem de satış fiyatını (ask) sürekli quote eder; bunlar mid'in iki tarafında sabit bir spread kadar daha geniştir. Birisi bid'e vurduğunda maker ucuza alır; biri ask'i kaldırdığında maker pahalıya satar; bid ile ask arasındaki fark maker'ın her round trip'teki geliridir.
Bu strateji yön tahminine değil, order-flow'a dayanır. Maker, YES'in kazanıp kazanmayacağı konusunda görüş belirtmez; flow'un devam edeceği ve spread'in ödenmeye devam edeceği pozisyonunu alır.
Risk adverse selection'dır: bid'inize vuran kişiler sizde olmayan bilgiye sahip olabilir. Zamanla MM kârı, spread'in informed traders'tan gelen slippage'ı karşılayacak kadar geniş olup olmamasına bağlıdır.
Spread + rebate avantajı
Bir Polymarket maker için iki gelir akışı vardır.
Spread capture: mid 0.46 civarında bid 0.45 ve ask 0.47 quote edersiniz. Bid tarafında gerçekleşen ve daha sonra ask tarafında çıkabildiğiniz her fill size 2 cent kazandırır. Net avantaj, fill dengesine ve fiyatın drift'ine bağlıdır.
Maker rebate: Polymarket'in liquidity-rewards programı, uygun marketlerde maker fill'lerine hisse başına rebate öder. Rakamlar değişir; güncel değerler için resmi rewards sayfasını kontrol edin. Rebate, trade'in kendisinden ayrı olarak, periyodik biçimde pUSD olarak ödenir.
Çoğu markette ana gelir kaynağı spread capture'dır. Rebate ise geniş marketlerde quote verebildiğiniz zaman anlamlı olur; örneğin seçim yılı, büyük spor playoff'ları gibi Polymarket'in liquidity çekmek için rebates'i artırdığı dönemlerde.
Inventory risk ve skew
Bid tarafında tekrar tekrar vurulan bir MM, long pozisyon biriktirir. Risk, mid'in inventory long iken düşmesidir; maker, spread gelirine rağmen pozisyonda zarar eder.
Korunma yöntemleri: quote skew (inventory long olduğunda bid'i aşağı, short olduğunda ask'i yukarı çekerek tek taraflı fill'leri azaltmak); inventory cap (zaten fazla long olduğunuz tarafta quote vermeyi durdurmak); aktif rebalancing (inventory limite geldiğinde pozisyonu azaltmak için bazen spread'i geçmek).
Matematik şu: Eğer bid tarafındaki fill'lerin %60'ı, fiyat 2 cent aleyhe hareket etmeden önce asla çıkmıyorsa, strateji sadece bu fill'lerde bile para kaybediyor demektir. Fill dengesinin %65/35'in üzerine çıktığı durumlarda agresif skew uygulayın.
Polymarket'te MM ne zaman işe yarar (ve ne zaman yaramaz)
MM, Polymarket'te üç koşul sağlandığında işe yarar.
- Liquid book: spread'iniz rekabetçi ama sıfır olmadığı kadar quote competition olması. 2024 seçim market'leri, büyük NFL/NBA maçları, BTC up/down 5m bunlara örnektir.
- Two-sided flow: hem alıcıların hem satıcıların aktif olması. Tek taraflı market'lerde (0.95+ seviyesinde çözülmeye yaklaşanlar) maker'ın yakalayacağı bir şey kalmaz.
- Sınırlı fiyat hareketleri: spread capture'ların 5-cent sıçramalarla silinmemesi. 0.40-0.60 aralığındaki stabil market'ler en elverişlileridir.
MM şu durumlarda başarısız olur: mid'in quote'u yenileyebileceğinizden daha hızlı hareket ettiği news-driven market'ler; tek quote veren taraf olduğunuz ve sonraki trade'in 5 seviye birden yürüdüğü illiquid book'lar; bir tarafın 0 veya 1'e yakınsadığı, çözülmeye çok yakın market'ler.
Code skeleton: iki tarafı +/- N cents ile quote etme
En basit uygulanabilir maker için pseudocode.
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 maker'lar şunları ekler: her taraf için ayrı inventory takibi, place etmeden önce cancel sıralaması, tahmin edilebilir olmamak için re-quote aralığına jitter, adverse selection için kill-switch (bir sonraki bölüm).
News flow'a göre quote'ları ayarlama
Bir news event geldiğinde fair value, sizin quote'larınızdan önce hareket eder. News flow sırasında quote'larını geri çekmeyen bir MM kolayca avlanır.
Sinyal şudur: gelen fill'lerin cancel rate'inin 30 saniye içinde baz seviyenin yaklaşık 3 katına çıkması ya da daha geniş bir event-stream çapraz kontrolü (Polymarket Twitter/Discord, Bloomberg headline feed). Tespit edildiğinde maker tüm quote'ları 60-120 saniye boyunca geri çeker, yeni mid'in stabilize olmasına izin verir, sonra yeni merkezin etrafında tekrar quote eder.
En basit implementation, token için son-trade-price stream'ini izler. Rolling-window ortalamasından 2 standart sapmadan büyük bir sıçrama pause tetikler. Bot, fiyat 30+ saniye boyunca stabilize olduğunda tekrar devreye girer.
Adverse selection sıçradığında botu kapatma
Keskin çıkış. Eğer botun son 50 fill'deki fill PnL'i sert biçimde negatife dönerse bir şeyler yanlış demektir: ya market artık news-driven olmuştur ve market making yapılmamalıdır ya da spread mevcut adverse-selection seviyesine göre fazla dar ayarlanmıştır.
Kodlanması gereken kill koşulları:
- Arka arkaya 5 bid fill'i ve hiç ask fill'i yok; ilk fill'den bu yana mid > 1c düşmüşse.
- Son 25 round-trip fill üzerindeki realized PnL beklenenin -%25'inin altındaysa.
- WebSocket disconnect veya stale book tespit edilirse.
- Herhangi bir tarafta inventory, 5 dakikadan uzun süre boyunca cap'te kalırsa.
Tetiklendiğinde her şeyi iptal edin, inventory'yi market ile flatten edin, 15+ dakika durdurun. Kill switch'i olmayan bir market maker, volatil dönemlerde trader bunu manuel fark edene kadar para kaybeder - ve bu her zaman düşündüğünüzden daha uzun sürer.





