預測市場 賠率 轉機率的計算方法(含試算表)

2026年10月24日的範例中,價格 0.88 表示隱含機率為 88.0%。當一個問題所有結果的原始價格之和大於 1 時,把每個價格除以它們的總和。

使用 API

在2026年10月24日的範例中,平台價格遵循的慣例是:每個結果的報價介於 0 到 1 之間,單位是每 1 美元賠付對應的美元數。因此價格就是該結果的原始隱含機率。正規化要把這些價格放在一起使用,因為總和對應的是同一個問題的所有結果。

Narwhal 為每個結果回傳一個已在各平台間綜合的 probability,每個平台還有自己的 quotes。做任何計算之前,先確定你需要哪個欄位:回傳的機率可以直接讀取,而原始結果價格則用 Python 範例中的換算。REST 與 MCP 共用同一組 API 金鑰,所以使用你 Narwhal 帳戶中的金鑰即可。

  1. 取得你的 API 金鑰 取得一組免費金鑰,並存放在名為 NARWHAL_API_KEY 的環境變數中。傳送請求時,把金鑰放在 Authorization: Bearer YOUR_KEY 標頭裡。
  2. 讀取問題 針對聯準會2026年10月28日的決議,請使用 https://api.narwhalapi.com 上的 GET /v1/predictions/scalar/usa-fed-2026-10。綜合結果讀取各結果的 probability,想看平台自己的價格時則讀取其 quotes。
  3. 讀取賠率時附上日期 每個快照都帶有 as_of。2026 年 10 月 24 日的快照,其 as_of 為 2026-10-24T00:00:00Z;請在從中取得的任何數字旁保留該日期。
  4. 需要時對原始價格做正規化 對於2026年10月24日的範例原始價格,先把同一問題所有結果的價格相加,再把每個價格除以這個總和。從原始價格出發時使用這個計算;Narwhal 回傳的 probability 值之和已經是 1。
    Python:從原始價格到機率
    # A venue quotes each outcome as a price between 0 and 1 (cents on the dollar).
    # Narwhal returns the probabilities already
    # normalised, but if you start from raw prices you remove the overround yourself.
    yes_prices = {"cut": 0.05, "hold": 0.88, "hike": 0.10}  # example raw prices, sum 1.03
    total = sum(yes_prices.values())
    for outcome, price in yes_prices.items():
        print(
            f"{outcome:5} price {price:.2f}  implied {price:.1%}  "
            f"normalised {price / total:.1%}"
        )
    print("overround", round(total - 1, 2))

使用試算表或不寫程式的方式

把同一問題所有結果的原始價格放進試算表。對於2026年10月24日的範例,價格放在 B2:B4,並在第一個價格旁輸入 =B2/SUM($B$2:$B$4)。把公式複製到其餘價格旁,並將結果設為百分比格式。

貨幣符號能讓公式複製時,總和始終固定在同一個範圍。每一列用自己的價格作分子,用全部結果的價格作分母。正規化使用整個問題的總和,所以該範圍要包含所有結果。

如果只想讀一個問題而不做計算,請開啟 Narwhal 預測頁面,那裡直接顯示機率。當你手上是一組原始價格,想在原始報價旁邊看到每一步除法的結果時,就用試算表。

各種情況適合的方式

情況最適合的方式原因
在應用程式中查看單一問題讀取 API 給出的機率已經做過正規化
來自其他來源的原始價格把每個價格除以總和這樣就去除了超額部分(overround)
小數、分數或美式賠率先用公式換算,再正規化換算得到的是原始隱含機率

小數、分數和美式賠率

先選與賠率表示方式對應的公式。小數賠率 d 的隱含機率是 1/d。分數賠率 a/b 用 b/(a+b)。正的美式賠率 +X 用 100/(X+100),負的美式賠率 -X 用 X/(X+100),其中 X 是所報數字的絕對值。

在這些2026年10月24日的範例中,小數賠率 2.50、分數賠率 3/2 和美式賠率 +150 都表示 40.0% 的隱含機率;美式賠率 -200 表示 66.7%。請選擇與你的報價格式相符的函式,並把回傳值表示為百分比。

美式賠率函式接收帶符號的報價,所以請保留其正負號。對於負的報價,函式在除法中使用它的絕對值。分數賠率函式分別接收分子和分母,請依分數賠率的順序傳入。

Python:從各種賠率格式到機率
def from_decimal(d):          # decimal odds, e.g. 2.50
    return 1 / d

def from_fractional(a, b):    # fractional odds a/b, e.g. 3/2
    return b / (a + b)

def from_american(x):         # American odds, e.g. +150 or -200
    return 100 / (x + 100) if x > 0 else -x / (-x + 100)

print(f"decimal 2.50   -> {from_decimal(2.50):.1%}")
print(f"fractional 3/2 -> {from_fractional(3, 2):.1%}")
print(f"American +150  -> {from_american(150):.1%}")
print(f"American -200  -> {from_american(-200):.1%}")

這些公式是逐個換算報價的。如果你有同一市場所有結果的賠率,就把它們的原始隱含機率相加,再把每一個除以這個總和。改變報價格式並不會去除超額部分,所以換算與正規化是兩個獨立的計算。

為什麼價格之和會超過 100.0%?

價差與費用可能使買入每個結果的最優價格之和略高於全額賠付,這個多出來的部分就是超額部分(overround)。把每個原始價格除以所有結果的總和即可去除它,並把各結果表示為一組正規化的機率。

價格就是預測嗎?

它是交易者願意付出的價格,是市場隱含的機率,而不是保證。

需要再對 Narwhal 的數字做一次正規化嗎?

不需要。回傳的 probability 值之和已經是 1。需要某個問題的綜合機率時,直接讀取這些值即可。原始價格的計算只適用於原始報價,不要把回傳的機率當成仍含超額部分的價格。

計算範例:換算原始結果價格

本範例中的數字來自2026年10月24日。

例如,原始價格為降息 0.05、維持不變 0.88、升息 0.10。相加得 1.03。用這個總和減去全額賠付 1,超額部分(overround)為 0.03,即 3 個百分點。

把每個價格除以 1.03,得到它在總和中的占比。原始隱含機率的百分比直接來自價格,正規化後的百分比則使用這個共同的分母。所有結果都要使用同一個分母,這樣計算才包含全部價格。

結果原始價格原始隱含機率計算正規化後的機率
降息0.055.0%0.05 / 1.034.9%
利率不變0.8888.0%0.88 / 1.0385.4%
升息0.1010.0%0.10 / 1.039.7%

發布於 。

後續步驟