newsence
來源篩選

Designing Prediction Markets

Lesswrong

This article explores the design of prediction markets, comparing Central Limit Order Books (CLOBs) with the role of market makers in providing liquidity and determining fair share prices.

newsence

設計預測市場

Lesswrong
17 天前

AI 生成摘要

這篇文章探討了預測市場的設計,比較了中央限額訂單簿(CLOB)與做市商在提供流動性及確定公平股票價格方面所扮演的角色。

前提條件:對預測市場的基本概念有初步了解

所以你想運行一個預測市場。你需要一種讓參與者交易份額(shares)的方式。你有什麼選擇?

CLOB 與市場

如果你要從零開始建立一個預測市場,你可能會想到中央限價訂單簿 (Central Limit Order Book, CLOB)。交易者發布「買入」和「賣出」訂單,說明他們願意買賣的內容及價格,而你將這些訂單記錄在你的帳本中。

  • Alice 發布:「我願以每股 $0.60 買入 20 股 YES」
  • Bob 發布:「我願以每股 $0.65 賣出 25 股 YES」
  • Carol 發布:「我願以每股 $0.61 買入 10 股 YES」

當有人想要交易,且不想等待別人來履行他們的訂單時,你會將他們與當前最優的報價進行撮合。這非常直觀。

這種系統直接出現在 Hypixel Skyblock 和其他 MMO 遊戲中。Bazaar(市集)讓你可以發布訂單並等待,或者立即履行現有訂單。有「附魔鐵」要賣嗎?你可以掛單 540 金幣並等待買家,或者以 470 金幣履行最高買單來立即售出。

最高買價(bid)與最低賣價(ask)之間的差距被稱為買賣價差 (bid-ask spread)

做市商登場

CLOB 運作良好,但有一個問題:它需要有人積極地在兩側發布訂單。如果沒人掛單,市場就無法運作。當交易者不活躍時,價差也會變得非常大,導致交易成本高昂。

這就是做市商 (market makers) 發揮作用的地方。做市商持續發布買單和賣單,確保市場上總有人可以進行交易。

做市商透過維持買賣價之間的差距來獲利。例如:

  • 他們以 $0.60 買入 YES 份額
  • 以 $0.65 賣出 YES 份額
  • 每當一個人向他們買入 YES,而另一個人向他們賣出 YES 時,他們就賺取了 $0.05 的差價。

這被稱為跨越價差 (crossing the spread)。做市商為市場提供流動性,並透過價差獲得補償。在傳統金融中,像 Citadel Securities 這樣的公司靠著這樣做賺取數十億美元。在 Hypixel Skyblock 中,這種策略被稱為「Bazaar 翻炒 (bazaar flipping)」。

份額定價

做市商如何為其份額定價?在現有市場中,他們只需查看現有的價格圖表即可決定價格,但在預測市場中這並不太可行。因此,我們需要某種方法來確定份額的公平價格。

為了簡化,讓我們忽略獲利。我們假設有人向我們的做市商(我們稱他為 Duncan)支付固定費用來提供這項服務,而他在一個完全有效的市場中運作,買賣價差為 0。

Duncan 持有一些 YES 和 NO 份額的庫存,人們可以與他交易。Duncan 該如何定價?審視這個問題,我們可以看到一些關鍵約束:

  • 價格總和應為 $1:如果當市場結果為 YES 時,一股 YES 支付 $1;而當結果為 NO 時,一股 NO 支付 $1,那麼一股 YES 和一股 NO 的價格加起來必須正好是 $1,因為市場最終只能結算為這兩種選項之一。
  • 價格等於機率:如果 YES 份額價值 $0.70,這意味著市場認為結果為 YES 的機率是 70%,因為這就是期望價值的運作方式。這是預測市場運作的核心機制,即使你還不知道市場實現的細節,你也應該已經知道這一點。

創建新份額

Duncan 需要有發行份額的能力。否則,他會用完份額,無法再進行交易。(不,他不能只根據供應量反向提高份額價格,因為他同時銷售 YES 和 NO 份額,這會違反「價格總和必須為 $1」的約束。)

幸運的是,發行新份額非常容易。由於 YES 和 NO 的總和為 1,Duncan 每從交易者那裡收到一美元,他就可以鑄造一對 YES 和 NO 份額。當市場結算時,他將向獲勝份額的持有者支付 $1,完全覆蓋了他的義務。

由此我們可以推斷,任何有效的公式必須具備某些特性:購買 YES 必須提高 P(YES);機率必須取決於庫存比例(當 Duncan 持有大量 NO 時,機率很高,因為這意味著他賣出了大量 YES);且 YES 份額應始終低於 $1(除非市場處於 100% 狀態),反之亦然。由於 0 和 1 不是機率,這種情況永遠不應該發生。

一個自然的機率公式

考慮到這些約束,你可能會想到這個公式,用 Duncan 的庫存來推導機率(以及 YES 和 NO 的價格):

$$P(YES) = \frac{n}{y+n}$$

其中 $y$ 是 Duncan 的 YES 庫存,$n$ 是 Duncan 的 NO 庫存。

  • 當 $y=n$ 時(例如市場初始化時),機率為 50%。
  • 如果 Duncan 的 YES 份額完全耗盡,機率為 1,這意味著你無法再透過購買 YES 獲利,且你可以免費購買 NO。
  • 如果 Duncan 的 NO 份額完全耗盡,機率為 0。

這個公式似乎滿足了我們所有的要求,而且相當直觀。既然 P(YES) 就是 YES 的價格,我們現在知道如何定價了。

離散份額的問題

如果 Duncan 有 50 股 YES 和 50 股 NO,機率是 50%,所以每股成本為 $0.50。

你給 Duncan $1,告訴他你想買 YES。

  • YES 成本為 $0.50,所以 $1 可以買 2 股 YES。
  • 他鑄造了 1 股 YES + 1 股 NO(庫存變為:51 YES, 51 NO)。
  • Duncan 給你 2 股 YES 作為交換(庫存變為:49 YES, 51 NO)。
  • 新機率:$51 / (49+51) = 51%$。

另一個例子。Duncan 有 100 股 YES 和 50 股 NO:

  • 機率:$50 / 150 = 33.33%$。
  • 每股 YES 價格:$0.33。
  • 你的 $1 買到 3 股 YES。
  • 他鑄造了價值 $1 的份額(庫存變為:101 YES, 51 NO)。
  • 他還給你 3 股 YES:(庫存變為:98 YES, 51 NO)。
  • 新機率:$51 / 149 = 34.23%$。

你可能已經注意到問題了:Duncan 沒有考慮到「購買行為本身」如何影響價格。

當你一次購買多股時,你是以初始價格買入全部,但你買的每一股都應該比前一股更貴!你在大宗購買中獲得了折扣!

Duncan 可以透過一次只賣一股,甚至一次只賣極小部分的份額,並在每次無限小的銷售後調整價格來解決這個問題。但這在計算上很昂貴,且假設份額是離散單位而非無限可分的。

為了得到一個連續方程式,我們需要使用微積分並解一個微分方程。

做市商的微積分

(警告:包含微分方程)

讓我們將問題形式化。假設 Duncan 開始時有 $y_s$ 股 YES 和 $n_s$ 股 NO。你存入 $m$ 美元並向 Duncan 購買 YES。

交易後:

  • Duncan 鑄造了 $m$ 股每種類型的新份額。
  • NO 庫存:$n = n_s + m$
  • YES 庫存:$y = y_s + m - sold$

其中 "sold" 是 Duncan 給予交易者的 YES 份額數量。(在此背景下,$s$ 代表 "starting" 初始值。)

任何時間點的市場機率為:

$$P = \frac{n}{y+n}$$

代入我們的庫存公式:

$$P = \frac{n_s + m}{(y_s + m - sold) + (n_s + m)} = \frac{n_s + m}{y_s + 2m + n_s - sold}$$

既然我們遵循價格等於機率的約束,Duncan 賣給你份額的速率是由當前機率決定的。

交易者以速率 $dm$ 存入資金,並以速率 $d(sold)$ 接收份額。每邊際份額的價格是 $dm / d(sold)$。既然我們希望價格等於機率,我們得到:

$$\frac{dm}{d(sold)} = \frac{n_s + m}{y_s + 2m + n_s - sold}$$

由於我們以金錢作為輸入,我們取倒數:

$$\frac{d(sold)}{dm} = \frac{y_s + 2m + n_s - sold}{n_s + m}$$

這是我們的初始微分方程。我鼓勵你嘗試自己解開它,但如果你不懂微積分或卡住了,解法如下:

$$\frac{d(sold)}{dm} = \frac{y_s + 2m + n_s}{n_s + m} - \frac{sold}{n_s + m}$$

$$\frac{sold}{n_s + m} + \frac{d(sold)}{dm} = \frac{y_s + 2m + n_s}{n_s + m}$$

兩邊同乘以 $(n_s + m)$:

$$sold + \frac{d(sold)}{dm} \cdot (n_s + m) = y_s + 2m + n_s$$

$$\int (sold + \frac{d(sold)}{dm} \cdot (n_s + m)) \cdot dm = \int (y_s + 2m + n_s) \cdot dm$$

觀察到 $\frac{d}{dm} sold = \frac{d(sold)}{dm}$ 且 $\frac{d}{dm} (n_s + m) = 1$。根據乘法法則(Product Rule):

$$sold \cdot (n_s + m) = m y_s + m^2 + m n_s + C$$

$$sold = \frac{m(y_s + m + n_s) + C}{n_s + m}$$

$$sold = m + \frac{m y_s + C}{n_s + m}$$

$sold(0) = 0$,因為如果你不花錢,就拿不到份額。如果代入 $m=0, sold=0$ 並解 $C$,得到 $C=0$,所以我們可以去掉那一項。

$$sold = m + \frac{m y_s}{n_s + m}$$

既然 $n$ 就是 $n_s + m$,而 $y$ 是 $y_s + m - sold$,我們得到:

$$y = y_s + m - (m + \frac{m y_s}{n_s + m})$$

$$y = y_s - \frac{m y_s}{n_s + m}$$

你可能會注意到 $n_s + m$ 出現在 $y$ 的分母中,且等於 $n$。如果你將 $y$ 和 $n$ 相乘:

$$y \cdot n = (y_s - \frac{m y_s}{n_s + m}) \cdot (n_s + m)$$
$$y \cdot n = y_s(n_s + m) - m y_s = y_s n_s + m y_s - m y_s$$

$$y \cdot n = y_s n_s$$

無論交易如何進行,Duncan 的 YES 和 NO 份額的乘積保持不變!^()

恆定乘積做市商

因此,我們發現了基本的不變量:

$$y \cdot n = k$$

其中 $k$ 是由 Duncan 初始庫存決定的常數。因為 YES * NO 始終為常數,我們稱之為恆定乘積做市商 (Constant Product Market Maker, CPMM)

所以 Duncan 知道了這一點,確定了一個份額定價算法:

  • 從交易者那裡接收資金
  • 鑄造 YES 和 NO 份額
  • 給出足夠數量的 YES 份額(或 NO 份額,取決於交易者想要什麼),以維持恆定乘積 $y \cdot n = k$

這是一個實際操作的例子:

  • Duncan 開始時以 $50 的流動性初始化市場。(初始庫存:50 YES, 50 NO)
  • 他算出他的恆定乘積,這必須保持不變。$k = 50 \cdot 50 = 2500$
  • 你在 YES 上投注 $50。Duncan 用這筆錢鑄造更多份額。(庫存:100 YES, 100 NO)
  • 他現在需要支付足夠的 YES 份額,使他再次達到恆定乘積。$y \cdot n = k$,解 $y$。
  • $y = k / n$
  • 代入 NO 和 $k$。$y = 2500 / 100 = 25$
  • 他原本有 100 股 YES,現在需要剩下 25 股 YES,所以他給你 75 股 YES 以換取你的 $50。(庫存:25 YES, 100 NO)
  • 新機率為 $n / (y+n) = 100 / (25+100) = 80%$。

同時,如果交易者想賣出份額,過程同樣簡單:他將份額加入庫存,計算出他需要放棄多少對 YES + NO 份額才能達到恆定乘積,然後將這些份額對兌換成現金給交易者,並將份額從流通中移除。或者,更優雅的做法是,交易者只需購買相反的份額,然後將成對的份額交給 Duncan 換取現金。

(注意,由於 Duncan 的庫存與市場機率呈反比,這意味著當市場結果出乎意料時,Duncan 會從交易者那裡賺到很多錢;而市場對正確結果越有信心,他損失的初始流動性就越多。)

事實上,這個過程可以完全自動化,形成自動做市商 (Automated Market Maker, AMM)。這是 Uniswap 以及許多預測市場協議的基礎。

結論

從預測市場的基本約束(價格總和為 1,價格等於機率)出發,我們推導出了一個唯一的解決方案。我們並非從一堆選項中隨意選擇了 CPMM。它是從我們設定的要求中必然產生的。

當你用正確的約束條件將問題形式化時,通常只有一個正確答案。獨立的研究人員在面對相似的問題和約束時,會匯聚到相同的解決方案。當牛頓和萊布尼茲發明微積分時,他們得到相似的結果並非因為他們分享了工作,或因為他們在研究同一個問題(他們當時在非常不同的領域工作)。他們得到相似結果是因為他們在研究一具有相同底層結構的問題,即使這些相似之處起初並不明顯。

市場本身就在進行貝氏更新(Bayesian updating)——在預期中,隨著更多人交易,機率會根據交易者的累積知識趨向於真實的可能性。我們的定價機制必須尊重這種貝氏結構。恆定乘積公式並非隨意設定;它是當你在連續條件下正確地將「每邊際份額應以當前機率定價」形式化後得到的結果。雖然這不是關於現實領土的經驗事實,但機率法則依然在設計空間中刻畫出了一個獨特的形狀,而你的地圖最好能與之匹配。^()

(這在預測市場的背景下尤為明顯(預測市場在某種意義上是市場的最純粹形式,將信息的交易與聚合與其他一切分離開來),但它也適用於更廣泛的市場和 AMM,並被廣泛應用於 DeFi 和加密貨幣領域。)


  • [blocked][1]:如果你不懂微積分,這是最重要的部分。
  • [blocked][2]:好吧,我這裡完全誇大了我的論點,這幾段很大程度上是在開玩笑。如果你選擇匹配這些要求的不同機率函數,或者從不同的案例切入預測市場設計,這個問題還有其他解決方案,其中許多都有各自的優缺點。Hanson 曾明確寫過關於「恆定函數做市商」的文章。只是這一個非常直觀,且對於純粹的機率性 YES/NO 市場具有非常有用的特性,這就是我寫它的原因。