預期價值 Polymarket 仲裁:如何正確計算 EV
實用指南:逐步計算 Polymarket 仲裁交易的預期價值(EV),包含 taker 手續費、部分成交機率與清算風險。附公式與可運行的範例程式碼。
預期價值 Polymarket 仲裁:如何正確計算 EV
本指南逐步示範如何計算 Polymarket 仲裁交易的預期價值(expected value,EV),包含 taker 手續費、部分成交機率與結算風險。如果你在 Polymarket 做 intra-market 的二元或多選項套利,這些公式能把名義價差轉成可執行的 EV 估計。
要點總覽
- EV = (贖回金 − 成本 − 手續費) × 成交機率 − 來自部分成交與結算時序的下行風險。
- 必須納入 taker 手續費與預期部分成交率;Polymarket 的 maker 手續費為零,只有在你掛被動流動性時才相關。
- 對於小尺寸,使用簡單的機率模型(Bernoulli 或二項分配)來模擬部分成交;當執行跨多個價格層時,放大模型或分片處理。
- 千萬不要將套利交易稱為「無條件的無風險」——務必列出解析風險、滑點、手續費、UMA 爭議與智能合約或時序風險。
1. 預測市場仲裁的 EV 基礎
從基本原理出發。完整且成功的套利(買入一套完整的結果代幣)花費 C(即各腿以 best-ask 買入的總和加上任何 taker 手續費),並在解析後每套最終可贖回為 $1.00。名義 edge 為:
Edge = 1.00 − C
在扣除手續費與執行風險前的預期值就是每套的 Edge。對實務交易你必須把它轉成 EV(期望金額收益),考慮手續費、報價成交的機率,以及可能的部分成交。
EV_basic = Edge × FillProbability − Fees_expected
下面章節會細化 FillProbability 與 Fees_expected 的估算。
2. 納入 taker 手續費與結算流程
在 Polymarket 上 taker 手續費依分類而異,目前介於 0% 到 1.8% 之間;maker 手續費為零。對套利而言,通常對跨價差執行的已成交腿支付 taker 手續費。
當你買入 N 個結果(在多選市場是一整套,在二元則為 YES 與 NO 兩腿),計算毛成本:
C_gross = Σ bestAsk_i
Taker 手續費以基點或百分比表示。若 fee_rate 為 taker 手續費(十進位),則手續費約為:
Fees = fee_rate × C_gross
若某些腿以 maker 方式成交(對於緊密套利較少見),它們的手續費為零;可透過把 C_gross 分成 maker 與 taker 部分來建模。
淨成本 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 高於第一層 best ask 的總和。
對於小訂單,一個簡單且有用的模型是以每腿在顯示 best ask 的 Bernoulli 全成機率來模擬。對較大尺寸,可以把成交視為二項分配或把量切成確定性的片段跨層價格執行。
計算中使用的符號:
- q_i = 對腿 i 的預期數量(以 outcome 股數計)
- 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](針對 taker 已成交部分)
但部分成交會產生非對稱的剩餘部位。保守的常見做法是假設任何剩餘的單一結果部位必須立即以較差的 mid/ask 價格平倉,並把該平倉的預期損失納入 EV。
例如,如果你原本預期買入一整套,但平均上 NO 只成交 90%,你會多持有 10% 的 YES,且你為這些 YES 支付的價格為 p_yes。最壞情況的剩餘損失大約為 0.90 × (p_yes − mid_unwind_price)(需考慮 tick size 與手續費)。把預期的剩餘損失項 L_residual 加入 EV。
4. 你可以實作的逐步 EV 公式
定義:
- n = 一套結果的項目數(binary 時 n=2)
- ask_i = 第 i 項結果的 best ask 價格(美元)
- q = 目標完整套數(股數;例如 10 套)
- fee = taker 手續費率(十進位,例如 0.006 代表 0.6%)
- r_i = 對腿 i 的預期成交比例(0..1)。要取全額成交機率時,設 r_i = 1.0。
- p_unwind_i = 預期你可用於平掉任何剩餘部位的價格(保守作法:使用當前較差的 ask 或 mid)
計算:
- E[C_gross] = Σ_i ask_i × q × r_i
- E[Fees] = fee × E[C_gross]
- E[C_net] = E[C_gross] + E[Fees]
- 完整套在可贖回時的期望贖回金 = q × 1.00 × P_redeem (P_redeem 為最終可贖回的機率;在沒有 UMA 爭議時通常為 1.0 — 但下方會將爭議風險考量進來)
- 預期剩餘損失 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. 實作範例(二元)— 可執行且保守
假設一個小型二元套利,你打算透過各自的 best-ask 買入 YES 與 NO,目標買入 100 套。僅以數字示範;手續費仍在文件範圍內。
- ask_YES = $0.49
- ask_NO = $0.50
- q = 100 套
- fee = 0.006(0.6% taker 手續費)
- 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 個,因此相當於剩下 5 個 YES 沒有配對——若你為這些 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 小,交易仍為正 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 值(使用較差的 ask 或 mid),並根據你在該尺寸上的歷史成交率設定 r。
7. 實盤交易的實用建議
- 量化每個合約與每個尺寸的經驗成交率。使用短期且頻繁的量測窗口;市場微結構會隨市場而異。
- 把大型目標量分切成較小片段以降低部分成交風險,並避開 Builder 或 Relayer 的限額(如適用)。
- 考慮 tick-size 的行為:當價格接近極端時,tick size 會收窄至 $0.001,這會改變 unwind 的滑點。
- 在 P_redeem 中納入 UMA 爭議與結算時序風險。爭議會暫停結算並影響機會成本。
- 遵守地理限制:市場會以 IP 進行地理封鎖;切勿建議使用 VPN 覆蓋。
這如何影響你的交易
在下單前先計算每套 EV,並把它與你內部的最低可接受 EV 做比較,該最低值應已包含資本成本、被鎖定 pUSD 的機會成本,以及可能的爭議延遲成本。在小額且頻繁的套利中,你通常會要求在扣除手續費與預期剩餘損失後每套仍保有適度的正 EV,才能證明營運開銷是合理的。
結語與主要關鍵字:expected value Polymarket arbitrage 應始終以保守方式計算,明確將 taker 手續費與部分成交機率納入模型。
常見問題
我該如何為較大訂單建模部分成交機率?
以你交易尺寸的經驗成交率為起點。對小片段使用 Bernoulli 的假設;對較大尺寸,將成交建模為跨價格層的二項和,或使用歷史深度檔來確定性地切片你的委託。估計 r_i 時務必保守。
在 EV 計算中我應該包含哪些手續費?
包含已成交腿的 taker 手續費 — Polymarket 的 taker 手續費依分類介於 0% 到 1.8%;maker 手續費為零。將手續費建模為 fee_rate × 已執行成本,並在適用時把已執行成本拆分為 maker / taker 部分。
我需要在 EV 中考慮 UMA 爭議嗎?
需要。UMA 爭議可能暫停結算或改變時序。使用 P_redeem ≤ 1.0 來反映爭議機率與結算延遲所造成的時間價值/成本。
如果我預期稍後會再平倉,能忽略剩餘的 unwind 損失嗎?
不能。剩餘部位會帶來市場與方向性風險。除非你有文件化且統計上證明的再平倉計畫與已知成本,否則在 EV 模型中納入保守的平倉價格(p_unwind)。
名義 edge 與 EV 一樣嗎?
不一樣。名義 edge = 1.00 − Σ bestAsk_i。EV 會根據 taker 手續費、部分成交機率、剩餘平倉損失與結算/爭議風險來調整該 edge。以 EV 作為決策依據。
參考術語
相關指南
僅作教育用途。非財務、法律或稅務建議。Polymarket 可能在你的司法管轄區無法使用。