Polymarket Bot Tutorial · Bölüm 17 / 32

Polymarket order book dengesizliğini kısa vadeli bir fiyat sinyali olarak kullanın: bid-ask hacim oranı, microprice hesaplaması, sinyal yarı ömrü ve dengesizlik botlarının rastgele execution’ı ne zaman geçtiği.

Bu bölüm neleri kapsıyor

Order-book imbalance, limit order book üzerindeki buy-side depth ile sell-side depth oranıdır. Polymarket'te gerçek ama kısa ömürlü bir predictive edge sağlar - genellikle mid hareket etmeden önce 5-30 saniye. Bu bölüm, hesaplama kalıbını ve sinyalin yanıltıcı olduğu koşulları anlatır.

  • Order book imbalance nedir
  • Microprice hesaplaması
  • Directional signal olarak imbalance
  • Polymarket'te sinyal yarı ömrü
  • Imbalance sinyalleri ne zaman yanıltır
  • Code: her WS tick'te imbalance hesaplama

Order book imbalance nedir

Order book imbalance, limit order book üzerindeki toplam buy-side depth ile toplam sell-side depth oranıdır. Top-N seviyelerinde hesaplandığında (genellikle N=5), mid-price henüz yansıtmamış olsa da trader pressure’ın toplu etkisini yakalar.

Formula: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). Aralık -1 ile +1 arasındadır; pozitif değer daha fazla buy pressure, negatif değer daha fazla sell pressure anlamına gelir.

Sinyal Polymarket'te ampirik olarak gerçektir ama gürültülüdür. Tek bir whale, arbed out edilene kadar 30-60 saniye boyunca sahte imbalance oluşturabilir. Birden fazla feature'dan biri olarak faydalıdır, tek başına tetikleyici olarak kullanmak tehlikelidir.

Microprice hesaplaması

Microprice, basit mid'in geliştirilmiş halidir: best bid ve best ask'in, kendi size'larıyla ağırlıklandırılmış ortalamasıdır.

microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)

Bid-side queue ask tarafına göre çok daha büyük olduğunda, microprice ask'e daha yakın konumlanır. Mantık şu: bekleyen buyer sayısı daha fazlaysa bir sonraki trade'in ask'i yukarı kaldırma olasılığı daha yüksektir, dolayısıyla fair value ask'e daha yakındır.

Microprice, gerçek mid hareketinin 5-30 saniye öncesinden gelen bir leading indicator'dür. Production botlar bunu naive mid yerine take-profit kararlarında reference price olarak kullanır.

Directional signal olarak imbalance

Production gözlemine göre: 10 saniye içinde imbalance -0.3'ten +0.5'e dönerse ve buna eşlik eden bir news event yoksa, mid bir sonraki 30-60 saniye içinde zamanın yaklaşık %65'inde 1-2 cent yukarı hareket eder.

Bu gerçek bir edge'tir ama fee'lerden sonra küçük position size'larda erir. Para kazanmak için botun, hareketi fee'lerden arındırılmış şekilde yakalayacak kadar büyük, ancak book'u kendi başına hareket ettirmeyecek kadar küçük boyutlanması gerekir. Polymarket book'ları genellikle o kadar incedir ki 50 share üzeri her şey market'i hareket ettirir.

Imbalance'ı diğer feature'larla birleştirin: trade velocity (daha fazla trade = daha gerçek sinyal), best-bid'in gerçekten yukarı hareket etmesi (sadece depth kayması değil), market'in news-driven mode'da olmaması.

Polymarket'te sinyal yarı ömrü

Imbalance sinyali zamanla zayıflar. Trader'ımızdan gelen production data: imbalance > 0.6 → 60 saniye içinde 1.2c beklenen mid hareketi, yaklaşık 30 saniyelik yarı ömür. 90 saniye sonra predictive value sıfıra iner.

Bot tasarımı için sonuç: hızlı tepki verin ya da geçin. Karar vermesi 15 saniye süren bir bot, order'ı göndermeden önce edge'in yarısını tüketmiş olur. Imbalance stratejileri için latency budget, sinyalden FOK gönderimine kadar 5 saniyenin altında olmalıdır.

Position'ı yarı ömreden daha uzun süre tutan stratejiler (1-2 dakika), mevcut sinyal üzerine değil bir sonraki sinyal üzerine bahis oynar. Bunu açıkça belirtin; imbalance-driven position'ları yanlışlıkla resolution'a kadar taşımayın.

Imbalance sinyalleri ne zaman yanıltır

Sinyal, aşağıdaki üç koşuldan biri geçerliyken yanıltıcı olur.

  • News-driven move: imbalance, sizin henüz görmediğiniz bir news'in sonucudur. Buna karşı trade etmek kaybettirir; onunla trade etmek ise news arbitrage olur, bu farklı bir stratejidir.
  • Whale spoofing: büyük bir order'ın yerleştirilip hızla iptal edilmesi, süre boyunca sahte imbalance yaratır. Trigger etmeyi denemeden önce imbalance'ın 10+ saniye boyunca devam ettiğini kontrol ederek filtreleyin.
  • End-of-period rebalancing: market maker'ların bilgi değil inventory nedenleriyle quote'ları çekmesi. Imbalance, MM yeniden quote verdiğinde birkaç dakika sonra tersine döner.

Birleşik filtre şudur: imbalance > threshold AND trade velocity > baseline AND son 5 dakika içinde news event yok. Tek başına her filtrede çok fazla false positive vardır.

Code: her WS tick'te imbalance hesaplama

Referans: WebSocket book update'lerine subscribe olun, her tick'te imbalance'ı yeniden hesaplayın.

def on_book_message(msg):
    bids = msg.get("bids", [])[:5]
    asks = msg.get("asks", [])[:5]
    bid_usd = sum(float(b["price"]) * float(b["size"]) for b in bids)
    ask_usd = sum(float(a["price"]) * float(a["size"]) for a in asks)
    total = bid_usd + ask_usd
    if total < 100: return  # illiquid
    imb = (bid_usd - ask_usd) / total
    state[msg["asset_id"]] = {
        "imb": imb,
        "best_bid": float(bids[0]["price"]) if bids else 0,
        "best_ask": float(asks[0]["price"]) if asks else 1,
        "ts": time.time()
    }
    # decision logic with cooldown + filters
    if imb > 0.6 and time.time() - last_fired.get(msg["asset_id"], 0) > 60:
        check_filters_and_maybe_fire(msg["asset_id"])

State token bazındadır. Cooldown, aynı sinyal üzerinde aşırı firing'i engeller. Filtreler (news check, trade velocity) gerçek trade'i kapıdan geçirir.

Sık sorulan sorular

Order book imbalance nedir?
Book'un üst kısmındaki bid hacminin ask hacmine oranıdır. Touch yakınında güçlü şekilde bid tarafına eğilmiş bir book (satıcılardan çok alıcı olması), çok kısa vadede yukarı yönlü fiyat baskısı olduğunu düşündürür. Bu sinyal crypto ve equities'te iyi bilinir; Polymarket'te likit market'lerde çalışır ama ince market'lerde kaybolur.
Microprice'ı nasıl hesaplarım?
microprice = (best_ask * bid_size + best_bid * ask_size) / (bid_size + ask_size). Mid-price'ın volume-weighted bir versiyonudur ve hacmi daha düşük olan tarafa - yani önce "tükenmekte" olan tarafa - doğru eğilir. Botlar bunu imbalance'ı da içeren bir fair value tahmini olarak kullanır.
Polymarket'te bir imbalance sinyalinin yarı ömrü nedir?
Aktif market'lerde 5-30 saniye. İnce market'lerde daha uzundur (çünkü yeni order'ların imbalance'ı aşması daha uzun sürer). Botunuz bir saniyenin altında tepki veriyorsa bir kısmını yakalayabilirsiniz. 5+ saniyede tepki veriyorsa genellikle geç kalmışsınız demektir.
Imbalance ne zaman yanıltır?
Bir tarafın üzerinde tek ve büyük bir order oturuyorsa ve vurulmayı bekliyorsa (tek büyük resting bid, başka aktivite yok). Imbalance gerçektir ama price prediction yapmaz - sadece motive bir buyer gösterir. Sadece volume'a değil order sayısına bakarak filtreleyin: N order'a karşı 1 order imbalance, her biri tek order olan 5x volume'dan daha bilgilendiricidir.
Tek başına trade etmek için order book imbalance yeterli mi?
Genellikle hayır. Tek başına sinyal olarak zayıftır ve arbitrage edilir. Daha dayanıklı bir edge için başka bir sinyalle (örneğin macroprice mean reversion, news flag veya sports state) birleştirin. Imbalance tek başına fee'lerden sonra çoğu zaman random execution'ın altında performans gösterir.
Polymarket WS'ten imbalance hesaplamak için hangi Python library kullanılabilir?
Bildiğimiz kadarıyla hazır bir library yok - birkaç düzine satır kod yeterli. py-clob-client üzerinden market book'a subscribe olun, her price_change event'inde top-of-book bid/ask size'ları yeniden hesaplayın ve imbalance metric'inizi üretin. Son değeri cache'leyin ve yalnızca anlamlı değişimlerde yeniden trigger edin.