الوثائق1.0 (latest)
الصفحاتالماسح (Screener) · 22 / 29

الماسح (Screener)

يصفّي الماسح مجموعة تضم أكثر من 10,000 سهم أمريكي بحسب قوائمها المالية ويعرض المطابقات في جدول قابل للفرز. ابنِ مرشّحًا بصفوف تصفية دون برمجة، أو اكتب Screener Script بلغة Python لمنطق لا تستطيع صفوف التصفية التعبير عنه. ويمكن لمرشّح محفوظ أن يختار رموز تشغيل أمامي جماعي أو اختبار رجعي.

تعمل المرشّحات على البيانات الأساسية فقط. فلا توجد أسعار حيّة ولا بيانات قطاعات، لذا لا يحتوي جدول النتائج على أعمدة Market Cap / Last / Net Change افتراضية — ويقوم وصف industry وفق SIC مقام القطاع. القيمة السوقية وقيمة المنشأة وسعر السهم عند نهاية الفترة متاحة كحقول في مجموعة Valuation، فيمكنك التصفية بها أو إضافتها أعمدةً؛ وهي تعكس نهاية كل فترة لا التسعيرة اليوم. والعملات المشفرة مستبعدة: إذ ليس لها قوائم مالية.

يجب أن تكون مسجّلًا للدخول — فالبيانات الأساسية تُنزَّل من خوادم QuantCraft.


أين توجد في الواجهة

أينكيف تصل إليها
صفحة الماسحشريط التنقّل ← Screener (مباشرةً بعد Trade)
ملف Screener Scriptبيئة تطوير QuantCraft ← New File ← النوع Screener Script
هدف التشغيل الأمامي الجماعيAutoTrading أو QuantCloud ← تشغيل جماعي جديد ← الهدف Screener
رموز الاختبار الرجعيبيئة تطوير QuantCraft ← Run backtest ← Symbol source ← Screener
الوكلاءنافذة Test الخاصة بوكيل (Scheduler ← Symbol source ← Screener) وأهداف New Agent Bulk Run
الماسح في نافذته الخاصةصفحة الماسح ← زر Pop out بجوار عنوان الصفحة

للصفحة بطاقتان: Filters (بعلامتي التبويب No-Code وPython Script) وResults. ويوجد Run في تذييل المرشّحات بجوار Reset filters. والسهم (chevron) في بطاقة Filters (Collapse filters) يطويها ليمنح النتائج مساحة أكبر.

يفتح زر Pop out بجوار العنوان الماسح في نافذة منفصلة، فيمكنك إبقاء مرشّح على شاشة ثانية أثناء عملك في بيئة التطوير أو على رسم بياني. النافذة هي الصفحة نفسها — الإعدادات المسبقة وScreener Scripts مشتركة مع النافذة الرئيسية — لكن لكل نافذة مرشّحاتها ونتائجها الخاصة، ولا يعمل المرشّح إلا في نافذة واحدة في كل مرة. أغلقها بـ ← Return to main window؛ ولن يُغلق التطبيق ما دامت نافذة منبثقة مفتوحة.

وعندما يتحكم QuantCraft AI في نافذة الماسح سترى "The AI is using this window" وتُقفل عناصر التحكم إلى أن ينتهي.


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

في أول مرة تستخدم فيها الماسح ينزّل كامل مجموعة البيانات الأساسية إلى جهازك. وإلى أن تحتوي تلك الذاكرة المؤقتة على بيانات، تُستبدل بطاقتا Filters وResults ببوابة فيها زر Download Fundamentals.

يبدأ التنزيل عند فتح التطبيق، لا عند فتح الماسح — وبحلول وصولك إلى الصفحة يكون قيد التشغيل أو مكتملًا في الغالب. والنقر على Run أثناء التنزيل لا يبدأ تنزيلًا ثانيًا أبدًا.

  • التشغيل الأول البارد يستغرق دقائق. وكل تشغيل بعده يستغرق ثوانيَ.
  • يعرض شريط التشغيل المرحلة (connecting → universe → download → convert → screen) وعدّاد أجزاء مثل shard 14 of 32 وعدد الممسوح/الإجمالي وزر Cancel. ويعرض التشغيل الدافئ مرحلة التصفية فقط.
  • يعدّ الشريط الوقت المنقضي تصاعديًا ولا يعرض تقديرًا للوقت المتبقي — فتشغيل تتفاوت مدته بالدقائق لا يمكن التنبؤ به بصدق. وعند انتهائه تحصل على ملخّص مثل 12 matched in 3m 20s متبوعًا بـ · Fundamentals updated <time>. وإن تعذّر جلب بعض الرموز فإن رابطًا قابلًا للنقر N unavailable يفتح قائمتها.
  • يُستأنف التنزيل المنقطع في التشغيل التالي بدل البدء من جديد. والإلغاء في منتصف التنزيل آمن: إذ يُعاد جلب الجزء غير المكتمل في المرة القادمة ببساطة.
  • يستمر التنزيل حتى لو غادرت الصفحة.

مدى تكرار تحديث البيانات

متىما يُنزَّل
أول مرشّح تشغّلهالمجموعة كلها
أي مرشّح لاحق في اليوم UTC نفسهلا شيء
أول مرشّح في اليوم التاليالرموز التي مضى على أحدث إيداع لها أكثر من 62 يومًا فقط

62 يومًا تساوي نحو ربع سنة، فلا يُعاد فحص الشركة إلا حين يكون إيداعها التالي قد صدر على الأرجح.

على يمين شريط التشغيل سترى سطرًا مثل 10,384 symbols cached · 250 MB مع زر Clear cache (مخفي أثناء تشغيل مرشّح، ومعطّل ما دام الذكاء الاصطناعي يستخدم النافذة). ويطلب المسح تأكيدًا — Clear cache أو Keep it — لأنه يتخلص من تنزيل استغرق دقائق. والذاكرة المؤقتة بيانات يمكن إعادة توليدها ولا يزيلها إلغاء التثبيت، ولهذا فهي ظاهرة وقابلة للاستعادة هنا.

وبعد تحديث للتطبيق يغيّر صيغة الذاكرة المؤقتة، يُعيد المرشّح التالي تنزيل المجموعة كلها مرة واحدة (حدث ذلك عند إضافة Per Share وValuation وScores).


بناء مرشّح (No-Code)

يُقرأ كل صف تصفية من اليسار إلى اليمين: Period ← Field ← Filter type ← مدخل (مداخل) القيمة. استخدم + لإضافة صف و− لإزالته. ويسأل زر + عمّا إذا كان الصف الجديد صف Fundamentals أم صف Industry.

تُدمج الصفوف بـ AND — يجب أن يستوفي الرمز كل صف مفعّل. (الإعداد المسبق الذي أنشأه الذكاء الاصطناعي أو استُورد من ملف قد يستخدم OR بدلًا من ذلك — "Any filter can match"؛ ويبيّن Load Preset أيًّا منهما.)

صف البداية الافتراضي (Quarterly / Total Revenue / % Change / 1 period back / min 0%) صالح كما هو، لذا يعمل Run فورًا. وقبل بدء التشغيل يُتحقَّق من كل صف مفعّل؛ فإن كان أحدها ناقصًا تحصل على إشعار وخطأ مضمّن في ذلك الصف، ولا يبدأ التشغيل — فمسح يستغرق دقائق لا ينبغي أن يبدأ باستعلام غير صالح.

مثال تطبيقي: Quarterly / Total Revenue / % Change / periods back 3 / min 1 / max 3 يجد الشركات التي نمت إيراداتها بين 1% و3% خلال الأرباع الثلاثة الأخيرة.

أنواع المرشّحات

يقرأ كل مرشّح أحدث قيمة ما لم يُذكر خلاف ذلك.

المرشّحالمعاملاتما يطابقه
Rangemin، maxأحدث قيمة تقع بين min وmax شاملتين. اترك جانبًا فارغًا لإلغاء الحد.
Abovevalueأحدث قيمة أكبر من value.
Belowvalueأحدث قيمة أصغر من value.
Equalsvalue، toleranceأحدث قيمة ضمن ± tolerance من value.
Has a value—وجود أحدث قيمة. مفيد مع Financials Extended.
% Changeperiods back، min %، max %التغيّر المئوي من n فترة سابقة إلى الأحدث. يفشل إذا كانت القيمة الابتدائية صفرًا.
Absolute Changeperiods back، min، maxالفرق الخام (الأحدث − n سابقة).
QoQ Change %min %، max %التغيّر المئوي مقابل الربع السابق. ربع سنوي فقط — منتقي الفترة مقفل.
YoY Change %min %، max %التغيّر المئوي مقابل العام السابق. الفارق تلقائي — 4 للربع سنوي و1 للسنوي.
CAGR %periods back، min %، max %معدل النمو السنوي المركّب. يجب أن يكون الطرفان موجبين.
Average over Nperiods back، min، maxمتوسط آخر N فترة. أي قيمة مفقودة في النافذة تُسقط الرمز.
Grew N in a rowperiods backارتفعت القيمة في كل فترة عبر النافذة.
Fell N in a rowperiods backانخفضت القيمة في كل فترة عبر النافذة.
Above X for Nvalue، periods backكل واحدة من آخر N فترة أعلى من value.
Below X for Nvalue، periods backكل واحدة من آخر N فترة أدنى من value.
Top N by fieldnمرشّح ترتيب — يُبقي أفضل n رمزًا من كل ما مُسح.
Percentile rank ≥min %مرشّح ترتيب — يُبقي الرموز عند ذلك المئين أو فوقه من كل ما مُسح.

يُحسَم مرشّحا الترتيب على مستوى المجتمع كله، لا لكل رمز، لذا يُحسمان بعد مسح كل رمز. والرمز الذي لا قيمة له في الحقل المرتَّب لا يمكنه الفوز بأيٍّ منهما أبدًا.

أكبر قيمة لـ periods back يمكن استخدامها هي 40.

اختيار حقل

منتقي الحقول قابل للبحث ويجمع الحقول بهذا الترتيب:

Ratios ← Valuation ← Scores ← Per Share ← Income Statement ← Balance Sheet ← Cash Flow ← Financials Extended ← Earnings History

تأتي النسب أولًا لأنها الأكثر صلة بالماسح وهي موحّدة الوحدات مسبقًا. وتتبع مدخلات القيمة وحدة الحقل — $ أو % أو أيام أو أسهم أو مبالغ لكل سهم أو أعداد أو رقم مجرّد بحسب الحال. راجع مرجع حقول البيانات الأساسية لمعرفة محتوى كل مجموعة.

  • تدعم كل المجموعات ربع السنوي والسنوي باستثناء Earnings History وهي ربع سنوية فقط، وحقول CAGR (revenueCagr3y وrevenueCagr5y …) وهي سنوية فقط وتختفي من منتقي الربع السنوي. ويؤدي تغيير الفترة إلى مسح الحقل إن لم يكن موجودًا للفترة الجديدة.
  • "Periods back" يعدّ الصفوف داخل الفترة التي اخترتها. ربع سنوي + 3 تعني ثلاثة أرباع؛ وسنوي + 3 تعني ثلاث سنوات مالية. ولا يُخلط بين الاثنين.
  • مضاعفات Valuation هي لآخر اثني عشر شهرًا حتى في صف ربع سنوي.
  • تختلف حقول Financials Extended باختلاف الرمز. ولا تظهر في المنتقي إلا بعد تنزيل ذاكرة البيانات الأساسية المؤقتة، وتُوسَم بـ "varies by symbol". ومرشّح على حقل لا تُبلغ عنه شركة ما يُسقط تلك الشركة ببساطة — اقرنه بـ Has a value حين يهمّ ذلك.
  • تُتجاهل نهايات الفترات المؤرَّخة بالمستقبل، فلا تكون "الأحدث" أبدًا فترة لم تحدث بعد.
  • غير قابلة للتصفية: Company Info وEarnings Trend وEarnings Annual وTTM والتقييم الأحدث (حتى اليوم) ومصدر المقاييس ومكوّنات درجات Piotroski / Beneish ومفاتيح النص أو نعم/لا مثل priceBasis أو approximate. فهي إمّا لا تحمل فترة تقرير للمقارنة أو ليست أرقامًا.

الحقول المتقاعدة. سُحبت ثمانية حقول قديمة في Financials Extended لأن نسخًا أفضل منها صارت متاحة: ebitda وebitdaMargin وenterpriseValue وpriceToEarnings وpriceToBook وpriceToSales وevToEbitda وevToRevenue. والمرشّح المحفوظ الذي استخدم أحدها يفقد ذلك الصف (أو العمود) عند التحميل — أعد بناءه من مجموعة Valuation التي تحسب هذه القيم على أساس آخر اثني عشر شهرًا، فتختلف القيم عن القديمة. (أُعيدت تسمية ratios.debtToEquity ببساطة إلى ratios.debtToEquityRatio وما زال يُحمَّل.)

صفوف Industry

يستبدل صف Industry عناصر التحكم في الحقل/النوع/القيمة باختيار متعدد للصناعات؛ ويجتاز الرمز إن كانت صناعته إحدى ما اخترت. ويجب اختيار صناعة واحدة على الأقل. وتُبنى القائمة من البيانات التي نزّلتها فعلًا.


وضع Python Script

اختر Python Script عندما لا تكفي حزمة مقارنات مربوطة بـ AND — حساب متعدد الحقول أو منطق شرطي أو درجة ترتيب خاصة بك.

أنشئ الملف في بيئة تطوير QuantCraft عبر New File ← Screener Script؛ ويأتي بقالب جاهز يعمل. ويؤهَّل أيضًا أي ملف .py في مساحة عملك يعرّف filter() على المستوى الأعلى. وتسردها علامة تبويب Python Script في الماسح (موسومة بمسار المجلد ليبقى التمييز بين ملفات المجلدات المختلفة ممكنًا) وتعرض معاينة للملف المحدد. وتُرسَل ملفات مساحة عملك الأخرى مع التشغيل، فيمكن لنصّك استيراد وحداتك المساعدة.

def filter(fundamentals, symbol): q = fundamentals["incomeStatement"]["quarterly"] if len(q) < 4: return {"result": False} latest, year_ago = q[-1]["totalRevenue"], q[-4]["totalRevenue"] if latest is None or not year_ago: return {"result": False} growth = (latest - year_ago) / abs(year_ago) return {"result": growth > 0.10, "value": growth} def rank(value, symbol): return min(max(value, 0), 1) * 100

تُستدعى filter(fundamentals, symbol) مرة لكل رمز ويجب أن تُرجع قاموسًا بالمفتاح المنطقي "result". و"value" اختياري وهو ما تريد حمله إلى الترتيب. والنص الذي يرفع استثناءً أو يُرجع True مجردة أو قاموسًا بلا "result" منطقي يُحتسب غير مطابق لذلك الرمز وحده — فرمز سيئ واحد لا يُجهض التشغيل أبدًا.

أما rank(value, symbol) فاختيارية وتعمل فقط للرموز المطابقة. أرجع رقمًا حقيقيًا — أي مقياس يصلح (0-1 أو 1-10 أو 0-100)، والأعلى يعني الأفضل دائمًا. وهي تملأ عمود Rank القابل للفرز الذي يظهر في وضع Python Script فقط. وrank() الذي يفشل لا يلغي مطابقة الصف؛ إذ يحتفظ الصف بمطابقته ويظهر ترتيبه — ويُفرز أخيرًا.

الوسيط symbol اختياري في الدالتين — وما زالت الصيغتان القديمتان ذواتا الوسيط الواحد filter(fundamentals) وrank(value) تعملان.

الوسيط fundamentals

{ "symbol": "AAPL", "entityName": "Apple Inc.", "sicDescription": "ELECTRONIC COMPUTERS", "balanceSheet": {"quarterly": [...], "yearly": [...]}, "incomeStatement": {"quarterly": [...], "yearly": [...]}, "cashFlow": {"quarterly": [...], "yearly": [...]}, "ratios": {"quarterly": [...], "yearly": [...]}, "perShare": {"quarterly": [...], "yearly": [...]}, "valuation": {"quarterly": [...], "yearly": [...]}, "scores": {"quarterly": [...], "yearly": [...]}, "financialsExtended": {"quarterly": [...], "yearly": [...]}, "earnings": {"history": [...]}, }

لا شيء "بتاريخ الرفع" يصل إلى النص: إذ لا تحمل ttm وvaluation.latest وmetricsInputs وmetricsHealth فترةً، والمرشّح يقارن الفترات عبر الرموز. ومضاعفات valuation هي لآخر اثني عشر شهرًا حتى في صف ربع سنوي، ومضاعف None بجانب عائد ذي إشارة يعني مقامًا غير موجب لا بيانات مفقودة.

  • القيم أرقام أو None — لا سلاسل نصية مثل "1234.00". وتُحذف تمامًا المفاتيح التي ليست أرقامًا: beforeAfterMarket وreportDate وcurrency في earnings.history، وتفصيلا piotroskiComponents / beneishComponents في scores، والعلامات النصية مثل priceBasis / approximate في valuation.
  • الصفوف مرتبة من الأقدم إلى الأحدث، لذا فإن rows[-1] هو أحدث فترة. ويحمل كل صف date (نهاية فترته).
  • تحصل على أحدث 12 ربعًا وأحدث 6 سنوات كحد أقصى، مما يحدّ مدى رجوع النص إلى الوراء.

كل ما يطبعه نصّك بـ print() يُلتقط ويعرضه زر Output logs بجوار Run — حتى في عمليات التشغيل الفاشلة، لترى ما طُبع قبيل الانهيار. ويتسع المخزن المؤقت لـ 200,000 حرف ويُسقط الأقدم عند تجاوزه. وتشغيل no-code لا يمسح سجلات آخر تشغيل لنص.

يُحجب Run مع إشعار إذا لم يُحدَّد نص أو لم يكن في الملف المحدد filter().


النتائج

يعرض كل صف نجمة وزر رسم بياني وRank (في وضع Python Script فقط) وSymbol وCompany وIndustry وAs of، إضافةً إلى عمود لكل صف تصفية يعرض القيمة المطابِقة (وضع No-Code) وأي حقول إضافية تضيفها.

"As of" هو أحدث نهاية فترة استُخدمت لذلك الرمز — الفترة المالية التي قُيِّمت مرشّحاتك عليها فعلًا. ولا يكون أبدًا فترة مستقبلية.

عنصر التحكمما يفعله
رأس العموديفرز الجدول كله لا الصفحة فقط. وتُفرز القيم الفارغة دائمًا في النهاية في الاتجاهين.
منتقي الأعمدةيضيف أعمدة النتائج أو يعيد ترتيبها. لا يعيد تشغيل المرشّح أبدًا — فالحقل الجديد فعلًا يجلب ذلك العمود فقط للصفوف المعروضة.
مربع البحثيصفّي الصفوف التي لديك بالفعل.
Tradable onlyيخفي الرموز غير الموجودة في قوائم الرموز القابلة للتداول في حساب وسيطك.
النجمةتضيف الرمز إلى قائمة مراقبة. وتظهر الرموز المنجّمة كشرائح فوق الجدول وتبقى بين الجلسات.
الرمز (نقرة)يفتح نافذة تفاصيل البيانات الأساسية لكل رمز، تتضمن علامة تبويب Factor Exposure.
زر الرسم البيانييفتح رسم Trade لذلك الرمز في نافذة منبثقة (للرموز القابلة للتداول فقط).

تظهر المطابقات كلها دفعة واحدة عند انتهاء التشغيل، فيبقى الجدول فارغًا أثناء سير المرشّح — تابع التقدّم في الشريط.

النتائج غير محفوظة. تؤدي إعادة تحميل التطبيق إلى مسح الجدول عمدًا، لأن نتيجة قديمة أسوأ من لا شيء. أما مرشّحاتك وأعمدتك والرموز المنجّمة وعلامة التبويب النشطة والنص المحدد فـتُتذكَّر.


الإعدادات المسبقة

الإعداد المسبق لقطة مسمّاة لـ صفوف التصفية لديك ودمجها وأعمدة النتائج.

الزرما يفعله
Save Presetيسمّي المرشّح الحالي ويحفظه. معطّل إلى أن تغيّر شيئًا عن الافتراضي — فاختيار الأعمدة وحده لا يُحتسب.
Load Presetيتصفح الإعدادات المحفوظة، ويعرض وصف كل منها، وهل مرشّحاته مدموجة بـ AND ("All filters must match") أم بـ OR ("Any filter can match")، وملخّصًا بلغة واضحة لمرشّحاته.
Update {name}يستبدل الإعداد الذي حمّلته بدل إنشاء إعداد جديد. ويتحوّل Save Preset إلى هذا عند تعديل إعداد محمَّل.
Reset filtersيمسح الرابط بالإعداد المحمَّل، فيعود الزر إلى Save Preset.

داخل Load Preset يمكنك أيضًا:

  • Delete preset — يزيله بعد تأكيد.
  • Export preset — يحفظه كملف JSON يمكنك مشاركته أو الاحتفاظ بنسخة احتياطية منه.
  • Import preset — يحمّل إعدادًا من ملف JSON كهذا.

استخدام مرشّح لاختيار الرموز

عمليات التشغيل الأمامية الجماعية

في علامة تبويب Targets في نافذة New Run اختر نطاق Screener. يتداول التشغيل ما يطابقه إعداد محفوظ أو Screener Script، ويعيد التصفية كل Refresh interval (days) ما دام قيد التشغيل المباشر. ويُبقي Include tickers with open positions المركز في الدوران بعد أن يتوقف عن المطابقة. وأهداف Screener للأسهم فقط. ومع تفعيل Use fundamentals يحصل كل رمز في المرشّح الحالي على بياناته الأساسية تلقائيًا، وتتبع المجموعة كل تصفية جديدة.

وعلى QuantCloud يحتفظ المنفِّذ بنسخته الخاصة من البيانات الأساسية التي يحتاجها المرشّح. فأول تشغيل للماسح على منفِّذ جديد ينزّلها كلها، وهذا يستغرق وقتًا؛ وبعدها لا يُحدِّثها إلا مرة في اليوم. ويستخدم المنفِّذ تسجيل دخولك للتنزيل ولا يستطيع تجديده بنفسه، لذا ففي تشغيل يمتد أيامًا كثيرة تواصل إعادات التصفية استخدام البيانات التي لديه بعد انتهاء صلاحية تسجيل الدخول.

الحقلملاحظات
Screener sourceScreener preset أو Python script.
Preset / Screener scriptأيهما يُشغَّل.
Sort column / Directionكيف تُرتَّب مطابقات الإعداد المسبق قبل تطبيق الحد.
Rank directionللنصوص — أي طرف من درجة rank() للنص يؤخذ أولًا.
Limitعدد الرموز المراد تداولها. و0 يأخذ كل المطابقات.
Refresh interval (days)كم مرة يُعاد تشغيل المرشّح ما دام التشغيل مباشرًا. الحد الأدنى والافتراضي يوم واحد.
Refresh time (ET)وقت اليوم لكل إعادة تصفية. الافتراضي 16:30 (بعد نصف ساعة من إغلاق السوق الأمريكي).
Include tickers with open positionsيضيف الرموز التي لديك فيها مركز فعلًا حتى لو لم تعد تطابق، لكيلا يُسقط تشغيل مباشر مركزًا بصمت.

لماذا 16:30 ET هو الافتراضي. يؤدي اعتماد مجموعة جديدة إلى إعادة تشغيل التشغيل، فإعادة تصفية عند 11:00 ستقاطع التداول المباشر. وتثبيتها في وقت بعد الإغلاق يعني أن التحديث يجري حين لا يوجد تداول وأن قائمة الرموز الجديدة جاهزة قبل افتتاح الجلسة التالية.

  • الوقت دائمًا بتوقيت السوق (ET) مهما كان منطقتك الزمنية. ويعرض النص المساعد تحت الحقل ما يعادله بتوقيتك المحلي، فـ16:30 ET · 21:30 your time هي اللحظة نفسها لا إعدادان.
  • التغيير مسموح في أي وقت. وإن اخترت وقتًا داخل جلسة 09:30–16:00 ET يظهر تحت الحقل تحذير يشرح أن إعادة التشغيل ستقاطع التداول، لكن التشغيل يبدأ على أي حال — فالقرار لك.
  • يعمل الفاصل والوقت معًا. 1 يوم عند 16:30 يعيد التصفية كل يوم بعد الإغلاق؛ و3 أيام عند 16:30 تعيد التصفية بعد الإغلاق كل ثلاثة أيام.
  • ترك الحقل فارغًا أو إدخال ما ليس بصيغة HH:MM يحجب التشغيل بخطأ مضمّن.

راجع التداول الآلي (AutoTrading) وQuantCloud لنافذة New Run كاملة.

الاختبارات الرجعية

في علامة تبويب Symbol & data في نافذة Run backtest اضبط Symbol source على Screener. فبدل تداول قائمة ثابتة، يعيد الاختبار الرجعي تشغيل مرشّحك أثناء تقدّمه ويتداول ما كان مطابقًا عند تلك النقطة من المحاكاة.

الإعدادما يفعله
Screener sourceScreener preset أو Python script.
Sort column / Directionكيف تُرتَّب مطابقات الإعداد المسبق قبل تطبيق الحد.
Rank directionللنصوص — أي طرف من درجة rank() لديك يؤخذ أولًا.
Limitعدد الرموز المتداولة في كل إعادة توازن. و0 يأخذ كل المطابقات.
Refresh interval (days)كم مرة يُعاد تشغيل المرشّح، بالأيام التقويمية المحاكاة. تتطلب النصوص 7 أيام أو أكثر.
Keep tickers with an open positionيُبقي الرمز قابلًا للتداول بعد توقفه عن المطابقة، ليظل بالإمكان إدارة مركز مفتوح.

تتبع البيانات الأساسية المرشّح. مع تفعيل Uses fundamentals يحصل كل رمز مُفرَّز على بياناته الأساسية في on_bar / on_tick تلقائيًا — دون حاجة إلى اختيارها. وتُقرأ من ذاكرة الماسح المؤقتة، فالرمز الذي نزّله الماسح بالفعل لا يكلّف تنزيلًا إضافيًا. مرّر دائمًا symbol=symbol عند قراءتها — راجع البيانات الأساسية.

يؤثر "Keep tickers with an open position" في التداول لا في التقييم. وهو مفعّل، يواصل الرمز الذي ما زلت تحتفظ به تلقّي الأعمدة بعد خروجه من المرشّح، فتستطيع استراتيجيتك الخروج منه. وهو معطّل، يتوقف الرمز عن تلقّي دوال الاستدعاء ويبقى المركز مفتوحًا إلى أن ينتهي الاختبار الرجعي. وفي الحالتين يُقيَّم المركز دائمًا بالسعر الحقيقي للرمز، فيكون منحنى حقوق الملكية والمقاييس صحيحين.

يُعاد إطلاق on_init عند كل إعادة توازن. عندما يكون مصدر رموز الماسح نشطًا، يستدعي المحرك on_init(symbols=<ticker list>) مجددًا في كل مرة يُعاد فيها تشغيل المرشّح. ويتيح هذا لاستراتيجيتك الاستجابة لمجموعة جديدة دون إعادة تشغيل المحاكاة. نقاط أساسية:

  • عند بدء التشغيل يُطلَق on_init مرتين متتاليتين — استدعاء الإعداد القياسي (مع symbols=None) يليه فورًا نتيجة المرشّح الأولى.
  • يرى كل إطلاق جديد الحالة على مستوى الوحدة التي تركها الاستدعاء السابق. ولا تُعاد تهيئة الحالة بين عمليات إعادة التوازن.
  • لا تتأثر الاستراتيجيات التي تعلن def on_init(): (بلا معامل) — إذ تُطابَق الوسائط الاختيارية بالاسم، فيُتجاهل symbols الغائب ببساطة.

بيانات التقويم لمجموعة مُفرَّزة

يعمل Include calendar data مع مصدر رموز الماسح. وتُحمَّل التقاويم بعد أن يحدّد المرشّح قائمة الرموز الكاملة لإعادة التوازن — ولا يوجد تأخير بحث لكل تيك. نقاط يجدر معرفتها:

  • الرموز التي يطابقها المرشّح لكن دون أعمدة أسعار (خارج نطاق التواريخ أو أُلغي إدراجها قبل بدء التشغيل) لا تكلّف أي طلب تقويم.
  • كثيرًا ما يطابق المرشّح الواسع رموزًا ليس لها تقويم على الخادم — عادةً رموز أصغر أو أقل تغطية. ويبلّغ سجل التشغيل بالعدد بدل أن يفشل التشغيل.
  • تُحدَّث التقاويم عند كل إعادة توازن لتغطية الرموز المضافة حديثًا.

تظهر النتائج في علامة تبويب Screener Output بجوار Logs، وتعرض كل إعادة توازن كتاريخ قابل للطيّ. انقر + لتوسيع تاريخ ورؤية الرموز المتداولة في تلك النافذة، أو استخدم Expand all. ولأن المرشّح يُحسم قبل أول عمود فإن الجدول الزمني كله متاح من البداية.

متطلبات يجدر معرفتها: يحتاج الاختبار الرجعي المدفوع بالماسح إلى تاريخي بدء وانتهاء صريحين؛ والأطر الزمنية الإضافية غير مدعومة (لذا يُرجع get_bar القيمة None — استخدم إزاحات bar.close[i] الخاصة بكل رمز للسجل)؛ ولا يستطيع Debug Test استخدام مصدر رموز الماسح — بدّل إلى Selected symbols لتصحيح الأخطاء. راجع الاختبارات الرجعية.

اللحظة الزمنية وانحياز البقاء

لا ترى كل إعادة توازن إلا التقارير التي كانت قد أُودعت فعلًا بذلك التاريخ. فمرشّح في 5 مايو 2021 لن يرى ربعًا انتهى في أبريل ولم يُنشر إلا في يونيو. والاستثناء فترة ليس لها تاريخ إيداع مسجّل، وتُقبل ابتداءً من نهاية فترتها — وهذا نادر، لكنه يعني إمكان حدوث قدر ضئيل من الاستشراف هناك. وهذا ما يجعل النتيجة صادقة، وهو أيضًا سبب أن اختيارات الاختبار الرجعي لن تطابق ما تحصل عليه بتصفية التاريخ نفسه مقابل بيانات اليوم.

ما زال أمران يعكسان اليوم لا التاريخ المحاكى:

  • في خلاصة وسيط متصل، تُصفّى المطابقات إلى الرموز القابلة للتداول لدى وسيطك الآن، فتُسقَط شركة أُلغي إدراجها منذئذٍ حتى من إعادة توازن كانت فيها قابلة للتداول تمامًا. وتتخطى خلاصة QuantCraft (B2) هذا الفحص.
  • لا تحتفظ مجموعة الرموز المخزّنة مؤقتًا إلا بالشركات التي ما زالت مجموعة البيانات الأساسية تحملها، لذا فشركة أُلغي إدراجها منذ زمن طويل لن تظهر إطلاقًا.

تنطبق دقة اللحظة الزمنية على القيم التي يقرؤها المرشّح، لا على أي الشركات موجودة فيه. ضع ذلك في الحسبان مع النتائج بعيدة المدى.


تفسير النتائج

عدم كفاية السجل يُسقط الرمز — ولا يجتاز بهدوء أبدًا. فطلب "Grew 8 in a row" لشركة لديها بيانات خمسة أرباع يستبعدها. والاستبعاد بدل الإجازة يضمن أن مجموعة النتائج لا تبالغ أبدًا.

حالات أخرى يُستبعد فيها الرمز بدل أن يطابق:

  • لا يمكن حساب % Change من قيمة ابتدائية صفرية.
  • يحتاج CAGR % إلى أن يكون الطرفان موجبين.
  • يفشل Average over N إذا فُقدت أي قيمة في النافذة — فالقيم الفارغة لا تُتخطى.
  • حقل لا تُبلغ عنه الشركة يُسقطها، وهذا يهمّ أكثر في Financials Extended.
  • ترفض مرشّحات الترتيب الرموز التي لا قيمة لها في الحقل المرتَّب.

غرابة واحدة في الترتيب: القيم المتساوية لا تتشارك رتبة مئينية، فقد تقع قيمتان متطابقتان على جانبين متقابلين من حد Percentile rank ≥.

وإن تعذّر الوصول إلى الخلفية تحصل على خطأ واضح بدل تراجع صامت بطيء، ويُبلَّغ عن تشغيل يصمت 90 ثانية كخطأ بدل أن يتعلّق.


انظر أيضًا

  • التداول الآلي (AutoTrading) — عمليات التشغيل الأمامية الجماعية، بما فيها نطاق الهدف Screener
  • QuantCloud — منفِّذات سحابية بمهام جماعية مدفوعة بالماسح
  • الاختبارات الرجعية — استخدام مرشّح كمصدر لرموز الاختبار الرجعي
  • البيانات الأساسية — قراءة البيانات الأساسية داخل دوال استدعاء الاستراتيجية، ومرجع الحقول
  • QuantCraft AI — ترك الذكاء الاصطناعي يبني المرشّحات ويشغّلها نيابةً عنك
  • عوامل فاما-فرينش — بيانات العوامل وراء علامة التبويب Factor Exposure في نافذة التفاصيل
19 دقائق للقراءةاقترح تعديلًا ↗
الماسح (Screener) — الوثائق (1.0 (latest)) | QuantCraft