Polymarket Bot Tutorial · Bab 17 dari 32
Gunakan ketidakseimbangan order book Polymarket sebagai sinyal harga jangka pendek: rasio volume bid-ask, perhitungan microprice, signal half-life, dan kapan imbalance bots mengalahkan random execution.
Apa saja yang dibahas di bab ini
Order-book imbalance adalah rasio depth sisi buy terhadap depth sisi sell pada limit order book. Di Polymarket, ini punya edge prediktif yang nyata tetapi singkat - biasanya 5-30 detik sebelum mid bergerak. Bab ini membahas pola perhitungannya dan kondisi saat sinyal ini menyesatkan.
- Apa itu order book imbalance
- Perhitungan microprice
- Imbalance sebagai directional signal
- Signal half-life di Polymarket
- Kapan sinyal imbalance menyesatkan
- Code: menghitung imbalance setiap WS tick
Apa itu order book imbalance
Order book imbalance adalah rasio total depth sisi buy terhadap total depth sisi sell pada limit order book. Dihitung pada top-N levels (umumnya N=5), ini menangkap tekanan trader agregat yang belum tercermin pada mid-price.
Formula: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). Rentang -1 sampai +1; positif berarti tekanan buy lebih besar, negatif berarti tekanan sell lebih besar.
Secara empiris sinyal ini nyata di Polymarket, tetapi noisy. Satu whale bisa memalsukan imbalance selama 30-60 detik sebelum di-arb. Berguna sebagai salah satu fitur di antara beberapa fitur lain, berbahaya jika dijadikan satu-satunya trigger.
Perhitungan microprice
Microprice adalah penyempurnaan dari mid sederhana: weighted average dari best bid dan best ask, diberi bobot berdasarkan ukuran masing-masing.
microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)
Saat antrean di sisi bid jauh lebih besar daripada sisi ask, microprice akan berada lebih dekat ke ask. Intuisinya: lebih banyak buyer yang menunggu berarti trade berikutnya lebih mungkin mengangkat ask, jadi fair value lebih dekat ke ask.
Microprice adalah leading indicator 5-30 detik untuk pergerakan mid yang sebenarnya. Production bots menggunakannya sebagai reference price untuk keputusan take-profit alih-alih mid yang naif.
Imbalance sebagai directional signal
Berdasarkan observasi produksi: ketika imbalance berubah dari -0.3 menjadi +0.5 dalam 10 detik tanpa event news yang menyertai, mid naik 1-2 sen dalam 30-60 detik berikutnya sekitar 65% dari waktu.
Itu edge yang nyata, tetapi menguap pada position size kecil setelah fees. Untuk dimonetisasi, bot harus berukuran cukup besar untuk menangkap pergerakan setelah fees, tetapi cukup kecil agar tidak menggerakkan book itu sendiri. Order book Polymarket biasanya cukup tipis sehingga apa pun di atas 50 shares bisa menggerakkan market.
Gabungkan imbalance dengan fitur lain: trade velocity (lebih banyak trade = sinyal nyata), best-bid benar-benar naik (bukan sekadar depth bergeser), market tidak sedang dalam mode yang digerakkan news.
Signal half-life di Polymarket
Sinyal imbalance mengalami decay. Data produksi dari trader kami: imbalance > 0.6 → expected mid move 1.2c dalam 60s, half-life sekitar ~30s. Setelah 90 detik nilai prediktifnya habis.
Implikasi untuk desain bot: bereaksi cepat atau skip. Bot yang butuh 15 detik untuk memutuskan sudah mengonsumsi setengah edge sebelum order ditempatkan. Latency budget untuk strategi imbalance sebaiknya di bawah 5 detik dari signal sampai FOK dieksekusi.
Strategi yang menahan posisi lebih lama dari half-life (1-2 menit) sebenarnya sedang berjudi pada sinyal berikutnya, bukan sinyal saat ini. Jelaskan ini dengan tegas; jangan sampai tanpa sengaja menahan posisi yang digerakkan imbalance sampai resolution.
Kapan sinyal imbalance menyesatkan
Sinyal ini menyesatkan ketika salah satu dari tiga kondisi berikut terjadi.
- News-driven move: imbalance muncul sebagai konsekuensi dari news yang belum Anda lihat. Trading melawannya akan rugi; trading searah dengannya adalah news arbitrage, strategi yang berbeda.
- Whale spoofing: order besar yang dipasang lalu cepat dibatalkan menciptakan imbalance palsu selama durasinya. Filter dengan mengecek bahwa imbalance bertahan 10+ detik sebelum memicu.
- End-of-period rebalancing: market makers menarik quote karena alasan inventory, bukan alasan informasi. Imbalance berbalik beberapa menit kemudian saat MM me-quote ulang.
Filter gabungannya adalah: imbalance > threshold DAN trade velocity > baseline DAN tidak ada event news dalam 5 menit terakhir. Masing-masing filter saja terlalu banyak false positive.
Code: menghitung imbalance setiap WS tick
Referensi: subscribe ke WebSocket book updates, hitung ulang imbalance pada setiap tick.
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 bersifat per-token. Cooldown mencegah over-firing pada sinyal yang sama. Filters (news check, trade velocity) menjadi gate untuk trade yang sebenarnya.





