Polymarket Bot Tutorial · Chapter 20 of 32
Lacak wallet whale Polymarket dan copy-trade performer terbaik secara programmatic: identifikasi wallet yang profit lewat leaderboard dan analisis on-chain, mirror trade mereka dengan aturan ukuran dan timing.
Apa yang dibahas di chapter ini
Menyalin wallet Polymarket yang menang adalah ide yang populer, tetapi whale sebenarnya di Polymarket sebagian besar melakukan late-window arb pada market yang sudah resolved, bukan directional bets. Chapter ini adalah riset jujur dari analisis on-chain: wallet mana yang benar-benar layak dicopy, mengapa sebagian besar tidak layak dicopy, dan matematika position-sizing.
- Mengidentifikasi wallet yang profit
- Deteksi trade on-chain
- Position sizing relatif terhadap whale
- Latency: seberapa terlambat itu terlalu terlambat
- Filter: hanya ikuti wallet dengan verified edge
- Code: deteksi whale buy event, lakukan sized copy
Mengidentifikasi wallet yang profit
Premis whale-copying adalah bahwa beberapa wallet secara konsisten profit dan menyalin entry mereka menangkap sebagian edge mereka. Analisis on-chain terhadap top wallet Polymarket pada 2025-26 menghasilkan hasil yang mengejutkan: sebagian besar whale yang terlihat sebenarnya melakukan late-window arbitrage pada market yang sudah resolved, bukan directional trading.
Profil yang kami ukur pada tiga wallet whale kandidat:
- "hhhhhh6" (98.5% win rate, $n M volume) - 88% entry pada harga ≥0.95, median timestamp entry 226 detik dari window 300 detik. Pure tail-yield arb, bukan directional.
- "anonymous" (20% win rate) - degenerate gambler. Menyalin ini malah rugi.
- "Jkim123" (53.5% win rate) - coin-flip. Bukan sinyal yang layak dicopy.
0% trade whale ini terjadi dalam 120 detik pertama dari window 5 menit mana pun. Sinyal prediktif (jika ada) akan datang dari entry besar di EARLY-window - tetapi wallet seperti itu bukan yang berada di puncak leaderboard, karena memang sulit.
Deteksi trade on-chain
Mendeteksi trade wallet target membutuhkan polling ke data-api Polymarket atau subscribe ke event transfer CTF on-chain. Opsi data-api lebih sederhana.
def watch_wallet(wallet_addr, last_seen_ts=0):
while True:
url = f"https://data-api.polymarket.com/activity?user={wallet_addr}&limit=100"
events = requests.get(url).json()
for ev in events:
ts = int(ev.get("timestamp", 0))
if ts <= last_seen_ts: continue
if ev["type"] == "TRADE":
process_whale_trade(ev)
last_seen_ts = max(last_seen_ts, ts)
time.sleep(5)
Polling lima detik adalah batas praktis untuk data-api. Lebih rendah dari itu Anda akan kena rate limit. Untuk deteksi sub-detik, subscribe ke event on-chain ERC-1155 TransferSingle dari contract CTF yang difilter berdasarkan proxy address milik whale.
Position sizing relatif terhadap whale
Jika Anda meng-size copy Anda sebagai fraksi konstan dari trade whale, Anda mewarisi profil risk mereka. Ada dua alternatif praktis.
- Cap-based: ukuran setiap copy dibatasi pada nominal dolar tetap ($10-50) terlepas dari ukuran whale. Lambat untuk compounding, tetapi loss per trade terbatas.
- Win-rate-weighted: ukuran copy sebagai fungsi dari win rate terbaru whale. WR 60%+ → full-size copy; 40-60% → half-size; di bawah 40% → skip.
Pendekatan cap-based adalah deployment pertama yang lebih aman. Pindah ke win-rate-weighted hanya setelah Anda mengukur win rate aktual whale pada copy ANDA (yang biasanya lebih buruk daripada angka headline mereka karena Anda datang terlambat).
Latency: seberapa terlambat itu terlalu terlambat
Trade whale terlihat publik dalam 1-2 detik setelah eksekusi. Menyalinnya membutuhkan latency baca yang lebih cepat dari itu, ditambah latency placement order Anda sendiri.
End-to-end untuk copy bot tipikal: polling 5-10 detik + order placement 200ms = total 5-15 detik. Saat copy Anda dieksekusi, sinyal whale sudah tercermin di harga.
Untuk 99% copy, ini terlalu terlambat di market sempit Polymarket. Entry whale menggeser mid 1-2 sen; Anda membayar premi 1-2 sen itu dibanding harga masuk mereka. Jika edge mereka 3c, separuhnya sudah hilang saat Anda tiba.
Copy bot yang bekerja biasanya (a) menarget market yang bergerak lambat di mana latency 30 detik tidak masalah, atau (b) menggunakan on-chain event subscription untuk bereaksi dalam timeframe sub-detik.
Filter: hanya ikuti wallet dengan verified edge
Tiga filter sebelum menambahkan wallet apa pun ke daftar copy Anda.
- 30+ closed trades dalam riwayat wallet. Sampel yang lebih kecil hanyalah noise.
- Lifetime win rate > 60%, ATAU expected value positif per trade berdasarkan harga entry. Salah satu kondisi; keduanya lebih baik.
- Pola BUKAN late-window arb. Periksa median detik-ke-resolution saat entry; jika mendekati 0, wallet itu melakukan tail-yield arb yang tidak bisa Anda reproduksi.
Sebagian besar kandidat whale gagal di salah satu dari tiga hal ini. Pool wallet yang benar-benar bisa dicopy kecil. Menjaga daftar ini memerlukan pengecekan ulang berkala - wallet yang bulan lalu profit mungkin tidak profit bulan ini.
Code: deteksi whale buy event, lakukan sized copy
Referensi: deteksi event CTF TransferSingle untuk whale yang diawasi, lalu jalankan buy copy dengan ukuran tertentu.
from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
ctf = w3.eth.contract(address=CTF_ADDR, abi=CTF_ABI)
WHALES = {"0xabc...": {"fraction": 0.05, "cap": 50}}
def on_transfer(event):
to = event.args["to"].lower()
if to not in WHALES: return
cfg = WHALES[to]
token_id = event.args.id
whale_size = event.args.value / 1e6
copy_size = min(cfg["cap"], whale_size * cfg["fraction"])
if copy_size < 5: return # not worth fees
book = fetch_book(str(token_id))
if book.best_ask:
place_fok(str(token_id), "BUY", book.best_ask + 0.01, copy_size)
# subscribe to ERC-1155 TransferSingle events from CTF
filt = ctf.events.TransferSingle.create_filter(fromBlock="latest")
while True:
for ev in filt.get_new_entries(): on_transfer(ev)
time.sleep(0.5)
Bedakan buy dari sell dengan memeriksa from (zero address = mint = whale membeli) vs to (zero address = burn = sold).





