2026年10月24日的範例中,價格 0.88 表示隱含機率為 88.0%。當一個問題所有結果的原始價格之和大於 1 時,把每個價格除以它們的總和。
使用 API
在2026年10月24日的範例中,平台價格遵循的慣例是:每個結果的報價介於 0 到 1 之間,單位是每 1 美元賠付對應的美元數。因此價格就是該結果的原始隱含機率。正規化要把這些價格放在一起使用,因為總和對應的是同一個問題的所有結果。
Narwhal 為每個結果回傳一個已在各平台間綜合的 probability,每個平台還有自己的 quotes。做任何計算之前,先確定你需要哪個欄位:回傳的機率可以直接讀取,而原始結果價格則用 Python 範例中的換算。REST 與 MCP 共用同一組 API 金鑰,所以使用你 Narwhal 帳戶中的金鑰即可。
- 取得你的 API 金鑰 取得一組免費金鑰,並存放在名為
NARWHAL_API_KEY的環境變數中。傳送請求時,把金鑰放在Authorization: Bearer YOUR_KEY標頭裡。 - 讀取問題 針對聯準會2026年10月28日的決議,請使用
https://api.narwhalapi.com上的GET /v1/predictions/scalar/usa-fed-2026-10。綜合結果讀取各結果的probability,想看平台自己的價格時則讀取其quotes。 - 讀取賠率時附上日期 每個快照都帶有
as_of。2026 年 10 月 24 日的快照,其as_of為2026-10-24T00:00:00Z;請在從中取得的任何數字旁保留該日期。 - 需要時對原始價格做正規化 對於2026年10月24日的範例原始價格,先把同一問題所有結果的價格相加,再把每個價格除以這個總和。從原始價格出發時使用這個計算;Narwhal 回傳的
probability值之和已經是 1。# 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%。請選擇與你的報價格式相符的函式,並把回傳值表示為百分比。
美式賠率函式接收帶符號的報價,所以請保留其正負號。對於負的報價,函式在除法中使用它的絕對值。分數賠率函式分別接收分子和分母,請依分數賠率的順序傳入。
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.05 | 5.0% | 0.05 / 1.03 | 4.9% |
| 利率不變 | 0.88 | 88.0% | 0.88 / 1.03 | 85.4% |
| 升息 | 0.10 | 10.0% | 0.10 / 1.03 | 9.7% |
發布於 。