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.

Pertanyaan yang sering diajukan

Apa itu order book imbalance?
Rasio volume bid terhadap volume ask di bagian atas book. Book yang sangat condong ke bid (lebih banyak buyer daripada seller di dekat touch) menunjukkan tekanan harga naik dalam jangka sangat pendek. Sinyal ini sudah dikenal di crypto dan equities; di Polymarket sinyal ini bekerja di market yang likuid tetapi menghilang di market yang tipis.
Bagaimana cara menghitung microprice?
microprice = (best_ask * bid_size + best_bid * ask_size) / (bid_size + ask_size). Ini adalah versi volume-weighted dari mid-price yang condong ke sisi dengan volume lebih kecil - sisi yang lebih dulu "habis". Bots menggunakannya sebagai estimasi fair value yang memasukkan imbalance.
Berapa half-life sinyal imbalance di Polymarket?
Di market yang aktif, 5-30 detik. Di market tipis, lebih lama (karena order baru butuh waktu lebih lama untuk mengalahkan imbalance). Jika bot Anda bereaksi di bawah satu detik, Anda bisa menangkap sebagian edge-nya. Jika bereaksi 5+ detik, biasanya sudah terlambat.
Kapan imbalance menyesatkan?
Saat satu order besar sedang diam di satu sisi menunggu disentuh (satu big resting bid, tidak ada aktivitas lain). Imbalance-nya nyata tetapi tidak memprediksi harga - hanya menunjukkan satu buyer yang sangat termotivasi. Filter dengan menghitung jumlah order, bukan hanya volume: imbalance N orders ke 1 order lebih informatif daripada volume 5x yang tersebar di 1 order masing-masing.
Apakah order book imbalance cukup untuk diperdagangkan sendirian?
Biasanya tidak. Sebagai sinyal tunggal, sinyal ini lemah dan mudah di-arb. Gabungkan dengan sinyal lain (misalnya macroprice mean reversion, news flag, atau sports state) untuk edge yang lebih tahan lama. Imbalance saja cenderung underperform random execution setelah fees.
Library Python apa yang bisa menghitung imbalance dari Polymarket WS?
Sejauh yang kami tahu tidak ada library siap pakai - ini hanya beberapa lusin baris code. Subscribe lewat py-clob-client ke market book, pada setiap event price_change hitung ulang ukuran bid/ask di top-of-book, lalu keluarkan metrik imbalance Anda. Cache nilai terakhir dan hanya trigger ulang saat perubahan yang bermakna.