الوثائق1.0 (latest)
الصفحاتالبيانات الأساسية · 11 / 29

البيانات الأساسية

قيد التطوير: البيانات الأساسية ليست وظيفية بالكامل بعد. قد يؤدي استخدام هذه الميزة في بيئة التطوير أو في الاختبارات الرجعية إلى بيانات أساسية غير متسقة (حقول مفقودة أو تواريخ تقارير غير متطابقة أو لقطات محاذية للأعمدة غير مستقرة). تعامل مع النتائج على أنها تجريبية إلى أن يعلن إصدار قادم أن البيانات الأساسية مستقرة.

يمكن لاستراتيجيات QuantCraft استخدام بيانات الشركات المالية إلى جانب أعمدة الأسعار OHLCV: الميزانيات العمومية وقوائم التدفقات النقدية وقوائم الدخل وسجل الأرباح / تقديراتها. تُحمَّل البيانات مرة واحدة لكل رمز من خدمة البيانات الأساسية في QuantCraft، وتُنظَّم في جداول مفهرسة بالتاريخ، وتُتاح لاستراتيجيتك في صورة لقطات محاذية للأعمدة أثناء الاختبار الرجعي. يتبع توقيت دوال الاستدعاء دورة حياة الاستراتيجية؛ اضبط الرموز والتواريخ في Test (تشغيل الشيفرة).

إلى جانب القوائم الثلاث تحصل على النسب (91 نسبة) وقيم للسهم الواحد ومضاعفات وعوائد التقييم ودرجات الجودة (Piotroski F وAltman Z-prime وBeneish M) — وكلها لحظية (point-in-time) وكلها اختيارية. وتُطرح رمزًا بعد رمز، لذا احرس كل وصول: raw["metricsInputs"] is None تعني أن الحزمة أقدم منها.

تغطي هذه الصفحة:

  • ما بيانات القوائم المالية المتاحة
  • كيف تُنظَّم الجداول المفهرسة بالتاريخ
  • كيف تصل الحمولات المحاذية للأعمدة إلى دوال الاستدعاء أثناء الاختبار الرجعي

ذو صلة: مجموعات بيانات عوائد عوامل فاما-فرينش العالمية (وليست لكل رمز) ميزة منفصلة — راجع عوامل فاما-فرينش (fama_french.qc، دون وسيط استدعاء). وتُفهرَس rows العوامل بسلاسل YYYYMM لا بفهارس قوائم.


ما الذي تحصل عليه

كل حزمة بيانات أساسية كائن JSON واحد لرمز واحد، ويحتوي على:

  • الميزانية العمومية — تقارير quarterly وyearly.
  • التدفق النقدي — تقارير quarterly وyearly.
  • قائمة الدخل — تقارير quarterly وyearly.
  • الأرباح (Earnings):
    • History — ربحية السهم المعلنة مقابل التقديرات والمفاجآت بحسب تاريخ التقرير.
    • Trend — التقديرات المستقبلية واتجاه ربحية السهم وتعديلات المحللين.
    • Annual — epsActual لكل سنة مالية.
  • النسب (Ratios) — نسب مالية quarterly وyearly (الهوامش والعوائد والسيولة والرافعة).
  • Financials extended — مقاييس موسّعة quarterly وyearly غير موجودة في القوائم الأساسية للدخل أو الميزانية أو التدفق النقدي.
  • للسهم الواحد — قيم للسهم quarterly وyearly كما أُودعت (عدد الأسهم على أساس تجزئة تلك الفترة).
  • التقييم — القيمة السوقية وقيمة المنشأة والمضاعفات والعوائد quarterly وyearly، إضافةً إلى كائن latest غير مؤرَّخ.
  • الدرجات — Piotroski F وAltman Z-prime وBeneish M quarterly وyearly، إضافةً إلى notApplicableReason.
  • TTM — كائن واحد لآخر اثني عشر شهرًا (غير مقسّم بحسب الفترة).
  • مصدر المقاييس — كائنان مسطّحان metricsInputs / metricsHealth. وتكون metricsInputs تساوي None في حزمة أقدم من توسعة المقاييس.
  • سجل الإيداعات — بيانات وصفية للإيداعات quarterly وyearly (نوع النموذج وتاريخ الإيداع، مفهرسة بنهاية الفترة). وتُضمَّن أيضًا في لقطات current(...) المحاذية للأعمدة عند وجودها في الحزمة؛ وتبقى الجداول الخام متاحة عبر f.tables["filingHistory.quarterly"].
  • معلومات الشركة — بيانات وصفية مسطّحة للكيان (الاسم وCIK وSIC والعنوان والبورصات والرموز). غير مفهرسة بالتاريخ وليست في اللقطات المحاذية للأعمدة؛ تُوصَل عبر f.raw["companyInfo"].

كل تقرير صف من المقاييس بصيغة camelCase — مثل totalAssets وcash وfreeCashFlow وtotalRevenue وnetIncome وepsActual وepsEstimate وsurprisePercent. وقد تصل القيم الرقمية سلاسل نصية في JSON الأساسي، ويُرجَع أي حقل مفقود None.

قد لا يعرض رمز معيّن كل الأقسام. راجع مستكشف تغطية البيانات الأساسية لمعرفة الحقول المتاحة لرمز ما.


الجداول المفهرسة بالتاريخ

لكل قسم أعلاه تُنظَّم البيانات الأساسية كـجدول مفهرس بالتاريخ: تُفهرَس الصفوف بـتاريخ التقرير (YYYY-MM-DD)، وتُعرَض المقاييس كـقوائم متوازية يمكنك فهرستها كما تفهرس سجل الأسعار.

مسارات الجداول القياسية هي:

المسارالمعنى
balanceSheet.quarterly / balanceSheet.yearlyلقطات الميزانية العمومية
cashFlow.quarterly / cashFlow.yearlyقوائم التدفق النقدي
incomeStatement.quarterly / incomeStatement.yearlyقوائم الدخل
earnings.Historyربحية السهم المعلنة والتقديرات والمفاجأة لكل تقرير
earnings.Trendتقديرات المحللين واتجاه ربحية السهم والتعديلات
earnings.AnnualepsActual السنوي
ratios.quarterly / ratios.yearlyالنسب المالية (الهوامش والعوائد والسيولة والرافعة)
financialsExtended.quarterly / financialsExtended.yearlyمقاييس مالية موسّعة
perShare.quarterly / perShare.yearlyقيم للسهم الواحد (كما أُودعت)
valuation.quarterly / valuation.yearlyمضاعفات وعوائد التقييم
scores.quarterly / scores.yearlyPiotroski / Altman / Beneish
filingHistory.quarterly / filingHistory.yearlyبيانات الإيداع الوصفية (نوع النموذج وتاريخ الإيداع)

ليست جداول. إن valuation.latest وscores.notApplicableReason وttm وmetricsInputs وmetricsHealth وcompanyInfo غير مفهرسة بالتاريخ، لذا فهي غائبة عن tables وlists وعن كل لقطة في وقت العمود — وهذا مقصود:

ليست جدولًاالسبب
valuation.latestكائن واحد بجانب مفاتيح التاريخ، لا فترة
scores.notApplicableReasonسلسلة نصية بجانب مفاتيح التاريخ
ttmكائن واحد؛ قيمه قيم مفردة لا قواميس صفوف
metricsInputs / metricsHealthكائنات مسطّحة لمصدر البيانات
companyInfoبيانات وصفية مسطّحة للكيان

كل هذه بتاريخ الرفع لا لكل فترة، لذا فإبقاؤها خارج tables يُبقيها أيضًا خارج كل لقطة في وقت العمود — فلا يستطيع الاختبار الرجعي قراءة سعر اليوم عن غير قصد من عمود في 2019. توصَّل إليها عبر f.raw بدلًا من ذلك. والكتلة الفارغة ({"quarterly": {}, "yearly": {}}، وهذا هو شكل scores لمودِع من القطاع المالي) لا تسجّل أي جدول.

اصطلاح الفهرسة: الأحدث أولًا

داخل أي من هذه الجداول، الفهرس 0 هو أحدث فترة مؤهلة، والفهرس 1 هو السابقة لها، وهكذا. وهذا يطابق عمل سلاسل الأسعار في بقية QuantCraft.

إن أردت تحميل حزمة مباشرةً (مثلًا خارج اختبار رجعي) فالشكل الأساسي هو:

from quantcraft.fundamentals import QcFundamentals f = QcFundamentals(token, "fundamentals/AAPL.json.gz") latest_total_assets = f.tables["balanceSheet.quarterly"]["totalAssets"][0] prior_total_assets = f.tables["balanceSheet.quarterly"]["totalAssets"][1] same = f.lists["balanceSheet.quarterly.totalAssets"][0] whole = f.raw

ما يمكنك قراءته من حزمة محمَّلة:

السمةما تعطيه
f.rawشجرة JSON المفكوكة كاملةً.
f.symbolالرمز المحسوم (مثل "AAPL").
f.tablesقاموس كائنات DateKeyedTable مفهرس بـالمسار المنقّط (مثل "balanceSheet.quarterly").
f.table(path)وصول ميسّر إلى DateKeyedTable واحد.
f.listsخريطة مسطّحة مفهرسة بـ "<tablePath>.<fieldName>" وقيمها محاذاة بالأحدث أولًا.

يعرض DateKeyedTable كلًّا من periods (مفاتيح YYYY-MM-DD الأحدث أولًا) وcolumns (الحقل ← القيم)، ويدعم الفهرسة table["fieldName"].

اكتشاف الحقول وقت التشغيل سهل: يعرض sorted(f.lists.keys()) كل سلسلة مسطّحة، ويعرض sorted(t.columns.keys()) أعمدة جدول واحد — وهو مفيد حين يضيف الخادم حقولًا أو يزيلها.


الحمولات المحاذية للأعمدة في الاختبارات الرجعية

في الاختبار الرجعي لا تقرأ البيانات الأساسية كجداول خام — بل يختار المحرك التقرير المناسب للعمود الحالي ويمنحه لدوال الاستدعاء كلقطة. وهذا ما يسمى الحمولة المحاذية للأعمدة.

ضبط البيانات الأساسية لاختبار رجعي

في علامة تبويب Symbol & data في Run backtest:

  1. حدّد Uses fundamentals (select if your strategy requires fundamental data) (يتطلب تسجيل الدخول — يرسل QuantCraft رمز جلستك لتحميل ملفات البيانات الأساسية من B2). وتسميها عمليات التشغيل الأمامية الجماعية وعلى الرسم البياني Use fundamentals (optional). وتظهر الخانة عند توفر ميزات البيانات الأساسية في إصدارك، لكنها معطّلة (مع تلميح Premium) ما لم يكن لديك Premium أو يكن الوصول إلى البيانات المجانية مفعّلًا.
  2. اختر حزمة بيانات أساسية واحدة أو أكثر من الاختيار المتعدد (مسارات مثل fundamentals/AAPL.json.gz).

مع مصدر رموز Screener (اختبار رجعي) أو هدف Screener (عمليات التشغيل الجماعية في التداول الآلي (AutoTrading) / QuantCloud) لا تحتاج إلى اختيار أي شيء: فعّل البيانات الأساسية فيحصل كل رمز يختاره المرشّح على حزمته الخاصة، فيعمل fundamentals.current(bar["t"], symbol=symbol) لكل منها. وتأتي الحزم من تنزيل الماسح نفسه (فلا شيء يُجلب مرتين)، ويُجلب الرمز الذي لم ينزّله الماسح بعد مرة واحدة ويُحتفظ به. وفي التشغيل المباشر تتبع الحزم كل إعادة تصفية. وتظل الاختيارات اليدوية مقبولة كإضافات (مثل رمز مرجعي). والرمز الذي يتعذر تحميل بياناته يُرجع None بدل إفشال التشغيل — وتطبع لوحة Output عدد ما حُمِّل.

رموز OHLCV ورموز البيانات الأساسية مستقلة. يمكنك إجراء اختبار رجعي لـ RNMBY عبر مصدر الوسيط مع تحميل البيانات الأساسية لـ RHM.XETRA — مرّر الرمز الصحيح إلى fundamentals.current(..., symbol="RHM.XETRA") (أو ما يعادله) في الشيفرة.

عند اختيار عدة حزم، استخدم symbol= صريحًا في fundamentals.current / get_data_with_offset حين تحتاج إلى حزمة بعينها. والحزمة الأساسية المستخدمة للقطات المحاذية للأعمدة تكون افتراضيًا أول رمز OHLCV في قائمة رموزك ما لم يطبّق المحرك قاعدة أخرى.

وللوصول منخفض المستوى إلى الجداول خارج دوال الاستدعاء استخدم qc_fundamentals من quantcraft.process.runtime حين لا يكون None (مثل qc_fundamentals.raw["companyInfo"]). فهو يحمل الحزمة الأساسية فقط؛ واستخدم مقبض fundamentals في دالة الاستدعاء مع symbol= لأي رمز آخر.

وإذا لم تُضبط البيانات الأساسية فإن المحرك يمرّر ببساطة fundamentals=None إلى دوال الاستدعاء، وتحرس أنت ذلك.

اللحظية (point-in-time) (الاختبار الرجعي): يبني كلٌّ من محرك الاختبار الرجعي وDebug Test BacktestFundamentals(..., backtest_mode=True)، لذا تستخدم current / get_data_with_offset تقييد تاريخ الإيداع (use_filing_date=True) — إذ تُستبعد الفترة إن كان filing_date لها بعد وقت العمود. وعندما لا يكون للفترة filing_date صالح يُستخدم موعد إيداع مفترض بدلًا من ذلك — 45 يومًا بعد نهاية الفترة في الجداول ربع السنوية و90 يومًا في السنوية (default_filing_lag_days) — بدل إظهار التقرير يوم إغلاق فترته. وتستخدم عمليات التشغيل الأمامية أهلية نهاية الفترة (backtest_mode=False). فضّل مقبض fundamentals في دالة الاستدعاء في اختبارات بيئة التطوير الرجعية؛ فاستدعاء qc_fundamentals.get_data_with_offset(...) الخام دون use_filing_date=True قد يستشرف المستقبل بالنسبة إلى تواريخ الإيداع.

عمليات التشغيل الأمامية: يعيد التشغيل المباشر تحميل بياناته الأساسية كل ساعة تقريبًا، وخلال نحو 5 دقائق بعد تحديث بيانات الماسح. وإعادة التحميل الفاشلة تُبقي البيانات السابقة. ولأن "الآن" في التشغيل الأمامي هو اليوم فعلًا، فإن الكتل بتاريخ الرفع (raw["ttm"] وraw["valuation"]["latest"] …) بيانات حالية هناك لا استشراف.

دوال الاستدعاء القديمة: قد تستخدم استراتيجيات أقدم وسيط qc_fundamentals منفصلًا أو قاموسًا خامًا بدل BacktestFundamentals. يمرّر التوقيع الحديث fundamentals كوسيط ثالث إلى on_bar / on_tick. والاسم البديل على مستوى الوحدة fundamentals_as_of_bar يطابق شكل الحمولة المحاذية للأعمدة نفسه.

وسيط الاستدعاء fundamentals

عند تحميل البيانات الأساسية يمرّر المحرك مقبض BacktestFundamentals كوسيط fundamentals إلى on_bar وon_tick و(عند استخدامه في عمليات التشغيل الأمامية) on_timer:

def on_bar(bar_index, bar, fundamentals=None, symbol=None): if fundamentals is None: return snap = fundamentals.current(bar["t"]) bs_q = (snap.get("balanceSheet") or {}).get("quarterly") or {} total_assets = bs_q.get("totalAssets")
الدالة / العضوالغرض
fundamentals.current(bar_time, symbol=None)قاموس اللقطة عند وقت ذلك العمود (مقيَّد بتاريخ الإيداع في الاختبار الرجعي). يختار symbol الاختياري أي حزمة محمَّلة؛ احذفه للحزمة الأساسية. يتضمن filingHistory عند وجوده في الحزمة.
fundamentals.get_data_with_offset(bar_time, offset, *, symbol=None, print_on_shortfall=True)الفترة السابقة رقم N لكل جدول فرعي للحزمة المختارة (بنمط تاريخ الإيداع نفسه كما في current).
fundamentals.symbolsصف (tuple) من المفاتيح بأحرف كبيرة لكل حزمة محمَّلة.
fundamentals.primary_symbol()المفتاح الأساسي المستخدم عند حذف symbol.
fundamentals.reload_all()يعيد تنزيل كل حزمة. وتستدعيه عمليات التشغيل الأمامية نيابةً عنك؛ ونادرًا ما تحتاج إليه.

كيف تبدو اللقطة

اللقطة المحاذية للعمود قاموس متداخل بالفترات الصالحة عند هذا العمود فقط (مقيَّدة بتاريخ الإيداع في اختبارات بيئة التطوير الرجعية). يتضمن كل قسم غير فارغ periodEnd إضافةً إلى مقاييس التقرير:

{ "barTime": "2026-06-01T00:00:00+00:00", "symbol": "AAPL", "balanceSheet": { "quarterly": { "periodEnd": "2026-03-31", "totalAssets": 352000000.0, "cash": 51000000.0 }, "yearly": { "periodEnd": "2025-09-30", "totalAssets": 344000000.0 } }, "cashFlow": { "quarterly": { "periodEnd": "2026-03-31", "freeCashFlow": 24500000.0 } }, "incomeStatement": { "quarterly": { "periodEnd": "2026-03-31", "totalRevenue": 95000000.0, "netIncome": 23000000.0 } }, "earnings": { "History": { "periodEnd": "2026-03-31", "reportDate": "2026-05-02", "epsActual": 1.53 }, "Trend": null, "Annual": { "periodEnd": "2025-09-30", "epsActual": 6.13 } }, "ratios": { "quarterly": { "periodEnd": "2026-03-31", "grossMargin": 0.47, "operatingMargin": 0.31, "currentRatio": 1.04 }, "yearly": { "periodEnd": "2025-09-30", "grossMargin": 0.46, "currentRatio": 0.87 } }, "financialsExtended": { "quarterly": { "periodEnd": "2026-03-31", "ebitda": 38000000000.0, "ebitdaMargin": 0.40 }, "yearly": { "periodEnd": "2025-09-30", "ebitda": 134000000000.0 } }, "perShare": { "quarterly": { "periodEnd": "2026-03-31", "bookValuePerShare": 4.3, "grahamNumber": null }, "yearly": null }, "valuation": { "quarterly": { "periodEnd": "2026-03-31", "marketCap": 3812000000.0, "priceToEarningsRatio": null, "earningsYield": -5.0, "priceBasis": "split-adjusted", "approximate": true }, "yearly": null }, "scores": { "quarterly": { "periodEnd": "2026-03-31", "piotroskiFScore": 3, "beneishMScore": -1.94 }, "yearly": null }, "filingHistory": { "quarterly": { "periodEnd": "2026-03-31", "formType": "10-Q", "filedAt": "2026-05-02" }, "yearly": { "periodEnd": "2025-09-30", "formType": "10-K", "filedAt": "2025-10-31" } } }

قد تكون Trend تساوي null حين لا تتأهل أي فترة عند وقت العمود أو قبله. أما priceToEarningsRatio: null بجانب earningsYield: -5.0 أعلاه فهو شركة خاسرة لا بيانات مفقودة — راجع التقييم.

لا تظهر أبدًا في اللقطة: ttm وvaluation.latest وscores.notApplicableReason وmetricsInputs وmetricsHealth وcompanyInfo. فهي بتاريخ الرفع لا لكل فترة؛ وإرفاقها بعمود يسرّب معلومات مستقبلية إلى الاختبار الرجعي. اقرأها من qc_fundamentals.raw[...].

ويظهر القاموس نفسه لكل عمود تحت حقل fundamentals في كل صف من نتيجة الاختبار الرجعي المنظّمة، لذا فما تراه في استراتيجيتك يطابق ما يظهر في بيانات النتيجة.

البحث عن فترات أقدم (get_data_with_offset)

أحيانًا تريد لا آخر تقرير عند عمود ما، بل تقريرًا سابقًا — الربع السابق أو السنة المالية السابقة أو سطر الأرباح السابق:

prior = fundamentals.get_data_with_offset(bar["t"], 1) prev_bs_q = (prior or {}).get("balanceSheet", {}).get("quarterly")

السلوك:

  • يُفهرَس كل جدول فرعي باستقلال. مع offset=1 يرجع قسم balanceSheet.quarterly ربعًا واحدًا، بينما يرجع balanceSheet.yearly سنة مالية واحدة، وهكذا.
  • إن لم يكن للجدول الفرعي سجل كافٍ قبل العمود الحالي فإن قسمه null في القاموس المُرجَع (وقد تُطبَع ملاحظة من سطر واحد).
  • الشكل هو نفسه كما في current(...)، إضافةً إلى "offset": <int> في المستوى الأعلى.
  • في واجهة QcFundamentals الخام يكون التوقيع المفضّل f.get_data_with_offset(bar_time, offset, *, print_on_shortfall=True, use_filing_date=False). أما الدالة على مستوى الوحدة get_data_with_offset(qc, bar_time, offset, *, print_on_shortfall=True) فليس لها معامل use_filing_date — إذ تستخدم دائمًا أهلية نهاية الفترة، لذا استدعِ الدالة العضو مع use_filing_date=True (أو استخدم مقبض دالة الاستدعاء) للحصول على بيانات لحظية. والافتراضي use_filing_date=False يعني أهلية نهاية الفترة فقط (وقد يستشرف المستقبل مقابل تواريخ الإيداع). ومع use_filing_date=True تلجأ الفترة التي ينقصها filing_date إلى موعد مفترض قدره 45 يومًا (ربع سنوي) / 90 يومًا (سنوي) بعد نهاية الفترة. فضّل مقبض fundamentals في دالة الاستدعاء في اختبارات بيئة التطوير الرجعية، إذ يستخدم تقييد تاريخ الإيداع تلقائيًا.

البيانات الأساسية متعددة الرموز

عندما تحمّل عدة حزم (لاستراتيجيات مقطعية أو مقارنة) يمكنك اختيار الحزمة التي تقرأ منها بـ symbol="TICKER":

def on_bar(bar_index, bar, fundamentals=None, symbol=None): if fundamentals is None: return primary_snap = fundamentals.current(bar["t"]) msft_snap = fundamentals.current(bar["t"], symbol="MSFT") aapl_prior = fundamentals.get_data_with_offset(bar["t"], 1, symbol="AAPL")
  • يستخدم حذف symbol الحزمة الأساسية: الوحيدة المحمَّلة؛ وإلا fundamentals.primary إن ضُبط، وإلا الرمز المتداوَل، وإلا الرمز المحمَّل الأول أبجديًا. وفي تشغيل متعدد الرموز أو Screener قد يكون هذا البديل بصمت الشركة الخطأ — مرّر دائمًا symbol=symbol هناك.
  • يسرد fundamentals.symbols كل مفتاح رمز بأحرف كبيرة محمَّل حاليًا.
  • تُرجع fundamentals.primary_symbol() المفتاح الأساسي.
  • يمكن أن يكون الرمز الذي تجري عليه الاختبار الرجعي مختلفًا عن رمز (أو رموز) البيانات الأساسية التي تحمّلها — مثل تداول SPY مع قراءة البيانات الأساسية لـ AAPL وMSFT.

أوقات الأعمدة المقبولة

يقبل كلٌّ من current(...) وget_data_with_offset(...) عدة صيغ للوقت، لتتمكن من تمرير bar["t"] أو bar.t[0] أو قيمتك الخاصة:

  • datetime (يُعامَل الساذج كـ UTC)،
  • date،
  • سلسلة ISO (بما فيها Z لاحقة)،
  • ثواني epoch في UNIX (int / float).

أنماط عملية

بضعة أشكال شائعة:

def on_bar(bar_index, bar, fundamentals=None, symbol=None): if fundamentals is None: return snap = fundamentals.current(bar["t"]) if not snap: return bs_q = (snap.get("balanceSheet") or {}).get("quarterly") or {} is_q = (snap.get("incomeStatement") or {}).get("quarterly") or {} if (bs_q.get("totalAssets") or 0) > 0 and (is_q.get("netIncome") or 0) > 0: ...
def on_bar(bar_index, bar, fundamentals=None, symbol=None): if fundamentals is None: return snap = fundamentals.current(bar["t"]) or {} prior = fundamentals.get_data_with_offset(bar["t"], 1) or {} cur = ((snap.get("incomeStatement") or {}).get("quarterly") or {}).get("totalRevenue") prev = ((prior.get("incomeStatement") or {}).get("quarterly") or {}).get("totalRevenue") if cur and prev: revenue_growth = (cur - prev) / prev

مرجع حقول البيانات الأساسية

يعتمد توفر الحقول على الرمز — فليس كل مُصدِر يبلّغ عن كل سطر. استخدم sorted(f.lists.keys()) أو sorted(t.columns.keys()) وقت التشغيل لترى ما تعرضه حزمة محددة فعلًا. وقد تصل القيم الرقمية سلاسل نصية؛ حوّلها بـ float(...) للحسابات.

الميزانية العمومية

الجداول: balanceSheet.quarterly و**balanceSheet.yearly**

الحقلالحقل
accountsPayablelongTermInvestments
accumulatedAmortizationnegativeGoodwill
accumulatedDepreciationnetDebt
accumulatedOtherComprehensiveIncomenetInvestedCapital
additionalPaidInCapitalnetReceivables
capitalLeaseObligationsnetTangibleAssets
capitalStocknetWorkingCapital
capitalSurplusenoncontrollingInterestInConsolidatedEntity
cashnonCurrrentAssetsOther
cashAndEquivalentsnonCurrentAssetsTotal
cashAndShortTermInvestmentsnonCurrentLiabilitiesOther
commonStocknonCurrentLiabilitiesTotal
commonStockSharesOutstandingotherAssets
commonStockTotalEquityotherCurrentAssets
currency_symbolotherCurrentLiab
currentDeferredRevenueotherLiab
dateotherStockholderEquity
deferredLongTermAssetChargespreferredStockRedeemable
deferredLongTermLiabpreferredStockTotalEquity
earningAssetspropertyPlantAndEquipmentGross
filing_datepropertyPlantAndEquipmentNet
goodWillpropertyPlantEquipment
intangibleAssetsretainedEarnings
inventoryretainedEarningsTotalEquity
liabilitiesAndStockholdersEquityshortLongTermDebt
longTermDebtshortLongTermDebtTotal
longTermDebtTotalshortTermDebt
shortTermInvestmentstemporaryEquityRedeemableNoncontrollingInterests
totalAssetstotalCurrentAssets
totalCurrentLiabilitiestotalLiab
totalPermanentEquitytotalStockholderEquity
treasuryStockwarrants

التدفق النقدي

الجداول: cashFlow.quarterly و**cashFlow.yearly**

الحقلالحقل
beginPeriodCashFlowendPeriodCashFlow
capitalExpendituresexchangeRateChanges
cashAndCashEquivalentsChangesfiling_date
cashFlowsOtherOperatingfreeCashFlow
changeInCashinvestments
changeInWorkingCapitalissuanceOfCapitalStock
changeReceivablesnetBorrowings
changeToAccountReceivablesnetIncome
changeToInventoryotherCashflowsFromFinancingActivities
changeToLiabilitiesotherCashflowsFromInvestingActivities
changeToNetincomeotherNonCashItems
changeToOperatingActivitiessalePurchaseOfStock
currency_symbolstockBasedCompensation
datetotalCashflowsFromInvestingActivities
depreciationtotalCashFromFinancingActivities
dividendsPaidtotalCashFromOperatingActivities

قائمة الدخل

الجداول: incomeStatement.quarterly و**incomeStatement.yearly**

الحقلالحقل
costOfRevenuenetIncomeFromContinuingOps
currency_symbolnetInterestIncome
datenonOperatingIncomeNetOther
depreciationAndAmortizationnonRecurring
discontinuedOperationsoperatingIncome
effectOfAccountingChargesotherItems
ebitotherOperatingExpenses
ebitdapreferredStockAndOtherAdjustments
extraordinaryItemsreconciledDepreciation
filing_dateresearchDevelopment
grossProfitsellingAndMarketingExpenses
incomeBeforeTaxsellingGeneralAdministrative
incomeTaxExpensetaxProvision
interestExpensetotalOperatingExpenses
interestIncometotalOtherIncomeExpenseNet
minorityInteresttotalRevenue
netIncome
netIncomeApplicableToCommonShares

الأرباح — History

الجدول: earnings.History (ربحية السهم المعلنة مقابل التقديرات لكل تاريخ تقرير)

الحقلالوصف
beforeAfterMarketمتى صدر التقرير بالنسبة إلى ساعات السوق
currencyعملة التقرير
dateتاريخ نهاية الفترة
epsActualربحية السهم المعلنة
epsEstimateتقدير الإجماع لربحية السهم
epsDifferenceepsActual − epsEstimate
reportDateتاريخ الإعلان عن الأرقام
surprisePercentمفاجأة ربحية السهم كنسبة مئوية

الأرباح — Trend

الجدول: earnings.Trend (التقديرات المستقبلية والتعديلات)

الحقلالحقل
dateepsTrendCurrent
periodepsTrend7daysAgo
growthepsTrend30daysAgo
earningsEstimateAvgepsTrend60daysAgo
earningsEstimateLowepsTrend90daysAgo
earningsEstimateHighepsRevisionsUpLast7days
earningsEstimateYearAgoEpsepsRevisionsUpLast30days
earningsEstimateNumberOfAnalystsepsRevisionsDownLast7days
earningsEstimateGrowthepsRevisionsDownLast30days
revenueEstimateAvg
revenueEstimateLow
revenueEstimateHigh
revenueEstimateYearAgoEps
revenueEstimateNumberOfAnalysts
revenueEstimateGrowth

الأرباح — Annual

الجدول: earnings.Annual (ربحية السهم السنوية المعلنة)

الحقلالوصف
dateتاريخ نهاية السنة المالية
epsActualربحية السهم السنوية المعلنة

النسب (Ratios)

الجداول: ratios.quarterly و**ratios.yearly**

91 مقياسًا منذ توسعة المقاييس (94 مفتاحًا بعدّ date وcurrency_symbol وfiling_date). تُسرد المجموعة الأصلية أولًا؛ وكل ما يبدأ من رأس المال العامل فما دونه جديد. وقد يحمل رمز في منتصف الطرح المجموعة الأصلية فقط، لذا اكتشف القائمة الحيّة بـ sorted(f.table("ratios.quarterly").columns.keys()).

المجموعة الأصلية

حقول الهوامش والعوائد في هذه المجموعة (grossMargin وoperatingMargin وغيرهما) كسور عشرية — اضربها في 100 للحصول على نسبة مئوية. وقد أُعيدت تسمية debtToEquity إلى debtToEquityRatio.

الحقلالحقل
grossMargincurrentRatio
operatingMarginquickRatio
netProfitMargincashRatio
returnOnAssetsdebtToEquityRatio
returnOnEquitydebtToAssetsRatio
operatingCashFlowMargininterestCoverageRatio
freeCashFlowMarginassetTurnover
freeCashFlowToNetIncomeinventoryTurnover
receivablesTurnover

رأس المال العامل

الحقلملاحظات
daysSalesOutstandingأيام، منزلتان عشريتان
daysInventoryOutstandingأيام، منزلتان عشريتان
daysPayablesOutstandingأيام، منزلتان عشريتان
cashConversionCycleأيام، منزلتان عشريتان — ذو إشارة؛ والسالب (التحصيل قبل الدفع) مرغوب فيه لا خطأ
operatingCycleأيام، منزلتان عشريتان
payablesTurnoverعدد عشري عادي
workingCapitalTurnoverعدد عشري عادي
fixedAssetTurnoverعدد عشري عادي
netWorkingCapitalToAssetsعدد عشري عادي
defensiveIntervalRatioعدد عشري عادي

الرافعة والتغطية

كلها أعداد عشرية عادية (4 منازل عشرية).

الحقلالحقل
totalDebtToEquityRationetDebtToFreeCashFlowRatio
netDebtToEquityRatioequityMultiplier
longTermDebtToEquityRatioebitdaInterestCoverageRatio
longTermDebtToCapitalRatiocashFlowInterestCoverageRatio
capitalizationRatiocashFlowToDebtRatio
debtToEbitdaRatiodebtServiceCoverageRatio
netDebtToEbitdaRatio

العوائد

الحقلملاحظات
effectiveTaxRate%
returnOnInvestedCapital%
returnOnCapitalEmployed%
returnOnTangibleEquity%
cashReturnOnInvestedCapital%
operatingReturnOnAssets%
returnOnEquityDupontMargin%
returnOnEquityDupontTurnoverعدد عشري عادي
returnOnEquityDupontLeverageعدد عشري عادي
nopatسلسلة نقدية، منزلتان عشريتان — الاستثناء في كتلة رقمية بخلاف ذلك
investedCapitalسلسلة نقدية، منزلتان عشريتان
capitalEmployedسلسلة نقدية، منزلتان عشريتان

الهوامش وكثافة رأس المال

الحقلملاحظات
ebitMargin%
ebitdaMargin%
pretaxMargin%
researchAndDevelopmentToRevenue%
sellingGeneralAdministrativeToRevenue%
stockBasedCompensationToRevenue%
capexToRevenue%
capexToOperatingCashFlow%
accrualsRatio%
assetQualityRatio%
capexToDepreciationRatioعدد عشري عادي (4 منازل)
cashConversionRatioعدد عشري عادي (4 منازل)

التوزيع

كلها نسب مئوية (منزلتان عشريتان): dividendPayoutRatio وfreeCashFlowPayoutRatio وshareholderPayoutToFreeCashFlow وretentionRatio وsustainableGrowthRate.

النمو على أساس سنوي

كلها نسب مئوية (منزلتان عشريتان). ونمو الإيرادات / صافي الدخل / ربحية السهم غير مكرر هنا — فهو في earnings.Trend.

الحقلالحقل
grossProfitGrowthYoYtotalAssetsGrowthYoY
operatingIncomeGrowthYoYtotalStockholderEquityGrowthYoY
ebitdaGrowthYoYtotalDebtGrowthYoY
operatingCashFlowGrowthYoYdividendsPaidGrowthYoY
freeCashFlowGrowthYoYsharesDilutedGrowthYoY — السالب يعني إعادة شراء أسهم
capitalExpendituresGrowthYoYbookValuePerShareGrowthYoY

معدلات النمو السنوي المركّب — yearly فقط

كلها نسب مئوية (منزلتان عشريتان)، و**null في كل فترة quarterly** — فمرشّح أو قاعدة تطلب أحدها في فترة ربع سنوية يُسقط كل الرموز.

revenueCagr3y / revenueCagr5y وnetIncomeCagr3y / netIncomeCagr5y وepsCagr3y / epsCagr5y وfreeCashFlowCagr3y / freeCashFlowCagr5y وdividendCagr3y / dividendCagr5y.

Financials extended

الجداول: financialsExtended.quarterly و**financialsExtended.yearly**

تختلف الحقول باختلاف الرمز ولا تُعدَّد هنا. اكتشف ما تعرضه حزمة محمَّلة وقت التشغيل:

t = f.table("financialsExtended.quarterly") if t: print(sorted(t.columns.keys()))

تتضمن الحقول الشائعة مقاييس EBITDA موسّعة ومكوّنات رأس المال العامل وبيانات للسهم غير موجودة في قائمة الدخل الأساسية.

حقول متقاعدة: تُسحب ebitda وebitdaMargin وenterpriseValue وpriceToEarnings وpriceToBook وpriceToSales وevToEbitda وevToRevenue من Financials extended لصالح نسخها في التقييم والنسب (Ratios) التي تُحسب على أساس آخر اثني عشر شهرًا (لذا تختلف القيم).

للسهم الواحد

الجداول: perShare.quarterly و**perShare.yearly**

سجل كما أُودع: إذ يقع sharesOutstanding على أساس التجزئة الذي أُبلغ عنه لتلك الفترة، فهو غير قابل للمقارنة عبر حد تجزئة. استخدم التقييم لأي شيء مقارن. والقيم سلاسل بأربع منازل عشرية ما لم يُذكر خلاف ذلك.

الحقلملاحظات
dateتاريخ نهاية الفترة
sharesOutstandingسلسلة بمنزلتين عشريتين
sharesBasis"dei" / "weightedAverageSharesDiluted" / "weightedAverageSharesBasic"
bookValuePerShare, tangibleBookValuePerShare
revenuePerShare, ebitdaPerShare
operatingCashFlowPerShare, freeCashFlowPerShare
cashPerShare, netCashPerShare
netDebtPerShare, totalDebtPerShare
workingCapitalPerShare, retainedEarningsPerShare
dividendsPaidPerShare
netCurrentAssetValuePerShareNCAV عند جراهام
grahamNumber

التقييم

الجداول: valuation.quarterly و**valuation.yearly** (إضافةً إلى valuation.latest غير الجدولي)

ثلاث قواعد:

  1. المضاعفات هي marketCap / المجمَّع، لا price / perShare. لا تعِد حسابها من perShare — فالمقارنات المعاد بيانها تجعل الاثنين يختلفان في الفترات الأقدم.
  2. مضاعف None بجانب عائد ذي إشارة أمر صحيح لا علّة. تتحول المضاعفات الموسومة null عند مقام غير موجب أدناه إلى None عندما لا يكون مقامها موجبًا، بينما تحتفظ العوائد وbookToMarketRatio بإشارتها. وتعرض الشركة الخاسرة priceToEarningsRatio: None و earningsYield: -5.0.
  3. المضاعفات لآخر اثني عشر شهرًا، حتى في الفترات ربع السنوية — فمضاعف الربحية ربع السنوي هو مضاعف حقيقي لآخر اثني عشر شهرًا لا ربع سنة محوَّل إلى سنوي.

البيانات الوصفية

الحقلملاحظات
dateتاريخ نهاية الفترة
sharePriceسلسلة بأربع منازل عشرية
priceDateYYYY-MM-DD
priceLagDaysعدد صحيح
priceBasis"as-quoted" (الأحدث) / "split-adjusted" / "unreconciled" — تعامل مع "unreconciled" بحذر
approximatetrue في الفترات التاريخية (تعديل رجعي متبقٍّ للتوزيعات)
sharesRebasedنُقل عدد الأسهم إلى أساس التجزئة الحالي
sharesOutstandingسلسلة بمنزلتين عشريتين، أساس التجزئة الحالي — يختلف عن perShare.sharesOutstanding (كما أُودع) في الفترات الأقدم

الحجم: marketCap وenterpriseValue — سلاسل نقدية بمنزلتين عشريتين.

المضاعفات (أرقام بأربع منازل عشرية)

الحقلNull عند مقام غير موجب
priceToEarningsRatioنعم
priceToBookRatioنعم
priceToTangibleBookRatioنعم
priceToSalesRatio
priceToFreeCashFlowRatioنعم
priceToOperatingCashFlowRatioنعم
pegRatioTrailingنعم
enterpriseValueToEbitdaRatioنعم
enterpriseValueToEbitRatioنعم
enterpriseValueToSalesRatio
enterpriseValueToFreeCashFlowRatioنعم
enterpriseValueToOperatingCashFlowRatio
enterpriseValueToInvestedCapitalRatio
bookToMarketRatioيحتفظ بإشارته
netDebtToMarketCapRatio
marketCapToTotalAssets
altmanZScore

العوائد — نسب مئوية بمنزلتين عشريتين، ذات إشارة: earningsYield وebitToEnterpriseValueYield وfreeCashFlowYield وoperatingCashFlowYield وdividendYield وbuybackYield وshareholderYield.

valuation.latest — ليست فترة. كائن واحد يحمل كل حقل أعلاه إضافةً إلى priceAsOf وpriceAgeDays وpriceSource وfundamentalsAsOf وttmBasis. وهو يقع بجانب مفاتيح التاريخ، فهو ليس إدخال جدول ولا يظهر أبدًا في لقطة وقت العمود — فقراءته في اختبار رجعي استشراف. توصَّل إليه عبر qc_fundamentals.raw["valuation"]["latest"]؛ وهو None حين لا يتوفر سعر.

الدرجات

الجداول: scores.quarterly و**scores.yearly**

الحقلملاحظات
dateتاريخ نهاية الفترة
piotroskiFScoreعدد صحيح من 0 إلى 9
piotroskiComponentsكائن أو None — المفاتيح roaPositive وcfoPositive وroaImproved وaccrualQuality وleverageImproved وcurrentRatioImproved وnoShareIssuance وgrossMarginImproved وassetTurnoverImproved، وكل منها 1 أو 0 أو None
altmanZScorePrivate4 منازل عشرية — Z-prime، حقوق الملكية الدفترية
beneishMScore4 منازل عشرية
beneishComponentsكائن أو None — المفاتيح dsri وgmi وaqi وsgi وdepi وsgai وtata وlvgi (أرقام بأربع منازل عشرية)

غيابان متوقعان، ولا يُعدّ أيٌّ منهما خطأً:

  • أقدم فترة لمودِع ما لا تحمل درجات — فهي تحتاج إلى سنة سابقة للمقارنة.
  • في رموز SIC 6000–6799 (البنوك والوسطاء وشركات التأمين وصناديق REIT) تكون الكتلتان فارغتين وتكون scores.notApplicableReason تساوي "financial-sector-sic". تعامل مع ذلك على أنه "غير منطبق" لا "لا بيانات". اقرأه من qc_fundamentals.raw["scores"]["notApplicableReason"].

TTM

ttm كائن واحد وليس جدولًا — مجمَّعات آخر اثني عشر شهرًا بتاريخ الرفع، لا بتاريخ أي عمود. ولا يظهر أبدًا في لقطة؛ توصَّل إليه عبر qc_fundamentals.raw["ttm"] (آمن في عمليات التشغيل الأمامية، واستشراف في الاختبار الرجعي).

  • البيانات الوصفية: basis ("quarterly" / "annual") وasOf وperiodsUsed (list[str]) وcomplete (منطقي) وsynthetic (منطقي — أُعيد بناء الربع الرابع المالي؛ أمر طبيعي، وعادةً true) وcoverageDays (نحو 365).
  • التدفقات — مجموعة على 4 أرباع، سلاسل بمنزلتين عشريتين عدا epsBasic / epsDiluted (4 منازل): totalRevenue وgrossProfit وoperatingIncome وebit وebitda وnetIncome وepsBasic وepsDiluted وdepreciationAndAmortization وinterestExpense وincomeBeforeTax وincomeTaxExpense وcostOfRevenue وsellingGeneralAdministrative وresearchDevelopment وtaxProvision وtotalCashFromOperatingActivities وtotalCashflowsFromInvestingActivities وcapitalExpenditures وfreeCashFlow وdividendsPaid وstockBasedCompensation وpaymentsForRepurchaseOfCommonStock وproceedsFromIssuanceOfCommonStock وrepaymentsOfLongTermDebt.
  • القيم اللحظية — أحدث فترة، لا تُجمع أبدًا، سلاسل بمنزلتين عشريتين: totalAssets وtotalLiab وtotalStockholderEquity وtotalCurrentAssets وtotalCurrentLiabilities وtotalDebt وnetDebt وcashAndShortTermInvestments وgoodWill وintangibleAssets وnetWorkingCapital وretainedEarnings وnetReceivables وinventory وaccountsPayable وpropertyPlantAndEquipmentNet وpreferredStockTotalEquity وcommonStockSharesOutstanding وminorityInterest.

مصدر المقاييس (metricsInputs / metricsHealth)

كائنات مسطّحة تصف من أين جاءت المقاييس:

"metricsInputs": { "metricsVersion": 1, "priceAsOf": "2026-08-21", "priceSource": "…" | null, // source of valuation.latest "historicalPriceSource": "stooq" | null, // source of valuation.quarterly/yearly "sharesSource": "dei" | "weightedAverageSharesDiluted" | "weightedAverageSharesBasic" | null, "dividendSource": "nasdaq" | "edgar-xbrl" | "cash-flow" | null, "ttmBasis": "quarterly" | "annual" | null, "historicalValuation": true } "metricsHealth": { "prices": "ok" | "stale" | "absent", // current price for valuation.latest "historicalPrices": "ok" | "absent", "splits": "ok" | "absent", "calendar": "ok" | "absent" }

تحقّق من metricsHealth["prices"] != "absent" قبل الاعتماد على الحقول المبنية على الأسعار؛ و"stale" ما زال صالحًا للاستخدام — قارنه بـ priceAsOf. metricsInputs is None تعني حزمة أقدم من توسعة المقاييس. وتظهر الحقول لكل رمز عند إعادة رفعه، فالتغطية متفاوتة لفترة: تعامل مع كل كتلة أعلاه على أنها اختيارية.

اصطلاحات الأنواع لكتل المقاييس

الفئةنوع JSONالمنازل العشريةمثال
المجمَّعات النقديةسلسلة2"4519282704050.00"
القيم للسهم الواحد، sharePriceسلسلة4"309.3500"
أعداد الأسهمسلسلة2"14608963000.00"
النسب / المضاعفات / معدلات الدوران / التغطية / الدرجاترقم428.0462
النسب المئوية (الهوامش والعوائد والتوزيع والنمو وCAGR ومعدل الضريبة)رقم242.35 تعني 42.35%
الأيام (DSO / DIO / DPO / CCC / دورة التشغيل)رقم229.2
الأعداد (piotroskiFScore وpriceLagDays)رقمعدد صحيح8
التواريخسلسلة—YYYY-MM-DD

كل مقياس قابل لأن يكون null باستقلال. ويُحذف كائن الفترة بالكامل عندما تكون كل مفاتيحه غير الوصفية null. والكتلة تكون {"quarterly": {}, "yearly": {}} حين تكون فارغة — لا null ولا محذوفة أبدًا. ولا تظهر NaN / Infinity أبدًا.

معلومات الشركة

companyInfo كائن مسطّح — ليس مفهرسًا بالتاريخ ولا يظهر في لقطات current(...) / get_data_with_offset(...). توصَّل إليه مباشرةً:

info = f.raw["companyInfo"]
الحقلالنوعملاحظات
entityTypestring | nullمثل "operating"
entityNamestring | nullالاسم القانوني للكيان
cikstring | nullمفتاح SEC المركزي للفهرسة
sicstring | nullرمز الصناعة SIC
sicDescriptionstring | nullفئة SIC المقروءة
stateOfIncorporationstring | nullرمز الولاية من حرفين
fiscalYearEndstring | nullالصيغة "MMDD" مثل "0926" = 26 سبتمبر
categorystring | nullفئة المودِع
phonestring | nullرقم هاتف الاتصال
exchangesstring[]رموز البورصات
tickersstring[]رموز التداول
businessAddressobject | nullstreet1 وstreet2 وcity وstateOrCountry وzipCode

ملاحظات ومزالق

  • احرس دائمًا ضد None. إذا لم تُضبط البيانات الأساسية فإن fundamentals تساوي None. وداخل اللقطة قد تكون أقسام منفردة (مثل earnings.Trend وscores) null في بعض الأعمدة أيضًا، وقد تغيب كتل توسعة المقاييس كليًّا في الحزم الأقدم.
  • مرّر دائمًا symbol= في عمليات التشغيل متعددة الرموز وScreener — فقد لا يكون بديل الحزمة الأساسية هو الرمز الذي أنت عنده.
  • قد تكون الأرقام سلاسل نصية. كثيرًا ما يشحن JSON الأساسي المقاييس الرقمية كسلاسل؛ حوّلها بـ float(...) عند الحساب.
  • الفهرسة بالأحدث أولًا تنطبق على الجداول المفهرسة بالتاريخ وعلى عمليات البحث بالإزاحة — فالفهرس 0 هو أحدث فترة مؤهلة عند العمود، و1 هو الذي قبله، وهكذا.
  • الطابع الزمني للعمود هو مصدر الحقيقة لمعرفة أي تقرير هو "الحالي" — مرّر bar["t"] (أو bar.t[0]) مباشرةً؛ ولا حاجة إلى تحليله بنفسك.
26 دقائق للقراءةاقترح تعديلًا ↗
البيانات الأساسية — الوثائق (1.0 (latest)) | QuantCraft