LIVE
$7.62 min profit is yours / per trade
Get the bot

Expected value Polymarket arbitrage: how to calculate EV correctly

Polymarket 차익거래 거래의 기댓값을 단계별로 계산하는 실무 가이드. 테이커 수수료, 부분 체결 확률 및 결제 위험을 포함합니다. 단계별 EV 공식과 작동하는 코드 예제가 포함되어 있습니다.

업데이트: 2026-04-20· 7 min
arbitrage
expected value
Polymarket
trading

Expected value Polymarket arbitrage: how to calculate EV correctly

이 가이드는 Polymarket 차익거래의 기댓값(expected value)을 단계별로 계산하는 방법을 보여줍니다. 테이커 수수료, 부분 체결 확률, 결제 리스크를 포함합니다. Polymarket에서 인트라-마켓 바이너리 또는 조합형 차익거래를 실행한다면, 이 공식들은 명목상의 가격 차이를 실행 가능한 EV 추정으로 전환해 줍니다.

주요 포인트

  • EV = (지급액 − 비용 − 수수료) × 체결확률 − 부분 체결 및 결제 타이밍에서 발생하는 하방손실.
  • 반드시 테이커 수수료와 예상 부분 체결률을 포함해야 합니다. Polymarket의 메이커 수수료는 0이므로 수동 유동성에 페깅할 경우에만 관련됩니다.
  • 부분 체결이 적은 규모에서는 Bernoulli 또는 이항 모델 같은 단순 확률 모델을 사용하세요. 실행이 여러 호가 수준에 걸칠 때는 모델을 스케일하세요.
  • 어떠한 차익거래도 무조건적인 "무위험(risk-free)"이라고 부르지 마세요 — 해결(Resolution) 리스크, 슬리피지와 부분 체결, 수수료, UMA 분쟁, 스마트컨트랙트 또는 시간적 리스크를 항상 열거하세요.

1. EV 기본 원리 — 예측시장 차익거래

원칙부터 시작합니다. 완전하게 성공한 차익거래는 완전한 결과 토큰 세트를 사는 데 비용 C(구매한 최우선 매도 가격의 합 + 테이커 수수료)를 지불하고, 해상도 후에는 완전 세트당 $1.00로 환급됩니다. 명목상 edge는:

Edge = 1.00 − C

수수료와 실행 리스크를 고려하기 전의 기대값은 완전 세트당 단순히 Edge입니다. 실무적으로는 이를 수수료, 주문이 인용된 가격에서 체결될 확률, 그리고 부분 체결 가능성을 반영해 EV(기대화폐이득)로 변환해야 합니다.

EV_basic = Edge × FillProbability − Fees_expected

다음 섹션에서 FillProbability와 Fees_expected을 정교하게 다룹니다.

2. 테이커 수수료 및 결제 흐름 포함

Polymarket에서는 테이커 수수료가 카테고리별로 달라 현재 0%~1.8% 범위에 있습니다; 메이커 수수료는 0입니다. 차익거래에서는 보통 스프레드를 건너는 실행 다리에 대해 테이커 수수료를 지불합니다.

N개의 결과를 살 때(멀티-아웃컴 시장의 완전 세트 또는 바이너리의 YES와 NO 둘 다) 총 원가를 계산하세요:

C_gross = Σ bestAsk_i

테이커 수수료는 기준점(basis points) 또는 퍼센트로 표현됩니다. fee_rate가 테이커 수수료(소수)라면 수수료는 대략:

Fees = fee_rate × C_gross

일부 다리가 메이커로 체결되면(타이트한 아비트에서는 드문 경우) 그 부분은 수수료가 0입니다; 이 경우 C_gross를 메이커·테이커 부분으로 나누어 모델링하세요.

순비용 C_net = C_gross + Fees

그럼 완전하게 채워져 환급 가능할 때의 명목 이익은:

Profit_full = 1.00 − C_net

하지만 Profit_full은 FillProbability_full로만 실현되므로 EV 기여는 Profit_full × FillProbability_full입니다.

3. 부분 체결과 비대칭 실행 모델링

부분 체결은 실무 손실의 가장 흔한 원인입니다. 예시 두 가지:

  • YES는 전부 체결되었지만 NO는 일부만 체결되어, 암묵적 헤지보다 더 비싼 가격에 남은 YES 노출을 보유하게 됩니다.
  • 체결이 여러 호가 수준에서 발생해 실제 실현된 C_gross가 첫 레벨의 최우선 매도 합보다 높아집니다.

작은 주문에는 각 레그의 표시된 최우선 매도에서의 전부 체결 확률을 Bernoulli로 가정하는 것이 단순하고 유용합니다. 더 큰 규모에서는 체결을 이항 분포로 모델링하거나 가격 수준별로 결정론적 볼륨 슬라이스 합으로 모델링할 수 있습니다.

계산에 사용할 표기법:

  • q_i = 레그 i에 대해 의도한 수량(아웃컴 주식)
  • f_i = 표시된 최우선 매도에서 q_i가 전부 체결될 확률
  • r_i = 레그 i의 예상 체결 비율(0 ≤ r_i ≤ 1)

부분 체결이 가능한 경우의 기대비용:

E[C_gross] = Σ (bestAsk_i × q_i × r_i)

예상 수수료는 비례적으로 따릅니다:

E[Fees] = fee_rate × E[C_gross] (테이커로 실행된 부분에 대해)

그러나 부분 체결은 비대칭 잔여 포지션을 만듭니다. 보수적인 일반 접근법은 잔여 단일-아웃컴 포지션은 즉시 불리한 mid/ask에서 정리해야 한다고 가정하고, 그 정리에서 발생하는 예상 손실을 EV에 포함하는 것입니다.

예를 들어, 완전 세트를 살 것으로 예상했지만 평균적으로 NO 레그가 90%만 체결되면, 당신은 지불한 가격 p_yes로 YES 10%를 보유하게 됩니다. 최악의 잔여 손실은 대략 0.90 × (p_yes − mid_unwind_price)로 근사됩니다(틱 사이즈와 수수료로 조정). 예상 잔여 손실 항 L_residual을 EV에 포함하세요.

4. 구현 가능한 단계별 EV 공식

정의:

  • n = 세트의 아웃컴 수(n=2는 바이너리)
  • ask_i = 아웃컴 i의 최우선 매도 가격(달러)
  • q = 목표 완전 세트 수량(주식; 예: 10 complete sets)
  • fee = 테이커 수수료율(소수; 예: 0.006은 0.6%)
  • r_i = 레그 i의 예상 체결 비율(0..1). 전부 체결 확률은 r_i = 1.0 사용.
  • p_unwind_i = 잔여 포지션을 청산할 때 기대할 가격(보수적: 현재의 최악 매도 또는 mid 사용)

계산:

  1. E[C_gross] = Σ_i ask_i × q × r_i
  2. E[Fees] = fee × E[C_gross]
  3. E[C_net] = E[C_gross] + E[Fees]
  4. 완전 세트가 환급될 때의 기대 지급액 = q × 1.00 × P_redeem (P_redeem은 최종 환급 가능성; 보통 UMA 분쟁이 없으면 1.0이지만 아래 분쟁 리스크를 포함하세요)
  5. 예상 잔여 손실 L_residual = Σ_i max(0, q × (1 − r_i) × (paid_price_i − p_unwind_i))

최종 EV 추정:

EV = q × P_redeem − E[C_net] − L_residual

완전 세트당 EV를 원하면 EV를 q로 나누세요.

P_redeem 관련 메모: UMA 분쟁은 결제를 일시중단할 수 있습니다. 분쟁 리스크를 반영하려면 P_redeem ≤ 1.0으로 설정하세요; 많은 시장에서는 P_redeem ≈ 1.0으로 처리할 수 있지만 지연 또는 분쟁 가능성을 명시적으로 고려해야 합니다.

5. 수치 예제(바이너리) — 구현 가능하고 보수적

작은 바이너리 차익거래를 가정합니다. YES와 NO를 각 최우선 매도에서 사서 완전 세트 100개를 사려고 합니다. 숫자는 설명을 위한 예시일 뿐이며, 수수료는 문서화된 범위 내로 유지하세요.

  • ask_YES = $0.49
  • ask_NO = $0.50
  • q = 100 세트
  • fee = 0.006 (0.6% 테이커 수수료)
  • r_YES = 1.0, r_NO = 0.95 (NO는 첫 레벨에서 부분 체결 가능성)
  • p_unwind_NO = $0.52 (잔여 NO를 팔 수 있는 예상 가격)
  • P_redeem = 1.0 (최종 환급 가능성 가정)

E[C_gross] = (0.49 + 0.50) × 100 × average_r

정확히는:

E[C_gross] = (0.49 × 100 × 1.0) + (0.50 × 100 × 0.95) = 49.00 + 47.50 = 96.50

E[Fees] = 0.006 × 96.50 = 0.579

E[C_net] = 96.50 + 0.579 = 97.079

지급액 = 100 × 1.00 = 100.00

L_residual: 당신은 100 NO를 기대했지만 95만 체결되어, 완전 세트를 유지하려는 의도라면 NO가 5부족합니다. 일반적인 잔여는 반대 레그(YES)에 대한 추가 노출입니다 — 이 예에서는 부분 체결로 YES 5가 짝이 맞지 않게 남습니다(당신이 그 YES를 0.49에 샀고 보수적으로 p_unwind_YES에서 정리해야 한다면 이에 따라 계산하세요). 대칭성을 위해 오차가 발생한 레그에 대한 보수적 잔여 손실 추정식은 다음과 같습니다:

L_residual = (q × (1 − r_NO)) × (paid_price_NO_unpaired − p_unwind_NO)

짝이 맞지 않는 레그가 더 비싼 쪽이라면 그 손실을 포함하세요. 숫자를 보수적으로 대입해 EV를 과장하지 않도록 하세요.

최종 EV = 100 − 97.079 − L_residual

L_residual이 작다면 거래는 양(positive) EV로 남습니다; L_residual이 명목 Edge를 초과하면 거래는 음수 EV입니다. 주문을 보내기 전에 이 계산을 프로그램적으로 실행하세요.

6. 짧고 사용 가능한 JavaScript 스니펫

이 스니펫은 위 입력을 받아 완전 세트당 EV를 계산합니다. 유효한 JavaScript이며 리스크 프레임워크에 바로 넣어 사용할 수 있습니다.

function computeEVPerSet(asks, r, fee, p_unwind, P_redeem = 1.0) {
  // asks: array of best asks for each outcome, e.g. [0.49, 0.50]
  // r: array of expected fill fractions for each outcome, e.g. [1.0, 0.95]
  const n = asks.length;
  const q = 1; // per-set basis

  const E_C_gross = asks.reduce((s, a, i) => s + a * q * r[i], 0);
  const E_Fees = fee * E_C_gross;
  const E_C_net = E_C_gross + E_Fees;

  // Residual loss: assume unfilled fraction must be closed at p_unwind
  const L_residual = asks.reduce((s, a, i) => {
    const unfilled = q * (1 - r[i]);
    const paid_price = a; // price you paid for filled portion of this outcome
    const unwind_price = p_unwind[i];
    return s + Math.max(0, unfilled * (paid_price - unwind_price));
  }, 0);

  const EV = q * P_redeem - E_C_net - L_residual;
  return { EV_per_set: EV, E_C_gross, E_Fees, L_residual };
}

// Example
const asks = [0.49, 0.50];
const r = [1.0, 0.95];
const fee = 0.006; // 0.6%
const p_unwind = [0.48, 0.52];
console.log(computeEVPerSet(asks, r, fee, p_unwind));

p_unwind 값을 보수적으로 조정하세요(최악의 매도나 mid 사용) 및 r은 귀하의 규모에 대한 과거 체결률을 기반으로 설정하세요.

7. 실전 트레이딩을 위한 실용 팁

  • 도구화된 짧은 기간의 경험적 체결률을 계측하세요. 마이크로구조는 종목별로 다릅니다.
  • 큰 수량은 부분 체결 리스크를 줄이고 builder 또는 relayer 한도를 지키기 위해 작은 슬라이스로 나누세요.
  • 틱 사이즈 동작을 반영하세요: 가격이 극단으로 접근하면 틱 사이즈가 $0.001로 조여져 언와인드 슬리피지가 달라질 수 있습니다.
  • P_redeem에 UMA 분쟁 및 결제 타이밍 리스크를 포함하세요. 분쟁은 결제를 일시중단하고 기회비용에 영향을 줄 수 있습니다.
  • 지리적 제한을 준수하세요: 시장은 IP로 지역 차단됩니다; VPN 우회는 절대 권장하지 않습니다.

거래에 대한 영향

주문을 보내기 전에 세트당 EV를 계산하고, 이미 자본비용, 잠긴 pUSD의 기회비용, 분쟁 지연의 비용을 포함한 내부 최저 허용 EV와 비교하세요. 소규모 빈번한 차익거래의 경우 수수료와 예상 잔여 손실을 제하고도 약간의 양(positive) EV가 있어야 운영 오버헤드를 정당화합니다.

마무리: primary keyword: expected value Polymarket arbitrage는 항상 보수적으로 계산되어야 하며 테이커 수수료와 부분 체결 확률을 명시적으로 모델링해야 합니다.

Frequently asked questions

대형 주문에 대해 부분 체결 확률을 어떻게 모델링하나요?

거래하는 규모에서의 경험적 체결률로 시작하세요. 작은 증분에는 슬라이스별 Bernoulli 가정을 사용하고, 큰 규모에는 가격 수준별 이항 합으로 체결을 모델링하거나 과거 장내 호가(depth-of-book)를 사용해 결정론적으로 슬라이스하세요. r_i를 추정할 때는 항상 보수적으로 추정하세요.

EV 계산에 어떤 수수료를 포함해야 하나요?

실행된 다리에 대한 테이커 수수료를 포함하세요 — Polymarket의 테이커 수수료는 카테고리별로 현재 0%~1.8% 범위입니다; 메이커 수수료는 0입니다. 수수료는 fee_rate × executed_cost로 모델링하고, 실행된 비용을 메이커/테이커 부분으로 나누어 모델링하세요.

EV에 UMA 분쟁을 포함해야 하나요?

그렇습니다. UMA 분쟁은 결제를 일시중단하거나 타이밍을 변경할 수 있습니다. 분쟁 확률과 지연으로 인한 기대 비용을 반영하기 위해 P_redeem ≤ 1.0을 포함하세요.

나중에 포지션을 재조정할 계획이라면 잔여 언와인드 손실을 무시해도 되나요?

아니요. 잔여 포지션은 시장 및 방향 리스크를 수반합니다. 보수적인 언와인드 가격(p_unwind)을 EV 모델에 포함하세요. 문서화된 통계적 재조정 계획과 비용 근거가 없다면 잔여 손실을 포함해야 합니다.

명목상 edge와 EV는 같은 것인가요?

아니요. 명목상 edge = 1.00 − Σ bestAsk_i입니다. EV는 그 edge를 테이커 수수료, 부분 체결 확률, 잔여 언와인드 손실, 결제/분쟁 리스크 등으로 조정한 값입니다. 의사결정에는 EV를 사용하세요.

참조된 용어

관련 가이드

교육용 자료입니다. 재무, 법률 또는 세금 조언이 아닙니다. Polymarket은 귀하의 관할 구역에서 사용 불가할 수 있습니다.