← All Collections
10 parts

High-Performance Backtest Engines

How to build a backtest engine that runs hundreds of times faster without changing a single PnL number — data layout, caching, adaptive resolution, and architecture, from first speedups to production internals.

  1. 01
    سلم سرعة محرك الاختبار الرجعي: 298 ضعفاً على وحدة معالجة كمبيوتر محمول، بنفس PnL حتى آخر صفقة
    Jun 26, 2026 #algotrading

    سلم سرعة محرك الاختبار الرجعي: 298 ضعفاً على وحدة معالجة كمبيوتر محمول، بنفس PnL حتى آخر صفقة

    خمسة تطبيقات لنفس مسح 80 توليفة من المعلمات، جميعها مُتحقق من أنها تُنتج نفس PnL تماماً: pandas rolling.apply يستغرق 69.9 ثانية، numpy 3.1، numba 2.0، numba المتوازي 0.23 — تسريع مقيس بمقدار 298 ضعفاً على Apple M2 Max بدون أي تغيير في العتاد، وما زال ~13 ضعفاً أسرع من خط أساس مُتّجه (vectorized) كفؤ. ماذا تشتري كل درجة، ولماذا ليست وحدة معالجة الرسوميات (GPU) هي القطعة المفقودة، وأين يكمن الاختناق الحقيقي في البحث الجماعي عن المعلمات.

  2. 02
    ضريبة الإطار: عندما تكون مكتبة الاختبار الرجعي لديك أبطأ من حلقة pandas ساذجة
    Jul 2, 2026 #التداول الخوارزمي

    ضريبة الإطار: عندما تكون مكتبة الاختبار الرجعي لديك أبطأ من حلقة pandas ساذجة

    قِسنا أداء ثمانية محركات اختبار رجعي على عملية مسح معاملات واحدة متطابقة — 150k شمعة، و80 توليفة من تقاطعات HMA، مع تثبيت تكافؤ عدد الصفقات عند 2707. اثنان من أشهر الأطر المدفوعة بالأحداث جاءا أبطأ من حلقة pandas مكتوبة يدويا، بينما شغّل محرك متجهي/مُصرَّف العمل نفسه أسرع بنحو 13,000×. دراسة للعبء لكل شمعة الذي لم تُبنَ المكتبات الشائعة لتوزيعه على مدى الحساب.

  3. 03
    ذاكرة التخزين المؤقت المجمعة لـ Parquet: كيف تُسرّع الاختبارات الرجعية متعددة الأُطُر الزمنية بمئات المرات
    Mar 16, 2026 #algotrading

    ذاكرة التخزين المؤقت المجمعة لـ Parquet: كيف تُسرّع الاختبارات الرجعية متعددة الأُطُر الزمنية بمئات المرات

    كيفية حساب الأُطُر الزمنية والمؤشرات مسبقاً من شموع الدقيقة، وحفظها في parquet، واستخدامها لاختبار الاستراتيجيات بشكل مكثف دون حسابات متكررة.

  4. 04
    فضاء المعاملات ذو المحورين: لماذا ينبغي أن يكون معظم المسح لديك شبه مجاني
    Jul 3, 2026 #التداول الخوارزمي

    فضاء المعاملات ذو المحورين: لماذا ينبغي أن يكون معظم المسح لديك شبه مجاني

    ليست كل المعاملات متساوية في تكلفة البحث. تنقسم معاملات الاستراتيجية إلى محور مكلف (المؤشرات — يعاد حسابها على السلسلة كلها) ومحور رخيص (عتبات القرار — تمريرة O(n) على إشارات محسوبة مسبقا). ولأن المؤشرات ثابتة تجاه العتبات، تحسبها مرة واحدة وتمسح آلاف تكوينات العتبات بمعدل ~5,600 تكوين/ثانية — أي أرخص بنحو 1,600x من إعادة الحساب لكل تكوين. إعادة تسعير للعنة الأبعاد.

  5. 05
    الحفر التكيفي: اختبار رجعي بدقة متغيرة من الدقائق إلى الصفقات الخام
    Mar 17, 2026 #algotrading

    الحفر التكيفي: اختبار رجعي بدقة متغيرة من الدقائق إلى الصفقات الخام

    كيف تُسرّع دقة البيانات التكيفية الاختبارات الرجعية وتوفر مساحة التخزين: الحفر من 1m إلى 1s و100ms والصفقات الخام فقط حيث تحرك السعر بشكل كبير أو ارتفع الحجم، وليس عبر السلسلة التاريخية بأكملها.

  6. 06
    بوابة الدقة: البحث من الخشن إلى الدقيق في الاختبار الرجعي يخدعك أسرع ما لم يُرتّب الوكيل الرخيص الإعدادات مثلما يفعل التقييم المكلف
    Jul 5, 2026 #التداول الخوارزمي

    بوابة الدقة: البحث من الخشن إلى الدقيق في الاختبار الرجعي يخدعك أسرع ما لم يُرتّب الوكيل الرخيص الإعدادات مثلما يفعل التقييم المكلف

    البحث المتدرج / متعدد الدقة (drill-down) — مثل ASHA والتنصيف المتتالي (successive halving) و Hyperband — يفحص آلاف الإعدادات بتكلفة زهيدة ولا يرقّي إلى التقييم الكامل المكلف سوى الناجين منها. هذا تسريع حقيقي — لكنه ينهار بصمت إذا اختلف ترتيب الدقة المنخفضة عن ترتيب الدقة العالية. قسنا الارتباط بين ترتيب الطيّات: عند طيّة واحدة يمكن أن يبلغ معامل ارتباط الرتب لسبيرمان ρ قيمة 0.03 فقط (ترتيب شبه عشوائي)، ليرتفع إلى 0.43 ثم 0.67 ثم 0.78 ثم 0.91 مع تراكم الطيّات. الحل هو بوابة إلزامية واحدة — قِس ρ(الرخيص، الكامل) أولاً، وارفع تلقائياً الحد الأدنى للدقة إلى أول درجة يبلغ فيها ρ ≥ 0.5.

  7. 07
    البحث العشوائي مقابل البحث الذكي: نقطة التقاطع هي تكلفة التقييم، لا الخوارزمية
    Jul 4, 2026 #التداول الخوارزمي

    البحث العشوائي مقابل البحث الذكي: نقطة التقاطع هي تكلفة التقييم، لا الخوارزمية

    عندما يكون الاختبار الخلفي الواحد رخيصًا، يفوز تسلسل Sobol العشوائي المخلوط الغبي بمعدل الإنتاجية الخام — بينما تدفع أدوات أخذ العينات "الذكية" (TPE وCMA-ES وASHA) ضريبة ask/tell في بايثون تُبطئها 20 مرة، فتقيّم نقاطًا أقل بكثير في نفس زمن التنفيذ الفعلي وتخسر. اجعل كل تقييم مكلفًا (أطر زمنية متعددة + طيات walk-forward) وتنقلب نقطة التقاطع. قسنا كلا النظامين، ولماذا تُعد دقة ترتيب الطيات (ρ@1 ترتفع من 0.03 إلى 0.43) الشرط المسبق لنجاح التقليم.

  8. 08
    فخ الدقة العددية لـ GPU: كيف يُعيد اختبار خلفي بصيغة fp32 على Apple Metal نتائج عشوائية بصمت
    Jul 6, 2026 #التداول الخوارزمي

    فخ الدقة العددية لـ GPU: كيف يُعيد اختبار خلفي بصيغة fp32 على Apple Metal نتائج عشوائية بصمت

    وحدة معالجة الرسومات Metal من Apple لا تدعم float64 إطلاقاً. عند نقل اختبار خلفي متجهي (vectorized) إليها بصورة ساذجة، فإن صيغة WMA المغرية القائمة على المجموع التراكمي (prefix-sum) تفيض في fp32 — بخطأ نسبي أقصى يبلغ 211× — ومع ذلك يستمر التنفيذ ويُعيد أرقاماً تبدو معقولة. الحل ليس مزيداً من الدقة، بل صيغة مختلفة: التفاف مباشر ذو نافذة (direct windowed convolution) آمن في fp32 حتى دقة 8×10⁻⁷ وأسرع بـ 55.9 مرة من numba أحادي الخيط. هذا المقال يشرح الفخ، والحساب الكامن وراءه، وكيف تُثبت أنك لم تقع فيه.

  9. 09
    متى تؤتي وحدة معالجة الرسوميات ثمارها: نموذج roofline لمسح المعلمات، حيث رقم العنوان 167x هو في الحقيقة 27x خوارزمية × 6.2x عتاد
    Jul 7, 2026 #تداول خوارزمي

    متى تؤتي وحدة معالجة الرسوميات ثمارها: نموذج roofline لمسح المعلمات، حيث رقم العنوان 167x هو في الحقيقة 27x خوارزمية × 6.2x عتاد

    تقدم وحدة معالجة الرسوميات (GPU) على المعالج المركزي ينمو مع حجم الدفعة — من 54.5x عند توليفة واحدة لكل استدعاء حتى 359.6x عند 61 على الحساب المسبق لمؤشراتنا متعددة الأطر الزمنية — لأن المسح الصغير لا يستطيع استهلاك نفقات إطلاق النواة والنقل. نُفكك رقم عنوان بقيمة 167x إلى فوز خوارزمي بمقدار 27x يفيد المعالج المركزي أيضاً وفوز عتادي بمقدار 6.2x، ونُظهر أن التقدم الحقيقي لوحدة معالجة الرسوميات على أفضل معالج مركزي هو 3.2x فقط على إطار زمني واحد و6.2x على أطر متعددة، ونقدم دليل قرار حول مدى الاتساع الذي يجب أن يبلغه المسح قبل أن يستحق شراء وحدة معالجة رسوميات.

  10. 10
    ضريبة IPC: ضع محرك الاختبار الرجعي خلف مقبس وتخسر 13% — لا يكاد أي منها بسبب المقبس
    Jun 30, 2026 #algotrading

    ضريبة IPC: ضع محرك الاختبار الرجعي خلف مقبس وتخسر 13% — لا يكاد أي منها بسبب المقبس

    نقلنا نواة اختبار رجعي بلغة numba سطراً بسطر إلى Rust واستدعيناها عبر حدود العملية بأربع طرق مختلفة، مع بوابة تكافؤ تُؤكد تطابق PnL حتى آخر صفقة. شحن سلسلة الأسعار الكاملة (1.2 ميجابايت) عبر مقبس Unix يكلف ~2 مللي ثانية — حوالي 0.1% من المهمة. ترميز نفس الحمولة بصيغة JSON يكلف 1348x أكثر من البايتات الخام، والاستدعاءات الثرثارة لكل توليفة تُعيد شحن البيانات 80 مرة، ونمط استدعاء لكل شمعة سيدفع 2.1 ثانية من IPC خالص على مهمة مدتها 2.0 ثانية. الحد رخيص؛ الضريبة في كيفية عبوره.