الصفحاتالبيانات الأساسية · 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.Annual | epsActual السنوي |
ratios.quarterly / ratios.yearly | النسب المالية (الهوامش والعوائد والسيولة والرافعة) |
financialsExtended.quarterly / financialsExtended.yearly | مقاييس مالية موسّعة |
perShare.quarterly / perShare.yearly | قيم للسهم الواحد (كما أُودعت) |
valuation.quarterly / valuation.yearly | مضاعفات وعوائد التقييم |
scores.quarterly / scores.yearly | Piotroski / 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:
- حدّد Uses fundamentals (select if your strategy requires fundamental data) (يتطلب تسجيل الدخول — يرسل QuantCraft رمز جلستك لتحميل ملفات البيانات الأساسية من B2). وتسميها عمليات التشغيل الأمامية الجماعية وعلى الرسم البياني Use fundamentals (optional). وتظهر الخانة عند توفر ميزات البيانات الأساسية في إصدارك، لكنها معطّلة (مع تلميح Premium) ما لم يكن لديك Premium أو يكن الوصول إلى البيانات المجانية مفعّلًا.
- اختر حزمة بيانات أساسية واحدة أو أكثر من الاختيار المتعدد (مسارات مثل
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**
| الحقل | الحقل |
|---|---|
accountsPayable | longTermInvestments |
accumulatedAmortization | negativeGoodwill |
accumulatedDepreciation | netDebt |
accumulatedOtherComprehensiveIncome | netInvestedCapital |
additionalPaidInCapital | netReceivables |
capitalLeaseObligations | netTangibleAssets |
capitalStock | netWorkingCapital |
capitalSurpluse | noncontrollingInterestInConsolidatedEntity |
cash | nonCurrrentAssetsOther |
cashAndEquivalents | nonCurrentAssetsTotal |
cashAndShortTermInvestments | nonCurrentLiabilitiesOther |
commonStock | nonCurrentLiabilitiesTotal |
commonStockSharesOutstanding | otherAssets |
commonStockTotalEquity | otherCurrentAssets |
currency_symbol | otherCurrentLiab |
currentDeferredRevenue | otherLiab |
date | otherStockholderEquity |
deferredLongTermAssetCharges | preferredStockRedeemable |
deferredLongTermLiab | preferredStockTotalEquity |
earningAssets | propertyPlantAndEquipmentGross |
filing_date | propertyPlantAndEquipmentNet |
goodWill | propertyPlantEquipment |
intangibleAssets | retainedEarnings |
inventory | retainedEarningsTotalEquity |
liabilitiesAndStockholdersEquity | shortLongTermDebt |
longTermDebt | shortLongTermDebtTotal |
longTermDebtTotal | shortTermDebt |
shortTermInvestments | temporaryEquityRedeemableNoncontrollingInterests |
totalAssets | totalCurrentAssets |
totalCurrentLiabilities | totalLiab |
totalPermanentEquity | totalStockholderEquity |
treasuryStock | warrants |
التدفق النقدي
الجداول: cashFlow.quarterly و**cashFlow.yearly**
| الحقل | الحقل |
|---|---|
beginPeriodCashFlow | endPeriodCashFlow |
capitalExpenditures | exchangeRateChanges |
cashAndCashEquivalentsChanges | filing_date |
cashFlowsOtherOperating | freeCashFlow |
changeInCash | investments |
changeInWorkingCapital | issuanceOfCapitalStock |
changeReceivables | netBorrowings |
changeToAccountReceivables | netIncome |
changeToInventory | otherCashflowsFromFinancingActivities |
changeToLiabilities | otherCashflowsFromInvestingActivities |
changeToNetincome | otherNonCashItems |
changeToOperatingActivities | salePurchaseOfStock |
currency_symbol | stockBasedCompensation |
date | totalCashflowsFromInvestingActivities |
depreciation | totalCashFromFinancingActivities |
dividendsPaid | totalCashFromOperatingActivities |
قائمة الدخل
الجداول: incomeStatement.quarterly و**incomeStatement.yearly**
| الحقل | الحقل |
|---|---|
costOfRevenue | netIncomeFromContinuingOps |
currency_symbol | netInterestIncome |
date | nonOperatingIncomeNetOther |
depreciationAndAmortization | nonRecurring |
discontinuedOperations | operatingIncome |
effectOfAccountingCharges | otherItems |
ebit | otherOperatingExpenses |
ebitda | preferredStockAndOtherAdjustments |
extraordinaryItems | reconciledDepreciation |
filing_date | researchDevelopment |
grossProfit | sellingAndMarketingExpenses |
incomeBeforeTax | sellingGeneralAdministrative |
incomeTaxExpense | taxProvision |
interestExpense | totalOperatingExpenses |
interestIncome | totalOtherIncomeExpenseNet |
minorityInterest | totalRevenue |
netIncome | |
netIncomeApplicableToCommonShares |
الأرباح — History
الجدول: earnings.History (ربحية السهم المعلنة مقابل التقديرات لكل تاريخ تقرير)
| الحقل | الوصف |
|---|---|
beforeAfterMarket | متى صدر التقرير بالنسبة إلى ساعات السوق |
currency | عملة التقرير |
date | تاريخ نهاية الفترة |
epsActual | ربحية السهم المعلنة |
epsEstimate | تقدير الإجماع لربحية السهم |
epsDifference | epsActual − epsEstimate |
reportDate | تاريخ الإعلان عن الأرقام |
surprisePercent | مفاجأة ربحية السهم كنسبة مئوية |
الأرباح — Trend
الجدول: earnings.Trend (التقديرات المستقبلية والتعديلات)
| الحقل | الحقل |
|---|---|
date | epsTrendCurrent |
period | epsTrend7daysAgo |
growth | epsTrend30daysAgo |
earningsEstimateAvg | epsTrend60daysAgo |
earningsEstimateLow | epsTrend90daysAgo |
earningsEstimateHigh | epsRevisionsUpLast7days |
earningsEstimateYearAgoEps | epsRevisionsUpLast30days |
earningsEstimateNumberOfAnalysts | epsRevisionsDownLast7days |
earningsEstimateGrowth | epsRevisionsDownLast30days |
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.
| الحقل | الحقل |
|---|---|
grossMargin | currentRatio |
operatingMargin | quickRatio |
netProfitMargin | cashRatio |
returnOnAssets | debtToEquityRatio |
returnOnEquity | debtToAssetsRatio |
operatingCashFlowMargin | interestCoverageRatio |
freeCashFlowMargin | assetTurnover |
freeCashFlowToNetIncome | inventoryTurnover |
receivablesTurnover |
رأس المال العامل
| الحقل | ملاحظات |
|---|---|
daysSalesOutstanding | أيام، منزلتان عشريتان |
daysInventoryOutstanding | أيام، منزلتان عشريتان |
daysPayablesOutstanding | أيام، منزلتان عشريتان |
cashConversionCycle | أيام، منزلتان عشريتان — ذو إشارة؛ والسالب (التحصيل قبل الدفع) مرغوب فيه لا خطأ |
operatingCycle | أيام، منزلتان عشريتان |
payablesTurnover | عدد عشري عادي |
workingCapitalTurnover | عدد عشري عادي |
fixedAssetTurnover | عدد عشري عادي |
netWorkingCapitalToAssets | عدد عشري عادي |
defensiveIntervalRatio | عدد عشري عادي |
الرافعة والتغطية
كلها أعداد عشرية عادية (4 منازل عشرية).
| الحقل | الحقل |
|---|---|
totalDebtToEquityRatio | netDebtToFreeCashFlowRatio |
netDebtToEquityRatio | equityMultiplier |
longTermDebtToEquityRatio | ebitdaInterestCoverageRatio |
longTermDebtToCapitalRatio | cashFlowInterestCoverageRatio |
capitalizationRatio | cashFlowToDebtRatio |
debtToEbitdaRatio | debtServiceCoverageRatio |
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.
| الحقل | الحقل |
|---|---|
grossProfitGrowthYoY | totalAssetsGrowthYoY |
operatingIncomeGrowthYoY | totalStockholderEquityGrowthYoY |
ebitdaGrowthYoY | totalDebtGrowthYoY |
operatingCashFlowGrowthYoY | dividendsPaidGrowthYoY |
freeCashFlowGrowthYoY | sharesDilutedGrowthYoY — السالب يعني إعادة شراء أسهم |
capitalExpendituresGrowthYoY | bookValuePerShareGrowthYoY |
معدلات النمو السنوي المركّب — 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 | |
netCurrentAssetValuePerShare | NCAV عند جراهام |
grahamNumber |
التقييم
الجداول: valuation.quarterly و**valuation.yearly** (إضافةً إلى valuation.latest غير الجدولي)
ثلاث قواعد:
- المضاعفات هي
marketCap / المجمَّع، لاprice / perShare. لا تعِد حسابها منperShare— فالمقارنات المعاد بيانها تجعل الاثنين يختلفان في الفترات الأقدم. - مضاعف
Noneبجانب عائد ذي إشارة أمر صحيح لا علّة. تتحول المضاعفات الموسومة null عند مقام غير موجب أدناه إلىNoneعندما لا يكون مقامها موجبًا، بينما تحتفظ العوائد وbookToMarketRatioبإشارتها. وتعرض الشركة الخاسرةpriceToEarningsRatio: NoneوearningsYield: -5.0. - المضاعفات لآخر اثني عشر شهرًا، حتى في الفترات ربع السنوية — فمضاعف الربحية ربع السنوي هو مضاعف حقيقي لآخر اثني عشر شهرًا لا ربع سنة محوَّل إلى سنوي.
البيانات الوصفية
| الحقل | ملاحظات |
|---|---|
date | تاريخ نهاية الفترة |
sharePrice | سلسلة بأربع منازل عشرية |
priceDate | YYYY-MM-DD |
priceLagDays | عدد صحيح |
priceBasis | "as-quoted" (الأحدث) / "split-adjusted" / "unreconciled" — تعامل مع "unreconciled" بحذر |
approximate | true في الفترات التاريخية (تعديل رجعي متبقٍّ للتوزيعات) |
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 |
altmanZScorePrivate | 4 منازل عشرية — Z-prime، حقوق الملكية الدفترية |
beneishMScore | 4 منازل عشرية |
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" |
| النسب / المضاعفات / معدلات الدوران / التغطية / الدرجات | رقم | 4 | 28.0462 |
| النسب المئوية (الهوامش والعوائد والتوزيع والنمو وCAGR ومعدل الضريبة) | رقم | 2 | 42.35 تعني 42.35% |
| الأيام (DSO / DIO / DPO / CCC / دورة التشغيل) | رقم | 2 | 29.2 |
الأعداد (piotroskiFScore وpriceLagDays) | رقم | عدد صحيح | 8 |
| التواريخ | سلسلة | — | YYYY-MM-DD |
كل مقياس قابل لأن يكون null باستقلال. ويُحذف كائن الفترة بالكامل عندما تكون كل مفاتيحه غير الوصفية null. والكتلة تكون {"quarterly": {}, "yearly": {}} حين تكون فارغة — لا null ولا محذوفة أبدًا. ولا تظهر NaN / Infinity أبدًا.
معلومات الشركة
companyInfo كائن مسطّح — ليس مفهرسًا بالتاريخ ولا يظهر في لقطات current(...) / get_data_with_offset(...). توصَّل إليه مباشرةً:
info = f.raw["companyInfo"]| الحقل | النوع | ملاحظات |
|---|---|---|
entityType | string | null | مثل "operating" |
entityName | string | null | الاسم القانوني للكيان |
cik | string | null | مفتاح SEC المركزي للفهرسة |
sic | string | null | رمز الصناعة SIC |
sicDescription | string | null | فئة SIC المقروءة |
stateOfIncorporation | string | null | رمز الولاية من حرفين |
fiscalYearEnd | string | null | الصيغة "MMDD" مثل "0926" = 26 سبتمبر |
category | string | null | فئة المودِع |
phone | string | null | رقم هاتف الاتصال |
exchanges | string[] | رموز البورصات |
tickers | string[] | رموز التداول |
businessAddress | object | null | street1 وstreet2 وcity وstateOrCountry وzipCode |
ملاحظات ومزالق
- احرس دائمًا ضد
None. إذا لم تُضبط البيانات الأساسية فإنfundamentalsتساويNone. وداخل اللقطة قد تكون أقسام منفردة (مثلearnings.Trendوscores)nullفي بعض الأعمدة أيضًا، وقد تغيب كتل توسعة المقاييس كليًّا في الحزم الأقدم. - مرّر دائمًا
symbol=في عمليات التشغيل متعددة الرموز وScreener — فقد لا يكون بديل الحزمة الأساسية هو الرمز الذي أنت عنده. - قد تكون الأرقام سلاسل نصية. كثيرًا ما يشحن JSON الأساسي المقاييس الرقمية كسلاسل؛ حوّلها بـ
float(...)عند الحساب. - الفهرسة بالأحدث أولًا تنطبق على الجداول المفهرسة بالتاريخ وعلى عمليات البحث بالإزاحة — فالفهرس
0هو أحدث فترة مؤهلة عند العمود، و1هو الذي قبله، وهكذا. - الطابع الزمني للعمود هو مصدر الحقيقة لمعرفة أي تقرير هو "الحالي" — مرّر
bar["t"](أوbar.t[0]) مباشرةً؛ ولا حاجة إلى تحليله بنفسك.

