고객과 딜러에게 금리 인하·동결·인상 확률 보여주기

금리 확률 화면에는 세 가지가 필요합니다. 각 회의의 인하, 동결, 인상 확률(%), 그 가격이 형성된 시각, 고객이 정확히 이해할 수 있는 문구입니다. Narwhal은 회의별 확률을 as_of 시각과 함께 반환하며, 이 페이지는 표시 규칙을 설명합니다.

경로를 한 번 가져와 가격이 형성된 시각을 표시하기

금리 확률을 보여주는 제품에는 디자인 이전에 두 가지 문제가 있습니다. 숫자는 계속 움직이므로, 불러올 때는 맞았던 화면이 한 시간 뒤에는 틀릴 수 있습니다. 요청 한 번으로 한 중앙은행의 가격이 매겨진 모든 회의와 호가를 가져온 시각이 반환됩니다. 이 예시는 연방준비제도를 요청하고 처음 두 회의만 남깁니다.

curl, 연방준비제도 정책금리 경로
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/predictions/policy-paths/federal-reserve"
응답, 처음 두 회의
{
  "as_of": "2026-11-03T03:12:00Z",
  "meetings": [
    {
      "event_id": "usa-fed-2026-12",
      "p_cut": "0.0096",
      "p_hold": "0.2533",
      "p_hike": "0.7371",
      "expected_change_bps": "18.6",
      "cumulative_change_bps": "18.6",
      "resolves_at": "2026-12-09T19:00:00Z"
    },
    {
      "event_id": "usa-fed-2027-01",
      "p_cut": "0.0280",
      "p_hold": "0.7055",
      "p_hike": "0.2665",
      "expected_change_bps": "6.0",
      "cumulative_change_bps": "24.6",
      "resolves_at": "2027-01-27T19:00:00Z"
    }
  ]
}

p_cut, p_hold, p_hike는 0과 1 사이의 10진수 문자열이며 회의마다 합이 1입니다. resolves_at은 결정 시각입니다. as_of는 호가를 가져온 시각이며, 화면에 표시할 시각은 서버가 요청을 보낸 시각이 아니라 이 시각입니다.

각 필드를 고객이 정확히 읽는 문장으로 바꾸기

73.71% 같은 수치는 예측처럼 읽힙니다. 화면을 정직하게 유지하는 규칙은 네 가지입니다. 정수 퍼센트로 반올림합니다. 세 수치의 합이 100이 되게 합니다. 트레이더들이 반영하고 있는 확률이라고 부릅니다. 옆에 시각을 표시합니다. 스크립트는 앞의 두 규칙을 적용하고 문장을 만듭니다. 단순한 round는 1월 27일 회의를 27%, 71%, 3%로 보여주어 합이 101이 되므로, 스크립트는 남는 1점을 소수 부분이 가장 큰 수치에 줍니다.

python, 다음 회의들의 표시 문장
import json, os, urllib.request
from datetime import datetime, timezone
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 whole_percent(odds):
    """Round to whole percents that add up to 100 (largest remainder)."""
    raw = {k: v * 100 for k, v in odds.items()}
    out = {k: int(v) for k, v in raw.items()}
    for k in sorted(raw, key=lambda k: raw[k] - out[k], reverse=True)[:100 - sum(out.values())]:
        out[k] += 1
    return out

path = get("/v1/predictions/policy-paths/federal-reserve")
as_of = datetime.fromisoformat(path["as_of"].replace("Z", "+00:00"))
age = int((datetime.now(timezone.utc) - as_of).total_seconds() // 60)
for m in path["meetings"][:3]:
    day = datetime.fromisoformat(m["resolves_at"].replace("Z", "+00:00"))
    p = whole_percent({k: Decimal(m["p_" + k]) for k in ("cut", "hold", "hike")})
    print(f"{day.day} {day:%B}: {p['hike']}% rise, {p['hold']}% no change, {p['cut']}% cut")
print(f"Market prices as of {as_of:%H:%M} UTC, {age} min old")
생산
9 December: 74% rise, 25% no change, 1% cut
27 January: 27% rise, 70% no change, 3% cut
17 March: 50% rise, 44% no change, 6% cut
Market prices as of 03:12 UTC, 0 min old
필드고객용 문구
p_hike금리 인상 확률
p_hold금리 동결 확률
p_cut금리 인하 확률
as_of고객의 시간대로 표시한 가격 기준 시각
expected_change_bps딜링룸용: 시장이 반영하는 평균 변동폭(베이시스포인트)

이 수치는 계약의 가격이므로 시장 확률이라고 적어야 합니다. 「연준은 ~할 것이다」 같은 표현은 피하세요. 딜링룸에는 회의별 평균 변동폭과 누적 합계를 베이시스포인트로 보여주는 expected_change_bps와 cumulative_change_bps가 있습니다.

원하는 주기로 화면 새로 고치기

Narwhal은 요청을 받으면 응답하므로 얼마나 자주 요청할지는 제품이 정합니다. 정한 간격으로 가져와, 마지막으로 성공한 응답을 캐시에 두고 모든 페이지 조회가 그것을 읽게 하세요. 그리기 전에 as_of를 현재 시각과 비교합니다. 스크립트는 경과 시간을 분 단위로 출력하며, 제품은 경과 시간이 사업에서 정한 한도를 넘으면 안내 문구를 표시하거나 카드를 숨길 수 있습니다.

정책금리 경로에는 as_of만 있습니다. 단일 회의는 GET /v1/predictions/scalar/{event_id}가 status와 stale 플래그를 추가로 제공하므로, 확인 단계에서 카드가 아직 유효한지 점검할 수 있습니다. resolves_at이 이미 과거인 행은 제외하세요.

사용자 트래픽이 API에 닿지 않도록 응답을 캐시하세요. 재시도 규칙은 응답 캐시와 429 오류 처리 가이드에 있습니다.

반올림한 확률의 합이 99나 101이 되는 이유는 무엇인가요?

각 수치를 따로 반올림하기 때문입니다. 1월 27일 회의의 반올림 전 확률은 인상 26.65, 동결 70.55, 인하 2.80입니다. 각각 반올림하면 27, 71, 3이 되어 합이 101입니다. 스크립트의 최대 잉여 단계는 부족한 점수를 소수 부분이 큰 수치에 더해 27, 70, 3으로 만듭니다.

화면에서 이를 예측이라고 불러도 되나요?

이 확률은 Kalshi와 Polymarket에서 거래되는 계약의 가격을 확률로 나타낸 것입니다. Narwhal은 예측을 하지 않습니다. 카드는 시장 확률이라고 쓰고, 시각을 표시하고, 계약의 출처를 밝히세요. 규제 대상 상품의 문구에 검토가 필요한지는 각 회사가 판단할 일입니다.

이 화면은 어떤 중앙은행을 다룰 수 있나요?

결정 시장은 GET /v1/predictions/topics?group=central_banks로 조회합니다. 목록에는 연방준비제도, 호주 중앙은행, 일본은행, 인도네시아 중앙은행처럼 은행별 토픽과 다음 회의의 next_event_id가 들어 있습니다. venues 필드는 토픽마다 다릅니다. 인도네시아 중앙은행은 Kalshi만, 연방준비제도는 Kalshi와 Polymarket을 나열합니다. 정책금리 경로는 federal-reserve, european-central-bank, bank-of-japan, bank-of-canada, reserve-bank-of-australia, bank-of-england, bank-indonesia에 대해 응답합니다.

경로에는 회의가 몇 개 들어 있나요?

위 실행에서 연방준비제도 경로에는 2026년 12월부터 2027년까지 8개 회의가 있었고, 각 행에는 고유한 resolves_at이 있습니다. 스크립트는 3개를 보여줍니다. 더 긴 차트라면 모든 행을 그릴 수 있고, cumulative_change_bps는 평균 변동폭의 누적 합계를 제공합니다. 각 필드는 연준 금리 확률 읽는 법 가이드에서 설명합니다.

에 게시되었습니다.

다음 단계