要把市場機率用作輸入,需要按排程讀取政策利率路徑,並用較晚的預期變動減去較早的預期變動。Narwhal 為每次會議提供 expected_change_bps,既有即時數據,也有每日歷史。
輪詢政策利率路徑
這裡的訊號是市場所隱含的央行政策利率變動。政策利率路徑會為每一次即將召開的會議回傳該值。下面的請求讀取聯準會,並只保留第一次會議。
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve"{
"as_of": "2026-11-03T02:28:00Z",
"meetings": [
{
"event_id": "usa-fed-2026-12",
"p_cut": "0.0097",
"p_hold": "0.2534",
"p_hike": "0.7369",
"expected_change_bps": "18.6",
"cumulative_change_bps": "18.6",
"resolves_at": "2026-12-09T19:00:00Z"
}
]
}expected_change_bps 是該次會議上政策利率變動經機率加權後的值,單位為基點。它表示的是變動量,絕不是目前利率。cumulative_change_bps 按順序累加清單中的各次會議。p_cut、p_hold 和 p_hike 是其背後的機率,as_of 是報價的時間。請輪詢該端點,並連同 as_of 儲存每次讀數,每次會議一列,四個機率與變動欄位保存為 Decimal 值。
讀取過去幾天的同一路徑
歷史端點每天回傳一份快照。start 和 end 都是必填項,且為日期時間值,所以只寫 2026-10-26 會被拒絕,而 2026-10-26T00:00:00Z 則被接受。時間範圍最長為 366 天。下面的請求查詢 2026 年 10 月 26 日至 11 月 2 日,下方回應只保留其中兩天以及每天的第一次會議。
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
"https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve/history?start=2026-10-26T00:00:00Z&end=2026-11-03T00:00:00Z"{
"meeting_dates": [
{
"event_id": "usa-fed-2026-10",
"resolves_at": "2026-10-28T18:00:00Z"
},
{
"event_id": "usa-fed-2026-12",
"resolves_at": "2026-12-09T19:00:00Z"
}
],
"days": [
{
"date": "2026-11-01",
"meetings": [
{
"event_id": "usa-fed-2026-12",
"p_cut": "0.0093",
"p_hold": "0.2766",
"p_hike": "0.7141",
"expected_change_bps": "17.9",
"cumulative_change_bps": "17.9"
}
]
},
{
"date": "2026-11-02",
"meetings": [
{
"event_id": "usa-fed-2026-12",
"p_cut": "0.0098",
"p_hold": "0.2535",
"p_hike": "0.7367",
"expected_change_bps": "18.5",
"cumulative_change_bps": "18.5"
}
]
}
]
}days 中每個日期對應一個項目,每個項目包含當天仍未結束的會議,機率欄位與即時路徑相同。meeting_dates 只給出每次會議的 resolves_at 一次。
計算兩次讀數之間的變化
預期變動的變化量,就是同一次會議較晚的 expected_change_bps 減去較早的 expected_change_bps。請按 event_id 而不是按位置來比對讀數。2026 年 10 月 26 日的第一列是 10 月會議 usa-fed-2026-10,而到 2026 年 11 月 2 日,這次會議已經有了結果,所以第一列變成了 12 月會議。腳本用 Decimal 做減法,然後在兩次即時輪詢之間重複同樣的計算。
import json
import os
import time
import urllib.request
from decimal import Decimal
def get(path):
req = urllib.request.Request(
"https://api.narwhalapi.com" + path,
headers={"Authorization": "Bearer " + os.environ["NARWHAL_API_KEY"]},
)
with urllib.request.urlopen(req, timeout=30) as r:
return json.load(r)
def reading(meetings):
return {m["event_id"]: (Decimal(m["expected_change_bps"]), Decimal(m["cumulative_change_bps"]))
for m in meetings}
def change(before, after):
# Match meetings by event_id: the first row is a different meeting once a decision has passed.
return {e: (after[e][0] - before[e][0], after[e][1] - before[e][1])
for e in before if e in after}
path = "/v1/predictions/policy-paths/federal-reserve/history"
days = get(path + "?start=2026-10-26T00:00:00Z&end=2026-11-03T00:00:00Z")["days"]
first, last = days[0], days[-1]
print(first["date"], "->", last["date"])
for event_id, (move, cumulative) in list(change(reading(first["meetings"]),
reading(last["meetings"])).items())[:4]:
print(event_id, f"{move:+} bps at the meeting, {cumulative:+} bps cumulative")
# Polling: take a reading, wait, take another and run the same comparison.
def poll():
return reading(get("/v1/predictions/policy-paths/federal-reserve")["meetings"])
previous = poll()
time.sleep(120)
for event_id, (move, _) in list(change(previous, poll()).items())[:2]:
print(event_id, f"{move:+} bps since the last poll")
| 會議 | 2026 年 10 月 26 日 | 2026 年 11 月 2 日 | 預期變動的變化 |
|---|---|---|---|
usa-fed-2026-12 | 19.5 bps | 18.5 bps | -1.0 bps |
usa-fed-2027-01 | 7.3 bps | 6.1 bps | -1.2 bps |
相隔兩分鐘進行的兩次即時輪詢,對兩次會議都輸出了 +0.0 bps。變化為零也是有效的讀數,它表示報價在該欄位所保留的一位小數上沒有變動。變化為負,表示預期變動向降息方向移動;變化為正,表示向升息方向移動。如果欄位值本身小於零,則表示市場預期該次會議降息。
使用該數值前要檢查什麼
- 請拿各次會議自己的值相互比較。對 12 月會議來說,從 10 月 26 日到 11 月 2 日的累計變化是 -2.7 bps,而單次會議的變化是 -1.0 bps。這是因為 10 月會議在此期間已有結果,它的 1.7 bps 從累計值中去掉了。
expected_change_bps保留一位小數,所以小於 0.1 bps 的變化不會出現。- 請檢查每次讀數的
as_of。as_of相同的兩次讀數來自同一次交易場所檢查。 - 沒有定價會議的央行會回傳空的
meetings清單。 - 這些數字是市場報價。Narwhal 不對這些數字的變化是否預示任何結果作出說明,本頁也不作此類主張。
可以用提醒代替輪詢嗎?
可以。預測機率變動時取得提醒這篇指南介紹了該選項。輪詢適合像上面這樣已按排程執行的腳本,提醒則適合你希望在越過某個門檻時被告知的情境。
如何用過去的讀數為儲存庫預填資料?
以最長 366 天為一個範圍呼叫歷史端點,把 days 中的每個項目作為日期為其 date 的讀數載入。然後再加入來自政策利率路徑的即時輪詢。兩個來源帶有相同的機率和變動欄位,因此比較可以跨越銜接處。每日快照每個日期只有一份,所以兩份快照之間的一次輪詢沒有可供比較的歷史列。
為什麼兩天之間第一次會議變了?
路徑只列出仍未結束的會議。聯準會在 2026 年 10 月 28 日作出決定後,10 月會議就從清單中移除,12 月會議升到了第一列。在歷史回應中,10 月 28 日的項目仍把 10 月會議列在最前,而 10 月 29 日的項目則以 12 月會議開頭。
該路徑涵蓋哪些央行?
該路徑支援 federal-reserve,同一個端點也支援 european-central-bank、bank-of-japan、bank-of-canada 和 reserve-bank-of-australia。想詳細了解如何解讀某一次會議,請參閱央行利率決策機率。
發布於 。