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.





