市場オッズを入力として使うには、政策金利パスを定期的に読み取り、後の予想変動幅から前の予想変動幅を引きます。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 とともに会合1件につき1行で保存し、4つの確率と変動のフィールドは Decimal 値のまま保持してください。
過去の日の同じパスを読む
履歴エンドポイントは1日につき1つのスナップショットを返します。start と end はどちらも必須で、日時の値なので、2026-10-26 だけでは拒否され、2026-10-26T00:00:00Z なら受け付けられます。期間は最大366日です。このリクエストは2026年10月26日から11月2日までを取得し、以下のレスポンスは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 には日付ごとに1件のエントリがあり、各エントリにはその日にまだ開催前だった会合が、ライブのパスと同じ確率フィールドとともに入っています。meeting_dates は各会合の resolves_at を1回ずつ示します。
2回の読み取りの間の変化を計算する
予想変動幅の変化は、同じ会合について、後の expected_change_bps から前の expected_change_bps を引いたものです。読み取りは位置ではなく event_id で対応づけてください。2026年10月26日の最初の行は10月の会合 usa-fed-2026-10 ですが、2026年11月2日までにその会合は決定済みなので、最初の行は12月の会合になります。スクリプトは Decimal で引き算を行い、続けて2回のライブポーリングの間でも同じ計算を繰り返します。
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 |
2分間隔で行った2回のライブポーリングでは、両方の会合で +0.0 bps と出力されました。変化がゼロというのも有効な読み取り結果です。これは、このフィールドが持つ小数第1位では気配値が動かなかったことを意味します。変化が負なら予想される動きが利下げ方向に、正なら利上げ方向にずれたことを示します。フィールドの値自体が0を下回っている場合、市場はその会合での利下げを見込んでいます。
数値を使う前に確認すること
- 会合ごとの値どうしを比較してください。12月の会合について、10月26日から11月2日までの累積変化は -2.7 bps ですが、会合ごとの変化は -1.0 bps です。その間に10月の会合が決定され、その 1.7 bps が累計から外れたためです。
expected_change_bpsは小数第1位まで持つため、0.1 bps より小さい変化は現れません。- 各読み取りの
as_ofを確認してください。as_ofが同じ2つの読み取りは、同じ取引所の確認から得られたものです。 - 価格が付いた会合がない中央銀行では、
meetingsリストが空で返ります。 - これらの数値は市場の気配値です。その変化が何かを予測するかどうかについて Narwhal は何も述べておらず、このページもそうだとは主張しません。
ポーリングの代わりにアラートを受け取れますか。
はい。予測市場の確率が動いたときにアラートを受け取るガイドでその方法を説明しています。上のように定期実行しているスクリプトにはポーリングが向き、通知を受けたいしきい値がある場合にはアラートが向いています。
過去の読み取り結果をストアに初期投入するにはどうしますか。
履歴エンドポイントを最大366日ずつの期間で呼び出し、days の各エントリを、その date の日付を持つ読み取りとして読み込みます。続いて、政策金利パスからのライブポーリングを追加します。2つのソースは同じ確率と変動のフィールドを持つので、つなぎ目をまたいで比較できます。日次スナップショットは日付ごとに1つなので、2つのスナップショットの間に行ったポーリングには、比較できる履歴の行がありません。
2日間で最初の会合が変わったのはなぜですか。
パスには、まだ開催前の会合だけが並びます。連邦準備制度が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 にも応答します。1つの会合を詳しく読む方法は、中央銀行の金利決定の確率を参照してください。
公開。