[TOC]

폴리마켓은 각 질문에 대해 예/아니오, 상승/하락, 승리/패배와 같이 두 가지 결과만 있는 예측 시장입니다. 비트코인(BTC)의 15분 가격 변동 계약을 예로 들면, 각 라운드는…Up 그리고 Down두 개의 계약으로, 15분 이내에 비트코인(BTC)의 종가가 시가보다 높을지 낮을지를 예측하는 것입니다. 적중하면 1달러를 받고, 틀리면 아무것도 받지 못합니다.

이 시장은 아주 특별한 특징을 가지고 있습니다.두 가지 결과가 동시에 발생할 확률은 100%이므로, 이론적으로 상승 시 가격과 하락 시 가격을 합하면 정확히 1이 되어야 합니다.
[ 상승가격 + 하락가격 = 1 (이론값) ]
이러한 속성은 일반적인 계약 시장에서는 존재하지 않으므로, 우리에게 자연스러운 확실성 기준을 제공합니다.
양적 거래는 언제나 단 한 가지에 초점을 맞춰왔습니다. 바로 불확실성으로 가득 찬 시장에서 비교적 확실한 기회를 찾는 것입니다.
Polymarket의 바이너리 구조는 그러한 앵커를 제공합니다.향후 15분 동안 비트코인 가격이 오르든 내리든, 상승 또는 하락에 베팅하면 반드시 1달러를 지급받게 됩니다.이 기준점을 사용하면 방향을 결정할 필요가 없습니다. 상승과 하락을 매수하는 총비용이 1보다 작고 수익이 보장되는 기회를 찾기만 하면 됩니다.
문제는 대부분의 경우 두 가격의 합이 1에 가까워 직접적인 차익거래 기회를 찾기가 어렵다는 점입니다. 그렇다면 정확히 어떤 곳에 기회가 있을까요?
기회는 다음으로부터 온다시장 과잉반응으로 인한 가격 불균형。
다음 시나리오를 상상해 보세요. 15분 만에 비트코인(BTC) 가격이 갑자기 급락하여 시장에 공황이 발생하고, 상승(Up) 계약이 대량 매도되면서 가격이 0.5에서 0.35로 떨어졌습니다. 이론적으로 상승 가격이 얼마나 떨어지든 하락(Down) 가격은 같은 폭으로 상승해야 하며, 두 가격의 합은 항상 1이 되어야 합니다. 하지만 시장은 각기 다른 속도로 반응합니다. 상승 가격은 이미 급격하게 하락했지만, 하락 가격은 여전히 0.5에서 0.65로 움직이고 있으며 상승 가격을 완전히 따라잡지 못했을 수도 있습니다.
이러한 중요한 전환점에서 상승과 하락의 합이 0.93에 불과할 수 있으며, 이로 인해 일시적인 가격 불균형이 발생할 수 있습니다.
[ \text{Up}(0.35) + \text{Down}(0.58) = 0.93 < 1 ]
이것이 바로 차익거래 기회입니다. 0.93달러에 매수하면 반드시 1달러의 수익을 얻게 되는 조합이며, 수익은 매수 시점에 결정됩니다.
이 아이디어는 트위터 사용자 @the_smart_ape에서 처음 나왔으며, 매개변수가 단 네 개뿐인 매우 간결한 모델입니다.
| 매개변수 | 의미 |
|---|---|
SHARES |
다리당 주식을 구매하세요 |
SUM_TARGET |
두 항목 합산 목표 가격(상한선) |
MOVE_PCT |
급락의 규모 |
WINDOW_MIN |
모니터링 창 시간 |
실행 로직은 다음과 같습니다. 각 라운드 시작 시 설정된 모니터링 기간 동안 가격을 지속적으로 모니터링합니다. 특정 방향의 가격이 트리거 임계값을 하회하는 급락이 발생하면 해당 방향을 첫 번째 매수 포지션으로 잡습니다. 그런 다음 반대 방향의 가격이 반등하기를 기다립니다. 두 포지션의 가격을 합산한 값이 목표 가격보다 낮아지면 두 번째 포지션을 매수하고 차익 거래를 종료합니다. 결제 및 환매는 15분 이내에 완료됩니다.
이 접근 방식은 깔끔하고 직관적이지만, 실제 거래에 직접 적용하면 몇 가지 명백한 문제에 직면하게 될 것입니다.
원래 아이디어는 다음과 같았습니다.수동적 대기첫 번째 상승분을 매수하고, 반대 방향의 가격이 하락하는 시점을 지켜봅니다. 두 상승분의 합이 목표 가격보다 낮아질 때만 두 번째 상승분을 매수합니다.
개선을 위한 우리의 접근 방식은 서로 다릅니다.급격한 하락이 발생하는 순간, 상승 및 하락 지표가 서로 다른 속도로 움직일 가능성이 높습니다. 이러한 비동기화 기간 동안 우리는 동시에 조치를 취합니다.
SUM_TARGET - 第一腿价格역가격 제한 주문을 적용하면 반대 추세가 최고점에 도달하기 전에 가격을 고정할 수 있습니다.두 주문이 동시에 제출되면 주문이 접수되는 순간 차익 거래 기회가 확정됩니다. 시장이 조건을 충족하기를 수동적으로 기다리는 대신, 시장이 우리에게 오도록 하는 것입니다.
핵심 코드 구현은 다음과 같습니다.
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
}
원래 예상은 두 번째 구간이 빠르게 완료되는 것이었지만, 실제로는 상승 구간의 가격이 하락한 후에도 하락 구간의 가격이 다시 떨어지지 않고 시장 심리가 비관적인 상태를 유지하며, 두 구간의 가격을 합친 가격이 목표치에 도달하지 못하는 경우가 종종 발생합니다.
이 기간 동안 상승 포지션을 한쪽으로만 보유하고 있다면 가격이 계속 하락하여 0이 될 수 있습니다.손절매 주문을 설정해야 합니다.
우리는 두 가지 매개변수를 추가했습니다.
FLOOR_PRICE(최저가)절대 최저 가격(예: 0.05)을 설정하세요. 보유 가격이 이 수준까지 떨어지면 시장이 해당 방향이 불리할 가능성이 높다고 판단한 것이므로 손실을 막고 시장에서 빠져나오세요.EARLY_TAKE_PROFIT(잠정 이익 실현율)계약의 첫 번째 구간을 매수한 후, 가격이 목표 수익률에 도달하면 두 번째 구간을 기다리지 않고 바로 매도하여 수익을 실현하십시오.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)
}
}
하나는 하한선을 보장하고, 다른 하나는 상한선을 고정하여 원래 무제한이었던 일방적인 입장에 경계를 설정합니다.
기존 접근 방식은 시간 차원을 구분하지 않았지만, 결제 시점이 가까워질수록 상황은 완전히 달라집니다. 결제가 임박하면 가격이 다시 떨어지지 않더라도 기다릴 시간이 없습니다. 더욱이 결제 시점이 가까워질수록 가격 변동폭은 더욱 커지는 경향이 있습니다.
우리는 추가했습니다LAST_MIN_S(최종 시간 임계값은 조정 가능합니다.) 최종 단계 진입 후 전환 로직:
LAST_MIN_STOP_LOSS(거래 세션 종료 시 손절매 비율), 포지션 가격이 손절매선 아래로 떨어지면 시장가로 청산합니다.var isLastMin = (remaining <= LAST_MIN_S)
// BOTH_PENDING 状态下
if (isLastMin) {
Log("⏰ 最后1分钟,撤销未成交挂单")
cancelAllPending("最后1分钟")
}
초기 단계에서는 가격이 회복되기를 기다리고, 후기 단계에서는 가격이 0으로 떨어지는 것을 막아야 합니다. 이 두 가지 논리는 서로 상충되지 않습니다.
폴리마켓은 온체인 마켓이므로 주문 상태 및 포지션 정보 반환이 다소 느릴 수 있습니다. 주문 후 확인을 받기까지 몇 초가 걸릴 수 있습니다. 따라서 이 전략에는 주문 타임아웃 감지 및 재시도 메커니즘이 포함되어 있습니다.
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)
// ... 继续轮询确认最终状态
}
동시에 추가됨SLIPPAGE(슬리피지 매개변수)는 매수 주문 체결 확률을 높입니다. 매수 시 실제 주문 가격은 목표 가격에 슬리피지를 더한 가격과 같습니다.
폴리마켓은 독특한 메커니즘을 가지고 있습니다. 계약 정산 후 지급된 금액이 자동으로 잔액으로 반환되지 않습니다.자금은 상환 API를 직접 호출해야만 인출할 수 있습니다.이 단계를 놓치면 계좌의 자금이 이미 결제된 포지션에 묶이게 됩니다.
이 전략은 자금 반환이 적시에 이루어지도록 각 전환 시 일괄적으로 자동 상환을 시작합니다.
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
}

이 전략에는 계좌 잔고, 현재 상태, 가격 모니터링, 포지션 손익을 표 형식으로 표시하는 실시간 대시보드가 포함되어 있어 실시간 거래 중 전략 진행 상황을 쉽게 추적할 수 있습니다. 대시보드는 네 개의 표로 구성되어 있습니다.

실시간 거래 예시:
새로운 라운드가 시작되었고, 전략은 모니터링 중입니다. 다운 계약 가격이 0.43에서 0.35로 18.60% 하락하여 신호가 발생했습니다. 동시에 두 개의 지정가 주문이 체결되었습니다. 첫 번째 다운 주문은 0.37, 두 번째 업 주문은 0.60으로, 총 0.97의 손실이 발생하여 목표 가격보다 낮았습니다. 두 주문은 동시에 제출되어 체결되었습니다. 실제 평균 체결 가격은 첫 번째 주문 0.34, 두 번째 주문 0.60이며, 이는 실제 총 비용입니다.0.94수익률은 예상보다 높았지만, 설정된 기준치인 0.97에는 미치지 못했습니다.
이 전략은 개념적으로 비교적 타당하며 시장 상황이 유리할 경우 좋은 수익을 낼 수 있습니다. 그러나 솔직하게 인정해야 할 세 가지 단점이 있습니다.
첫 번째 문제점: 시장이 안정적일 때는 포지션을 개설할 기회를 찾기가 어렵습니다.차익거래 기회는 시장의 과잉반응에 의존합니다. 시장이 안정적일 때는 급락 확률이 매우 낮기 때문에 차익거래 전략은 단독으로만 효과를 발휘할 수 있습니다. 트리거 범위를 넓히면 기회는 늘어나지만 진입 시점의 질은 떨어집니다.
두 번째 결함: 단일 포지션을 보유하는 데 따른 위험을 완전히 피하기는 어렵습니다.첫 번째 주문이 체결된 후에도 가격이 회복되지 않고 계속 하락하면 두 번째 주문은 체결되지 않고 손절매선에 도달하여 체결될 때까지 계속 하락합니다. 손절매 임계값을 설정하는 것은 어려운 문제입니다. 너무 좁게 설정하면 일반적인 가격 변동에도 쉽게 체결되고, 너무 느슨하게 설정하면 가격 변동이 심할 경우 손실이 너무 커질 수 있습니다.
세 번째 문제점: 두 구간의 합산 목표 가격에 대한 임계값은 상충 관계에 있습니다.임계값을 너무 높게 설정하면 기회는 늘어나지만 매번 얻는 수익은 줄어들고, 너무 낮게 설정하면 매번 수익은 늘어나지만 큰 기회를 잡기까지 오랜 시간을 기다려야 할 수 있습니다. 이는 전략 선택의 문제입니다. 소규모 투자를 자주 할 것인지, 아니면 낮은 임계값을 유지하고 가끔씩 찾아오는 큰 기회를 기다릴 것인지 결정해야 합니다.
이 전략은 하나의 틀이며, 심층적으로 살펴볼 가치가 있는 세 가지 방향이 있습니다.
옵션 1: 외부 BTC 가격 데이터를 도입합니다.이 전략은 횡보장에서 더 효과적이며, 추세 시장에서는 손절매 주문이 자주 체결될 수 있습니다. 거래소에서 제공하는 실시간 비트코인 가격과 연동하여 명확한 추세가 나타날 때 포지션 개설을 일시 중지할 수 있으므로 불필요한 손실을 줄일 수 있습니다.
방향 2: 수학적 모델링.상승과 하락은 본질적으로 두 가지 이진 옵션입니다. 옵션 분야에는 이미 많은 성숙한 가격 결정 모델이 있으며, 이러한 모델은 고정된 임계값에 의존하여 임의적인 결정을 내리는 것보다 이론적으로 차익 거래 기회와 최적 진입 시점의 확률을 더 정확하게 모델링할 수 있습니다.
옵션 3: 동적 매개변수 조정.현재 모든 매개변수는 고정되어 있지만 시장 변동성은 끊임없이 변화합니다. 변동성이 높을 때와 낮을 때 동일한 매개변수 세트를 사용하는 것은 명백히 부적절합니다. 실시간 시장 상황에 따라 매개변수를 자동으로 조정하면 전략의 적응성이 크게 향상됩니다.
이 전략의 핵심 논리, 즉 바이너리 시장에서 가격 불균형 시점을 찾아내는 것은 폴리마켓의 BTC 계약에만 국한되지 않습니다. 바이너리 구조를 가지고 단기적인 가격 차이가 발생하는 모든 시장에서 유사한 접근 방식을 사용하여 기회를 포착할 수 있습니다. 우리는 단지 이 아이디어를 실행 가능한 프레임워크로 구현했을 뿐이며, 진정으로 흥미로운 부분은 아직 시작되지 않았습니다.
전략 소스 코드: 폴리마켓 BTC 15분 양방향 헤징 차익거래 로봇 (양방향 헤징 버전)