[TOC]

Polymarket adalah pasar prediksi di mana setiap pertanyaan hanya memiliki dua hasil—ya atau tidak, naik atau turun, menang atau kalah. Mengambil contoh kontrak perubahan harga BTC 15 menit, setiap putaran memiliki…Up Dan DownDua kontrak, bertaruh apakah harga penutupan BTC akan lebih tinggi atau lebih rendah dari harga pembukaannya dalam waktu 15 menit. Taruhan yang benar menghasilkan $1, taruhan yang salah menghasilkan nol.

Pasar ini memiliki karakteristik yang sangat istimewa:Probabilitas gabungan dari kedua hasil tersebut adalah 100%, jadi secara teori harga Naik ditambah harga Turun seharusnya sama persis dengan 1.
[ Harga_naik} + Harga_turun} = 1 (Nilai teoritis) ]
Properti ini tidak ada di pasar kontrak biasa, sehingga memberi kita kepastian yang alami.
Perdagangan kuantitatif selalu berfokus pada satu hal: menemukan peluang yang relatif pasti di pasar yang penuh ketidakpastian.
Struktur biner Polymarket menyediakan jangkar seperti itu:Terlepas dari apakah BTC naik atau turun dalam 15 menit ini, baik naik maupun turun pasti akan menghasilkan keuntungan $1.Dengan menggunakan titik acuan ini, kita tidak perlu menentukan arah; kita hanya perlu mencari peluang di mana total biaya pembelian Naik dan Turun kurang dari 1, dan keuntungannya terjamin.
Masalahnya adalah, sebagian besar waktu, jumlah kedua harga tersebut mendekati 1, sehingga peluang arbitrase langsung sulit ditemukan. Jadi, di mana sebenarnya peluang tersebut berada?
Peluang datang dariKetidakseimbangan Harga Akibat Reaksi Pasar yang Berlebihan。
Bayangkan skenario ini: Dalam periode 15 menit, BTC tiba-tiba turun drastis, menyebabkan kepanikan pasar dan aksi jual besar-besaran kontrak Up, dengan harga turun dari 0,5 menjadi 0,35. Secara teori, berapa pun penurunan Up, Down seharusnya naik dengan jumlah yang sama, sehingga jumlahnya selalu sama dengan 1. Namun, pasar bereaksi dengan kecepatan yang berbeda. Up telah dengan cepat tertekan turun, sementara Down masih bergerak dari 0,5 ke 0,65 dan mungkin belum sepenuhnya mengejar ketertinggalan.
Pada momen transisi yang krusial ini, jumlah antara Naik dan Turun mungkin hanya 0,93, sehingga mengakibatkan ketidakseimbangan harga yang singkat.
[ \text{Up}(0.35) + \text{Down}(0.58) = 0.93 < 1 ]
Inilah jendela arbitrase: kombinasi yang harganya \(0,93 untuk dibeli dan pasti akan menghasilkan \)1, dengan keuntungan ditentukan pada saat pembelian.
Ide awalnya berasal dari pengguna Twitter @the_smart_ape, dan sangat ringkas, hanya dengan empat parameter:
| parameter | arti |
|---|---|
SHARES |
Saham pembelian per kaki |
SUM_TARGET |
Harga target untuk kedua kaki yang digabungkan (batas atas) |
MOVE_PCT |
Besarnya penurunan |
WINDOW_MIN |
Waktu jendela pemantauan |
Logika eksekusinya adalah sebagai berikut: dalam jendela pemantauan di awal setiap putaran, harga terus dipantau. Begitu arah tertentu mengalami penurunan tajam yang melebihi ambang batas pemicu, arah tersebut dibeli sebagai leg pertama. Kemudian, harga di arah yang berlawanan ditunggu untuk turun kembali. Ketika harga gabungan dari kedua leg lebih rendah dari harga target, leg kedua dibeli, dan arbitrase ditutup. Penyelesaian dan penebusan diselesaikan dalam 15 menit.
Pendekatan ini bersih dan lugas, tetapi jika diterapkan langsung pada perdagangan nyata, akan menghadapi beberapa masalah yang jelas.
Ide awalnya adalahMenunggu secara pasifBeli pada pergerakan pertama, lalu perhatikan kapan harga pada arah berlawanan turun kembali. Beli pada pergerakan kedua hanya ketika harga gabungan dari kedua pergerakan tersebut berada di bawah harga target.
Pendekatan kami terhadap peningkatan kualitas berbeda.Pada saat terjadi penurunan tajam, ada kemungkinan besar bahwa indikator Naik dan Turun akan bergerak dengan kecepatan berbeda. Kami mengambil tindakan serentak selama periode ketidakselarasan ini:
SUM_TARGET - 第一腿价格Dengan menerapkan price limit terbalik, kita dapat mengunci harga sebelum tren yang berlawanan mencapai puncaknya.Ketika kedua pesanan diajukan secara bersamaan, peluang arbitrase terkunci pada saat pesanan ditempatkan. Alih-alih menunggu secara pasif hingga pasar memenuhi kondisi yang diperlukan, kita membiarkan pasar datang kepada kita.
Implementasi kode intinya adalah sebagai berikut:
function executeBothLegs(symbols, dumpSide, dumpAsk) {
var leg1Symbol = (dumpSide === "Up") ? symbols.up : symbols.down
var leg2Symbol = (dumpSide === "Up") ? symbols.down : symbols.up
leg1Price = _N(dumpAsk + SLIPPAGE, 4)
// 第二腿限价:SUM_TARGET - leg1Price,确保两腿合计 <= SUM_TARGET 即有利润
leg2Price = _N(SUM_TARGET - leg1Price, 4)
// 并发提交两个限价单
var goLeg1 = exchange.Go("CreateOrder", leg1Symbol, "buy", leg1Price, SHARES)
var goLeg2 = exchange.Go("CreateOrder", leg2Symbol, "buy", leg2Price, SHARES)
var id1 = goLeg1.wait()
var id2 = goLeg2.wait()
leg1OrderId = id1
leg2OrderId = id2
state = STATE.BOTH_PENDING
}
Ide awalnya adalah bahwa tahap kedua akan diselesaikan dengan cepat, tetapi pada kenyataannya, sering terjadi bahwa setelah tahap naik ditekan ke bawah, harga tahap turun tidak turun kembali, sentimen pasar tetap pesimistis, dan harga gabungan kedua tahap tersebut tidak pernah mencapai target.
Selama periode ini, jika Anda memegang posisi naik satu sisi, harga mungkin akan terus turun hingga mencapai nol.Perintah stop-loss harus ditempatkan.
Kami menambahkan dua parameter:
FLOOR_PRICE(Harga Minimum)Tetapkan titik terendah absolut (misalnya, 0,05). Jika harga yang dipegang turun ke level ini, itu menunjukkan bahwa pasar telah menentukan bahwa arah ini kemungkinan akan mengalami penurunan, jadi hentikan kerugian dan keluar dari pasar.EARLY_TAKE_PROFIT(Rasio pengambilan keuntungan awal)Setelah membeli kontrak tahap pertama, jika harga naik hingga mencapai target keuntungan, jual langsung untuk mendapatkan keuntungan, tanpa menunggu tahap kedua.function handleLeg1OnlyRisk(symbols, upBid, downBid, isLastMin) {
var holdBid = (leg1Side === "Up") ? upBid : downBid
var profitLine = leg1EntryAsk * (1 + EARLY_TAKE_PROFIT)
var stopLine = leg1EntryAsk * (1 - LAST_MIN_STOP_LOSS)
var needClose = false
var reason = ""
if (holdBid <= FLOOR_PRICE) {
needClose = true; reason = "止损(保底)"
} else if (!isLastMin && holdBid >= profitLine) {
needClose = true; reason = "前期止盈"
} else if (isLastMin && holdBid <= stopLine) {
needClose = true; reason = "末段止损"
}
if (needClose) {
// 先撤对侧挂单,再平仓
cancelAndConfirmUntilClear(leg2OrderId)
closePosition(holdSymbol, holdBid, reason)
}
}
Yang satu menjamin batas bawah, dan yang lainnya mengunci batas atas, sehingga memberikan batasan pada posisi satu sisi yang semula tidak terbatas.
Pendekatan awal tidak membedakan dimensi waktu, tetapi sangat berbeda ketika tahap penyelesaian semakin dekat: penyelesaian akan segera terjadi, dan tidak ada waktu untuk menunggu meskipun harga belum turun. Terlebih lagi, semakin dekat dengan penyelesaian, fluktuasi harga cenderung semakin drastis.
Kami menambahkanLAST_MIN_S(Ambang batas waktu akhir dapat disesuaikan.) Logika peralihan setelah memasuki tahap akhir:
LAST_MIN_STOP_LOSS(Persentase stop-loss di akhir sesi perdagangan), keluar pada harga pasar jika harga posisi turun di bawah garis stop-loss.var isLastMin = (remaining <= LAST_MIN_S)
// BOTH_PENDING 状态下
if (isLastMin) {
Log("⏰ 最后1分钟,撤销未成交挂单")
cancelAllPending("最后1分钟")
}
Pada tahap awal, tunggu hingga harga pulih; pada tahap selanjutnya, hindari harga jatuh hingga nol. Kedua logika ini tidak saling bertentangan.
Polymarket adalah pasar on-chain, dan pengembalian status pesanan serta informasi posisi terkadang lambat; mungkin dibutuhkan beberapa detik untuk menerima konfirmasi setelah melakukan pemesanan. Oleh karena itu, strategi ini menggabungkan deteksi batas waktu pesanan dan mekanisme percobaan ulang:
function placeOrderAndConfirm(symbol, side, price, amount) {
var orderId = exchange.CreateOrder(symbol, side, orderPrice, amount)
var deadline = Date.now() + ORDER_TIMEOUT_S * 1000
while (Date.now() < deadline) {
var order = exchange.GetOrder(orderId)
if (order && order.Status === 1) {
return { orderId: orderId, avgPrice: order.AvgPrice } // 成交
}
if (order && (order.Status === 2 || order.Status === 4)) {
return { orderId: orderId, avgPrice: null } // 已撤销
}
Sleep(1000)
}
// 超时后执行撤单
exchange.CancelOrder(orderId)
// ... 继续轮询确认最终状态
}
Pada saat yang sama ditambahkanSLIPPAGE(Parameter slippage) meningkatkan probabilitas pesanan beli dieksekusi. Harga pesanan sebenarnya saat membeli sama dengan harga target ditambah slippage.
Polymarket memiliki mekanisme yang unik: jumlah yang dibayarkan tidak secara otomatis dikembalikan ke saldo setelah penyelesaian kontrak.Dana hanya dapat dicairkan dengan secara aktif memanggil API Penukaran.Jika langkah ini terlewatkan, uang di rekening akan terkunci pada posisi yang sudah diselesaikan.
Strategi ini secara otomatis memulai proses Penukaran secara bertahap selama setiap peralihan untuk memastikan pengembalian dana tepat waktu.
function doRedeem() {
var positions = exchange.GetPositions()
for (var i = 0; i < positions.length; i++) {
var pos = positions[i]
if (pos.Info && pos.Info.redeemable) {
var result = exchange.IO("redeem", pos.Symbol, true)
Log("Redeem 结果:", result)
}
}
}
// 每轮结算前(840s 后)自动触发
if (!redeemDone && elapsed >= 840) {
doRedeem()
redeemDone = true
}

Strategi ini mencakup dasbor waktu nyata yang menampilkan ekuitas akun, status terkini, pemantauan harga, dan laba/rugi posisi dalam format tabel, memungkinkan Anda untuk dengan mudah melacak kemajuan strategi selama perdagangan langsung. Dasbor ini berisi empat tabel:

Contoh perdagangan langsung:
Putaran baru dimulai, dan strategi sedang dipantau. Penurunan 18,60% pada kontrak Down terdeteksi, dari 0,43 menjadi 0,35, yang memicu sinyal. Secara bersamaan, dua order limit ditempatkan: order Down pertama di 0,37, dan order Up kedua di 0,60, total 0,97, di bawah harga target. Kedua order tersebut diajukan secara bersamaan dan kemudian dieksekusi. Harga eksekusi rata-rata aktual: leg pertama 0,34, leg kedua 0,60, total biaya sebenarnya.0.94Keuntungan yang diperoleh lebih tinggi dari yang diharapkan, yaitu di bawah ambang batas yang telah ditetapkan sebesar 0,97.
Strategi ini relatif masuk akal dalam konsepnya dan dapat mencapai keuntungan yang baik ketika kondisi pasar mendukung. Namun, ada tiga kekurangan yang perlu diakui secara jujur:
Kelemahan 1: Sulit menemukan peluang untuk membuka posisi saat pasar stabil.Peluang arbitrase bergantung pada reaksi berlebihan pasar; ketika pasar stabil, probabilitas penurunan tajam sangat rendah, dan strategi ini hanya dapat beroperasi secara terisolasi. Memperluas rentang pemicu dapat meningkatkan peluang, tetapi kualitas entri akan menurun.
Cacat 2: Risiko memegang satu posisi saja sulit untuk dihindari sepenuhnya.Setelah posisi pertama terisi, jika harga terus turun alih-alih pulih, posisi kedua tidak akan pernah terisi dan akan terus turun hingga mencapai garis stop-loss dan terpicu. Menentukan ambang batas stop-loss merupakan dilema: terlalu ketat dan akan mudah terpicu oleh fluktuasi normal; terlalu longgar dan kerugian akan terlalu besar jika harga benar-benar anjlok.
Kelemahan 3: Ambang batas untuk harga target gabungan dari kedua kaki adalah sebuah kompromi.Menetapkan ambang batas terlalu tinggi meningkatkan peluang tetapi menghasilkan keuntungan yang lebih kecil setiap kali; menetapkannya terlalu rendah meningkatkan keuntungan setiap kali tetapi dapat mengakibatkan penantian yang lama untuk peluang yang signifikan. Ini adalah pilihan strategi: akumulasi skala kecil yang sering, atau mempertahankan ambang batas rendah dan menunggu peluang besar sesekali.
Strategi ini adalah sebuah kerangka kerja, dan ada tiga arah yang layak dieksplorasi secara mendalam:
Opsi 1: Memasukkan data harga BTC eksternal.Strategi ini lebih cocok untuk pasar yang bergerak dalam kisaran harga terbatas; di pasar yang sedang tren, order stop-loss akan sering terpicu. Strategi ini dapat diintegrasikan dengan harga BTC real-time dari bursa, memungkinkan pembukaan posisi yang dihentikan sementara ketika tren yang jelas muncul, sehingga mengurangi kerugian yang tidak perlu.
Arah 2: Pemodelan Matematika.Pada dasarnya, “Naik” dan “Turun” adalah dua opsi biner. Terdapat banyak model penetapan harga yang matang di bidang opsi, yang secara teoritis dapat memodelkan probabilitas jendela arbitrase dan titik masuk optimal dengan lebih akurat, daripada mengandalkan ambang batas tetap untuk membuat keputusan sembarangan.
Opsi 3: Penyesuaian parameter dinamis.Saat ini, semua parameter bersifat tetap, tetapi volatilitas pasar berubah. Menggunakan parameter yang sama selama periode volatilitas tinggi dan rendah jelas tidak tepat. Penyesuaian parameter secara otomatis berdasarkan kondisi pasar secara real-time sangat meningkatkan kemampuan adaptasi strategi.
Logika inti dari strategi ini—menemukan momen ketidakseimbangan harga di pasar biner—tidak terbatas pada kontrak BTC Polymarket. Pasar apa pun dengan struktur biner dan perbedaan harga jangka pendek dapat digunakan untuk mengungkap peluang menggunakan pendekatan serupa. Kami hanya mengubah ide ini menjadi kerangka kerja yang berfungsi; bagian yang benar-benar menarik masih akan datang.
Kode sumber strategi: Robot Arbitrase Lindung Nilai Dua Kaki 15 Menit Polymarket BTC (Versi Lindung Nilai Dua Arah)