بناء لوحة معلومات لاحتمالات السوق بشأن الأحداث الاقتصادية الكلية

تحتاج لوحة احتمالات الاقتصاد الكلي إلى قائمة المواضيع وقراءة حدث واحد لكل بطاقة. تقدم Narwhal احتمالات السوق بشأن مؤشر أسعار المستهلك والوظائف والبطالة والركود وقرارات البنوك المركزية في أربعة أشكال مسماة: scalar وbinary وtiming وextreme.

سرد المواضيع التي تغذي لوحة المعلومات

كل بطاقة في لوحة المعلومات هي موضوع واحد. تسردها نقطة نهاية المواضيع وتقبل group اختياريا. مجموعات الاقتصاد الكلي هي central_banks وus_prices وus_jobs وus_activity وglobal_activity وglobal_prices. يطلب هذا الطلب us_jobs ويبقي أول موضوعين.

curl، مواضيع الوظائف في الولايات المتحدة
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/predictions/topics?group=us_jobs"
الاستجابة، مختصرة
{
  "topics": [
    {
      "topic_id": "usa-payrolls",
      "group": "us_jobs",
      "title": "US nonfarm payrolls change",
      "shape": "scalar",
      "unit": "jobs",
      "unit_key": "job",
      "venues": [
        "kalshi"
      ],
      "resolution_kind": "release",
      "calendar": {
        "country": "USA",
        "family": "labour"
      },
      "next_event_id": "usa-payrolls-2026-10"
    },
    {
      "topic_id": "usa-unemployment",
      "group": "us_jobs",
      "title": "US unemployment rate",
      "shape": "scalar",
      "unit": "percent",
      "unit_key": "percent",
      "venues": [
        "kalshi",
        "polymarket"
      ],
      "resolution_kind": "release",
      "calendar": {
        "country": "USA",
        "family": "labour"
      },
      "next_event_id": "usa-unemployment-2026-10"
    }
  ]
}

يخبرك shape بنقطة النهاية التي يجب استدعاؤها: scalar أو binary أو timing أو extreme. ويعطي unit وحدة الجواب، ويسرد venues الأسواق التي تقف خلفه، ويبين resolution_kind كيف يُحسم الموضوع. وnext_event_id هو الحدث الواجب عرضه الآن. بعض المواضيع، مثل deu-gdp-yoy، ليس لها next_event_id، ويتخطاها السكربت.

قراءة حدث واحد: احتمالات الركود

يطرح حدث binary سؤالا جوابه نعم أو لا. يقرأ هذا الطلب سوق الركود. ولا تتضمن الاستجابة نص قواعد السوق.

curl، حدث binary
curl -s -H "Authorization: Bearer $NARWHAL_API_KEY" \
  "https://api.narwhalapi.com/v1/predictions/binary/usa-recession-2026"
الاستجابة، مختصرة
{
  "event_id": "usa-recession-2026",
  "topic_id": "usa-recession-2026",
  "question": "US recession by end of 2026?",
  "status": "trading",
  "closes_at": "2026-12-31T00:00:00Z",
  "resolves_at": "2026-12-31T00:00:00Z",
  "as_of": "2026-11-03T02:21:00Z",
  "stale": false,
  "resolution": "Two consecutive negative quarters of US real GDP from Q2 2025 to Q4 2026, or an NBER recession call for 2025 or 2026",
  "venues": [
    {
      "venue": "kalshi",
      "url": "https://kalshi.com/markets/kxrecssnber/kxrecssnber-26",
      "rules_url": "https://assets.kalshi.com/contract_terms/NBERRECSS.pdf",
      "settlement_source": "Bureau of Economic Analysis",
      "excluded_reason": "rules",
      "match": {
        "differences": [
          "rules"
        ],
        "note": "Kalshi resolves on two negative GDP quarters only; Polymarket also counts an NBER recession call"
      },
      "volume_24h_usd": "123.64",
      "open_interest_usd": "17994.22"
    },
    {
      "venue": "polymarket",
      "url": "https://polymarket.com/event/us-recession-by-end-of-2026",
      "settlement_source": "Bureau of Economic Analysis; NBER",
      "weight": "1.0000",
      "volume_24h_usd": "2090.24"
    }
  ],
  "probability": "0.0550",
  "quotes": [
    {
      "venue": "kalshi",
      "probability": "0.0250",
      "market_ids": [
        "KXRECSSNBER-26"
      ]
    },
    {
      "venue": "polymarket",
      "probability": "0.0550",
      "market_ids": [
        "100379208559626151022751801118534484742123694725746262280150222742563282755057"
      ]
    }
  ]
}

probability هو احتمال السوق للإجابة بنعم، وهو هنا 0.0550، ويسرد quotes السعر من كل سوق. يحمل بند Kalshi القيمة excluded_reason: rules وملاحظة match تفيد بأن قواعده تحتسب ربعين متتاليين سالبين للناتج المحلي الإجمالي فقط، بينما تحتسب Polymarket أيضا إعلان الركود من الجهة البحثية. يبقى رقم Kalshi وهو 0.0250 في quotes للإحالة، ويساوي probability الرئيسي سعر Polymarket. وas_of هو وقت السعر، وتكون stale تساوي false ما دامت الأسعار حية.

الأشكال الأربعة التي تسميها الواجهة البرمجية

الشكلالسؤال الذي يجيب عنهالحقول المطلوب قراءتهامثال على حدث
scalarما القيمة أو النطاق الذي سينتهي إليه إصدار أو قرارoutcomes، ويضم كل عنصر key وlabel وlower وupper وprobabilityusa-cpi-yoy-2026-11
binaryهل سيحدثprobability وquotesusa-recession-2026
timingبحلول متى سيحدثsteps، ويضم كل عنصر by وlabel وprobabilityusa-fed-next-cut-to-2028-12-31
extremeإلى أي حد ستعلو السلسلة أو تنخفضقائمتا up وdown من level وprobability، إضافة إلى windowusa-unemployment-peak-2026

تغطي أحداث scalar الإصدارات التي تعرضها لوحة الاقتصاد الكلي: تغير مؤشر أسعار المستهلك على 12 شهرا، ومعدل البطالة، والوظائف غير الزراعية، وقرارات الفائدة للبنوك المركزية. يشير الحقل resolves_with في حدث مؤشر الأسعار أو البطالة إلى سلسلة Narwhal التي تحسمه، مثل /v1/economics/USA/cpi. ولذلك يمكن للبطاقة أن تنتقل من الاحتمالات إلى الرقم المنشور بعد حسم الحدث.

يسمي حدث scalar حدود النطاقات أيضا. ففي نتيجة ما، يحدد lower وupper النطاق، وتعني الحافة null أن النطاق مفتوح من ذلك الجانب، كما في صف le_3.0 لـ 3.0% أو أقل. ويساوي مجموع قيم probability عبر الصفوف 1 في أحداث مؤشر الأسعار والبطالة والاحتياطي الفيدرالي التي قُرئت لهذه الصفحة، فيعرض مخطط أعمدة لـ outcomes التوزيع كاملا.

بناء صفوف لوحة المعلومات

يمر السكربت على ثلاث مجموعات، ويقرأ الحدث التالي لكل موضوع بنقطة النهاية التي يسميها شكله، ويطبع عنوانا واحدا لكل بطاقة. يعرض scalar أرجح نتيجة، ويعرض binary احتمال نعم، ويعرض timing الخطوة الأولى، ويعرض extreme المستوى الأول. والبطاقة التي لا يتوفر لها سعر صالح تذكر ذلك.

python، عنوان واحد لكل موضوع
import json
import os
import urllib.request

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 headline(shape, e):
    if shape == "binary":
        if "probability" not in e:
            return "no usable quote"
        return f"yes {float(e['probability']):.1%}"
    if shape == "scalar":
        priced = [o for o in e["outcomes"] if "probability" in o]
        if not priced:
            return "no usable quote"
        top = max(priced, key=lambda o: float(o["probability"]))
        return f"{top['label']} {float(top['probability']):.1%}"
    if shape == "timing":
        step = e["steps"][0]
        if "probability" not in step:
            return "no usable quote"
        return f"by {step['label']} {float(step['probability']):.1%}"
    if shape == "extreme":
        if not e["up"] or "probability" not in e["up"][0]:
            return "no usable quote"
        step = e["up"][0]
        return f"reach {step['level']} {float(step['probability']):.1%}"

for group in ("us_prices", "us_jobs", "us_activity"):
    for topic in get("/v1/predictions/topics?group=" + group)["topics"]:
        if not topic.get("next_event_id") or topic["shape"] == "scalar" and topic["unit"] == "count":
            continue
        e = get(f"/v1/predictions/{topic['shape']}/{topic['next_event_id']}")
        print(group, e["event_id"], topic["shape"], headline(topic["shape"], e),
              "stale" if e["stale"] else "live")
الحدثالشكلالعنوان
usa-cpi-yoy-2026-11عددي3.9%, 20.0%
usa-unemployment-2026-10عددي4.2%, 37.1%
usa-unemployment-peak-2026القيم القصوىبلوغ 5.0، 3.1%
usa-recession-2026ثنائينعم 5.5%
usa-gdp-2026-q4عدديلا يوجد سعر صالح

هذه الأسطر ناتج تشغيل واحد. تتحرك الاحتمالات مع السوق، لذا اقرأ as_of في كل بطاقة وحدّث الصفحة من الواجهة البرمجية.

ماذا تعني البطاقة التي لا يتوفر لها سعر صالح؟

تحمل استجابة الحدث stale: true وتغيب حقول الاحتمال. وفي emu-ecb-cut-2026 تكون قائمة quotes فارغة في استجابة binary، ويحمل بند Polymarket القيمة excluded_reason: thin. اعرض هذه البطاقة على أنها غير متاحة لا على أنها صفر، لأن الاستجابة لا تقدم احتمالا للعرض.

أي المواضيع تضم مؤشر الأسعار والوظائف والبطالة؟

توجد usa-cpi-yoy وusa-cpi-mom وusa-core-cpi-yoy وusa-core-cpi-mom في us_prices. وتوجد usa-payrolls وusa-unemployment في us_jobs. وتوجد usa-recession-2026 في us_activity، وقرارات الفائدة في central_banks. استعلم عن المجموعة ثم اقرأ next_event_id لكل موضوع.

كيف أسرد الأحداث القادمة بدلا من حدث واحد لكل موضوع؟

استدعِ /v1/predictions/events مع topic وstatus=trading. وبالنسبة إلى usa-cpi-yoy يعيد حدث نوفمبر 2026 وهو usa-cpi-yoy-2026-11، الذي يُحسم عند 13:30 بالتوقيت العالمي في 10 ديسمبر 2026، وحدث ديسمبر 2026 وهو usa-cpi-yoy-2026-12. يحتوي كل صف على question وcloses_at وresolves_at وshape. استخدمه لعرض تقويمي للإصدارات التي لها سوق بالفعل، وافتح كل حدث بنقطة نهاية شكله.

تقبل القائمة نفسها shape وfrom وto وlimit وcursor، ويعيد status=settled الأحداث التي حُسمت بالفعل.

كيف أعرض بطاقة قرار الفائدة؟

استخدم المجموعة central_banks، أو استدعِ مسار السياسة لبنك واحد لتحصل في استجابة واحدة على احتمالات الخفض والتثبيت والرفع لكل اجتماع له سعر. ويعرض دليل قراءة احتمالات فائدة الفيدرالي حالة الاحتياطي الفيدرالي.

نُشر في .

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