اختيار مكتبة backtesting هو في جوهره رهان على الصيانة. فالكود الذي يُسعّر استراتيجيتك يجب أن يبقى حيًّا عندما تغيّر إحدى المنصّات واجهة برمجة تطبيقاتها، أو عندما يكسر إصدار جديد من pandas أحد عمليات الاستيراد، أو عندما تكتشف خللًا في الساعة الثانية صباحًا. لذلك تبدأ هذه المراجعة بأقل الإشارات بريقًا وأكثرها حسمًا — هل المشروع تتم صيانته فعلًا؟ — ثم تنتقل بعد ذلك فقط إلى المعمارية والسرعة والمزايا.
كل رقم من أرقام GitHub أدناه جُلب حيًّا من واجهة GitHub API بتاريخ 2026-06-22، وجرى التحقّق من الادعاءات الأصعب عبر مقارنتها بالمصادر الأولية (مستودعات المشاريع، الوثائق الرسمية) والتحقّق منها بأسلوب تنازعي. وحيثما كان الرقم أفضل حالة يبلّغ عنها المُورّد بنفسه، فقد جرى التنويه إلى ذلك.
فحص واقع الصيانة
إليك المنظومة بأكملها مرتّبة بحسب نجوم GitHub، ومُلوّنة بحسب ما إذا كان العمل عليها جاريًا فعلًا:

الخلاصة المزعجة: اثنان من أكثر الأسماء حصدًا للنجوم وحضورًا في المدوّنات هما عمليًّا من تراث الماضي.
- Backtrader (22.1k ⭐) هو الاسم الشهير الذي يوصي به الجميع — ومع ذلك كان آخر commit له على الفرع الافتراضي في أبريل 2023، مع عدم نشر أي إصدار GitHub على الإطلاق. ليس مهجورًا (فالمشكلات لا تزال تلقى اهتمامًا من حين لآخر)، لكنه خامل. وتصنّفه الكتالوجات المنسّقة على أنه
INACTIVE. - Zipline (19.9k ⭐)، محرّك Quantopian القديم، هُجر في 2020 عندما أغلقت Quantopian أبوابها. قائمة البدائل الخاصة بـ kernc تدرجه تحت بند "عتيق / غير مُصان." أما الخليفة المُصان فهو fork منفصل، اسمه
zipline-reloaded(1.8k ⭐)، من إعداد Stefan Jansen. - PyAlgoTrade (4.7k ⭐) مؤرشف — للقراءة فقط رسميًّا. و QSTrader (3.4k ⭐) وأطرا العملات المشفّرة القديمان
blanklyوqtpylibمُصنّفة بأنها غير مُصانة.
في المقابل، المشاريع التي تطرح إصدارات حقيقية في 2026 هي Freqtrade (51.7k ⭐) و NautilusTrader (24.1k ⭐) و LEAN (20k ⭐) و backtesting.py (8.5k ⭐) و Jesse (8.1k ⭐) و vectorbt (8.0k ⭐) و PyBroker (3.4k ⭐) و bt (2.9k ⭐) و Lumibot (1.7k ⭐). النجوم تقيس التاريخ؛ أما تواريخ الـ commit فتقيس ما إذا كان أحدٌ ما سيصلح خللك.
معماريتان: المُوجّهة بالأحداث مقابل المُتّجهة
التفرّع الآخر الذي يحسم كل شيء هو كيف يُشغّل المحرّك استراتيجيتك.
- المحرّكات المُوجّهة بالأحداث تدور شمعة بشمعة، فتستدعي استراتيجيتك عند كل شمعة جديدة. وهي تحاكي تنفيذ الأوامر، والانزلاق السعري، والمخاطرة داخل الشمعة بواقعية، والأهم — أن الكود نفسه يمكن أن يعمل في التداول المباشر. كل من Backtrader و NautilusTrader و backtesting.py و Freqtrade و Lumibot و Zipline مُوجّهة بالأحداث.
- المحرّكات المُتّجهة (أبرزها vectorbt) تتخطّى الحلقة كليًّا: فهي تحزم آلاف إعدادات الاستراتيجية في مصفوفات NumPy وتحسبها كلّها دفعة واحدة. وهذا سريع بدرجة مذهلة في البحث عن المعاملات، لكنه يفترض تنفيذًا عند الشمعة التالية ويتجاهل الانزلاق داخل الشمعة، والتنفيذ الجزئي، وفحوص المخاطرة في منتصف الشمعة.
لا واحدة منهما تفوز تمامًا. أنت تبحث بالسريعة وتتحقّق بالواقعية. والمزيد عن هذه المقايضة أدناه.
القادة النشطة الصيانة
NautilusTrader — بجودة الإنتاج، مُوجّه بالأحداث، نواة Rust
NautilusTrader (24.1k ⭐، LGPL-3.0) يصف نفسه بأنه "محرّك تداول أصيل بلغة Rust بجودة الإنتاج، ذو معمارية حتمية مُوجّهة بالأحداث" — والكود مكتوب بنسبة ~70% بلغة Rust مع ربط لبايثون. يُجري الـ backtesting عبر عدة منصّات وأدوات مالية بدقّة النانوثانية باستخدام بيانات التيك ودفتر الأوامر، ويأتي بنحو ~20 تكاملًا مباشرًا (Binance و Coinbase و Kraken و OKX و Bybit و Interactive Brokers و Betfair وغيرها). ووعده الأبرز: كود استراتيجية مطابق من البحث إلى النشر المباشر. هذا هو الخيار الأقوى لجمهور يجمع بين العملات المشفّرة والأسهم ويحتاج إلى واقعية على مستوى التيك ومسار حقيقي إلى الإنتاج. والثمن: منحنى تعلّم أكثر انحدارًا ومعمارية أثقل من المكتبات البسيطة.
vectorbt — بحث مُتّجه على نطاق واسع
vectorbt (8.0k ⭐، Apache-2.0 + Commons Clause) هو المحرّك المُتّجه. وجاء في ملف README الخاص به: "بدلًا من الدوران عبر الشموع استراتيجيةً تلو الأخرى، يحزم آلاف الإعدادات في مصفوفات NumPy، ويسرّع المسار الساخن بواسطة Numba و Rust، ويشغّلها كلها دفعة واحدة، محوّلًا ساعات من البحث الشبكي إلى ثوانٍ." واختبار 10,000 توليفة من نوافذ SMA المزدوجة في ثوانٍ هو المثال النموذجي؛ وتفيد جهات خارجية بتسريعات تبلغ ~1000× مقارنةً بـ Backtrader في بعض أحمال العمل (أرقام من المُورّد/جهات خارجية، لا قياس مرجعي مستقل). والمسح المعلَمي أدناه — 25 عملية backtest عبر نوافذ SMA — هو بالضبط ما يجعله vectorbt عملية صناعية:

مُلاحظتان جديرتان بالمعرفة: Commons Clause يقيّد إعادة البيع التجاري (وهو أمر مهم إن كنت تبني منتجًا)، كما أن vectorbt PRO المصقول والمدفوع منتج منفصل عن البناء مفتوح المصدر. و vectorbt مخصّص للـ backtest فقط — لا تداول مباشر.
backtesting.py — المفضّل الخفيف
backtesting.py (8.5k ⭐، AGPL-3.0) هو ما تلجأ إليه حين تريد backtest نظيفًا وسريعًا وسهل القراءة دون مراسم إطار عمل كامل. عرّف init() و next()، شغّل، واحصل على كائن إحصاءات ومخطّط Bokeh تفاعلي. ترخيص AGPL-3.0 مهم: فهو copyleft قوي مع أحكام تتعلّق بالاستخدام عبر الشبكة، ما يجعله محرجًا داخل SaaS مغلق المصدر. وهو مخصّص للـ backtest فقط. منحنى رأس المال في هذه الصفحة (الغلاف) والإحصاءات أدناه ناتجة عن تشغيل حقيقي لـ backtesting.py — تقاطع SMA(20/50) بسيط على سلسلة اصطناعية:

لاحظ النتيجة الصادقة: حقّق التقاطع الساذج +1.6% مقابل +46% للشراء والاحتفاظ، مع تراجع قاسٍ بلغ −38%. هذه هي النتيجة الأولى الطبيعية لأي backtest حقيقي، وهي بالضبط السبب الذي يدفعك إلى مسح المعاملات والتحقّق من الفرضيات قبل أن تصدّق أي شيء.
Freqtrade — الخيار الافتراضي للعملات المشفّرة
Freqtrade (51.7k ⭐، GPL-3.0) هو المشروع الأكثر حصدًا للنجوم في هذه القائمة، وروبوت تداول العملات المشفّرة مفتوح المصدر بحكم الأمر الواقع. يقوم بالـ backtesting، والتداول التجريبي (الورقي)، والتداول المباشر على المنصّات الكبرى، ويُتحكّم به عبر Telegram أو واجهة ويب مدمجة، ويطرح إصدارات شهرية. وهو مخصّص للعملات المشفّرة فقط — لا أسهم — لكنه للعملات المشفّرة هو المعيار المُصان والمدعوم من المجتمع.
Lumibot و bt و PyBroker و Jesse و LEAN و zipline-reloaded
- Lumibot (1.7k ⭐، GPL-3.0) — متعدّد الأصول (أسهم، خيارات، عملات مشفّرة، عقود آجلة، فوركس) بنفس الكود للـ backtest والورقي والمباشر عبر Alpaca و Interactive Brokers و Tradier و Schwab و Tradovate و CCXT. إعداد وسطاء ودود للمبتدئين؛ انتبه للمزالق الموثّقة في تطابق الـ backtest مع المباشر (المناطق الزمنية، توقيت الدخول، الهامش).
- bt (2.9k ⭐، MIT) — إطار عمل مرن من شجرة خوارزميات موجّه نحو استراتيجيات توزيع المحفظة والقائمة على الأوزان بدلًا من التنفيذ لكل تيك. مرخّص بتساهل، تتم صيانته بنشاط، ومخصّص للـ backtest فقط.
- PyBroker (3.4k ⭐) — مبنيّ لاستراتيجيات تعلّم الآلة، مع تسريع Numba والتحقّق بالمسير الأمامي مدمجين. مخصّص للـ backtest فقط.
- Jesse (8.1k ⭐، MIT) — إطار عمل للعملات المشفّرة بواجهة استراتيجية نظيفة وتداول مباشر؛ ترخيص متساهل.
- LEAN / QuantConnect (20k ⭐، Apache-2.0) — المحرّك الثقيل متعدّد الأصول الذي تقف خلفه سحابة QuantConnect. نواة C#/.NET مع واجهة برمجة بايثون؛ backtest ومباشر. قويّ لكنه يمثّل أكبر التزام هنا.
- zipline-reloaded (1.8k ⭐، Apache-2.0) — الـ fork النشط الصيانة من Zipline التابع لـ Quantopian، شائع في الأوساط الأكاديمية وفي كتاب Machine Learning for Trading. مخصّص للـ backtest فقط؛ استخدم هذا، لا الأصلي
quantopian/zipline.
المقبرة — تجنّبها للمشاريع الجديدة
هذه لا تزال تتصدّر نتائج البحث والمدوّنات القديمة، لكن لا تبدأ من هنا في 2026:
- Zipline (الأصلي،
quantopian/zipline) — هُجر في 2020. استخدمzipline-reloaded. - PyAlgoTrade — المستودع مؤرشف (للقراءة فقط).
- QSTrader — مُصنّف غير مُصان؛ آخر push في منتصف 2024.
- blankly — أُغلقت المنصّة؛ qtpylib — مؤرشف منذ 2021.
- fastquant (1.8k ⭐) — غلاف رفيع موجّه لإجراء backtest بسطر واحد، لكنه راكد منذ 2023.
المعمارية تهمّ: مقايضة الواقعية
الانقسام بين المُتّجهة والمُوجّهة بالأحداث ليس انقسامًا نظريًّا. سرعة vectorbt تأتي من افتراض أن كل عملية تنفيذ تحدث بسعر الشمعة التالية دون أي انزلاق. وبالنسبة لفلتر زخم عبر 500 أصل، فهذا مقبول. أما بالنسبة لاستراتيجية تكمن ميزتها في التنفيذ داخل الشمعة — وضع أوامر الإيقاف، التنفيذ الجزئي، الموضع في الطابور — فإن backtest مُتّجهًا سيكذب عليك بهدوء، وستحتاج إلى محرّك مُوجّه بالأحداث (NautilusTrader أو Backtrader) أو تشغيل تجريبي مباشر (Freqtrade أو Lumibot) للحصول على رقم صادق. سير العمل الاحترافي يستخدم كليهما: vectorbt لاستكشاف فضاء المعاملات، ومحرّك مُوجّه بالأحداث للتحقّق من الناجين.
الترخيص — اقرأ هذا قبل أن تبني منتجًا
مكتبات الـ backtesting ثقيلة بالتراخيص على نحو غير معتاد، وعدد منها copyleft:
| الترخيص | المكتبات | ما يجب معرفته |
|---|---|---|
| AGPL-3.0 | backtesting.py | أقوى copyleft؛ الاستخدام عبر الشبكة/SaaS قد يستوجب الإفصاح عن المصدر |
| Apache-2.0 + Commons Clause | vectorbt (بناء OSS) | متساهل إلا أنه لا يمكنك بيعه كمنتج |
| GPL-3.0 | Backtrader، Freqtrade، Lumibot | copyleft؛ توزيع مشتقّ يعني فتح مصدره |
| LGPL-3.0 | NautilusTrader | copyleft أضعف؛ الربط مقبول عمومًا |
| MIT | bt، Jesse، QSTrader، fastquant | متساهل — افعل تقريبًا أي شيء |
| Apache-2.0 | LEAN، zipline-reloaded، finmarketpy | متساهل، مع منح براءات اختراع |
إن كنت تبني شيئًا تجاريًّا ومغلق المصدر، فإن أدوات MIT/Apache هي الخيارات الخالية من الاحتكاك؛ أما AGPL و Commons Clause فيحتاجان إلى قراءة محامٍ.
المقارنة في لمحة
| الأداة | ⭐ النجوم | المعمارية | الترخيص | الصيانة | التداول المباشر | الأنسب لـ |
|---|---|---|---|---|---|---|
| NautilusTrader | 24.1k | مُوجّه بالأحداث (Rust) | LGPL-3.0 | 🟢 نشط | نعم | الإنتاج، واقعية التيك/دفتر الأوامر |
| vectorbt | 8.0k | مُتّجه | Apache+CC | 🟢 نشط | لا | البحث المعلَمي الكتلي |
| backtesting.py | 8.5k | مُوجّه بالأحداث | AGPL-3.0 | 🟢 نشط | لا | عمليات backtest منفردة سريعة ونظيفة |
| Freqtrade | 51.7k | مُوجّه بالأحداث | GPL-3.0 | 🟢 نشط | نعم (عملات مشفّرة) | روبوت عملات مشفّرة مُصان |
| Backtrader | 22.1k | مُوجّه بالأحداث | GPL-3.0 | 🟡 خامل | نعم | المشاريع القديمة (انتبه للركود) |
| Lumibot | 1.7k | مُوجّه بالأحداث | GPL-3.0 | 🟢 نشط | نعم | متعدّد الأصول، backtest/مباشر موحّد |
| LEAN | 20k | مُوجّه بالأحداث | Apache-2.0 | 🟢 نشط | نعم | منصّة ثقيلة متعدّدة الأصول |
| bt | 2.9k | مُتّجه/أوزان | MIT | 🟢 نشط | لا | استراتيجيات توزيع المحفظة |
| PyBroker | 3.4k | مُوجّه بالأحداث | OSS | 🟢 نشط | لا | استراتيجيات تعلّم الآلة + المسير الأمامي |
| zipline-reloaded | 1.8k | مُوجّه بالأحداث | Apache-2.0 | 🟢 نشط | لا | الأوساط الأكاديمية، كتاب ML4T |
| Zipline (الأصلي) | 19.9k | مُوجّه بالأحداث | Apache-2.0 | 🔴 مهجور | — | لا شيء — استخدم reloaded |
| PyAlgoTrade | 4.7k | مُوجّه بالأحداث | — | 🔴 مؤرشف | — | لا شيء جديد |
النجوم والحالات لقطات بتاريخ 2026-06-22 وستتغيّر؛ الصيانة هي البُعد الأكثر تقلّبًا، لذا أعد فحص نشاط الـ commit قبل أن تلتزم.
كيف تختار، في نفَس واحد
- بحث استراتيجية عبر آلاف المعاملات ← vectorbt.
- backtest منفرد سريع ونظيف في دفتر ← backtesting.py (انتبه لـ AGPL).
- عملات مشفّرة + أسهم بجودة الإنتاج مع تطابق بحث←مباشر وواقعية التيك ← NautilusTrader.
- روبوت عملات مشفّرة مُصان مع backtest/تجريبي/مباشر ← Freqtrade.
- تداول خوارزمي للأفراد متعدّد الأصول، ودود للمبتدئين ← Lumibot.
- استراتيجيات توزيع المحفظة / الترجيح ← bt.
- استراتيجيات تعلّم الآلة مع المسير الأمامي ← PyBroker.
- الأعمال الأكاديمية / مادة ML-for-Trading ← zipline-reloaded.
- ورثت قاعدة كود Backtrader ← لا بأس، لكن اعلم أنها خاملة؛ والمشاريع الجديدة ينبغي أن تبحث في مكان آخر.
القاعدة الوحيدة التي تنجو في كل نظام سوقي: افحص تاريخ آخر commit قبل أن تفحص عدد النجوم. فمكتبة بـ 22k نجمة لم تطرح إصدارًا منذ 2023 هي طريق إلى الإنتاج أبطأ من أخرى بـ 8k نجمة أصدرت الأسبوع الماضي.
المنهجية: جُلبت مقاييس GitHub حيًّا من واجهة GitHub API بتاريخ 2026-06-22؛ وجرى التحقّق من ادعاءات المعمارية والصيانة والترخيص والتداول المباشر عبر مقارنتها بمستودعات المشاريع والوثائق الرسمية والتحقّق منها بأسلوب تنازعي، بالاستناد إلى كتالوجات منسّقة (PyTrade.org و awesome-systematic-trading) وقائمة بدائل kernc. منحنى رأس المال والإحصاءات والخريطة الحرارية المعلَمية هي ناتج حقيقي من تشغيل backtesting.py على سلسلة أسعار اصطناعية قابلة لإعادة الإنتاج — لغرض التوضيح، لا توصية باستراتيجية. أرقام الأداء المنسوبة إلى المُورّدين (تسريعات vectorbt، ودقّة النانوثانية لـ NautilusTrader) مُبلَّغ عنها ذاتيًّا، لا قياسات مرجعية مستقلة.