اعرض احتمالات خفض الفائدة وتثبيتها ورفعها للعملاء والمتداولين

يحتاج عرض احتمالات الفائدة إلى ثلاثة أشياء: نسبة مئوية للخفض وعدم التغيير والرفع في كل اجتماع، ووقت تكوّن هذه الأسعار، وصياغة يفهمها العميل فهمًا صحيحًا. يعيد 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 يساوي مجموعها 1 في كل اجتماع. resolves_at هو وقت القرار. as_of هو وقت الأسعار، وهو الوقت الذي يجب عرضه على الشاشة، وليس وقت إرسال خادمك للطلب.

حوّل الحقول إلى جملة يقرؤها العميل قراءة صحيحة

رقم مثل 73.71% يبدو كأنه توقع. أربع قواعد تُبقي الشاشة أمينة. قرّب إلى نسب مئوية صحيحة. اجعل الأرقام الثلاثة مجموعها 100. سمّها ما يسعّره المتداولون. اطبع الوقت بجانبها. يطبّق السكربت القاعدتين الأوليين ويبني السطر. التقريب العادي round كان سيعرض 27% و71% و3% لاجتماع 27 يناير، ومجموعها 101، لذلك يعطي السكربت النقطة الزائدة للرقم صاحب أكبر باقٍ.

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؟

لأن كل رقم يُقرَّب وحده. في اجتماع 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 إلى 2027، ولكل صف resolves_at خاص به. يعرض السكربت ثلاثة. ويمكن لرسم أطول أن يعرض كل الصفوف، ويعطي cumulative_change_bps المجموع التراكمي لمتوسط الحركات. يشرح دليل قراءة احتمالات فائدة الفيدرالي كل حقل.

نُشر في .

الخطوات التالية