البيئات Backtesting البحوث في بيثون مع الباندا مايكل مور القاعات على 16 يناير 2014 Backtesting هو عملية البحث من تطبيق فكرة استراتيجية التداول والبيانات التاريخية من أجل التأكد من الأداء في الماضي. على وجه الخصوص، backtester لا تقدم أية ضمانات عن الأداء المستقبلي للاستراتيجية. ومع ذلك فهي عنصر أساسي في عملية البحث انابيب استراتيجية، مما يسمح استراتيجيات لتتم تصفيته من قبل وضعها حيز الإنتاج. في هذا المقال (وتلك التي تليه) نظام backtesting وجوه المنحى الأساسي مكتوبة في بيثون سيتم المبين. وهذا النظام في وقت مبكر أن يكون في المقام الأول "المساعدات التعليمية"، وتستخدم للتدليل على المكونات المختلفة للنظام backtesting. ، سيتم إضافة وظائف أكثر تطورا ونحن نتقدم من خلال المواد. Backtesting نظرة عامة عملية تصميم نظام backtesting قوية صعبة للغاية. على نحو فعال محاكاة كافة المكونات التي تؤثر على أداء نظام تداول حسابي هو الصعبة. الفقراء تحبب البيانات، غموض أجل التوجيه في وسيط، بغية الكمون وعدد لا يحصى من العوامل الأخرى يتآمر لتغيير الأداء "الحقيقي" للاستراتيجية مقابل أداء backtested. عند وضع النظام backtesting فإنه من المغري تريد باستمرار "إعادة كتابتها من الصفر" كما تم العثور على أكثر من العوامل أن تكون حاسمة في تقييم الأداء. لا يوجد نظام backtesting يتم الانتهاء من أي وقت مضى، ويجب أن يصدر الحكم في نقطة خلال التنمية التي عوامل كافية تم القبض من قبل النظام. مع هذه المخاوف في الاعتبار backtester المعروضة في هنا سيكون في التبسيط إلى حد ما. ونحن نستكشف قضايا أخرى (تحسين محفظة، وإدارة المخاطر، والتعامل مع تكاليف المعاملات) وbacktester سوف تصبح أكثر قوة. أنواع أنظمة Backtesting عموما هناك نوعان من نظام backtesting التي من شأنها أن تكون ذات فائدة. الأول هو القائم على البحث. تستخدم في المقام الأول في المراحل المبكرة، حيث سيتم اختبار العديد من الاستراتيجيات من أجل تحديد تلك لتقييم أكثر خطورة. غالبا ما تكون مكتوبة هذه الأنظمة backtesting البحوث في بيثون، R أو ماتلاب كما سرعة التنمية هو أكثر أهمية من سرعة التنفيذ في هذه المرحلة. أما النوع الثاني من نظام backtesting هو القائم على الحدث. وهذا هو، فإنه ينفذ عملية backtesting في حلقة التنفيذ مماثلة (إن لم تكن متطابقة) إلى نظام التنفيذ التداول نفسها. سيكون نموذج واقعي بيانات السوق وعملية تنفيذ النظام من أجل تقديم تقييم أكثر صارمة لاستراتيجية. غالبا ما تكون مكتوبة نظم الأخيرة في لغة عالية الأداء مثل C ++ أو جافا، حيث سرعة التنفيذ أمر ضروري. لاستراتيجيات تردد الدنيا (وإن كانت لا تزال في التداول اليومي)، بيثون هو أكثر من كافية لاستخدامها في هذا السياق. البحث Backtester في بيثون الشيئية سيتم الآن مناقشة تصميم وتنفيذ البحوث المستندة إلى بيئة backtesting وجوه المنحى. وقد تم اختيار التوجه كائن باسم نموذج تصميم البرمجيات وذلك للأسباب التالية: واجهات من كل عنصر يمكن أن تحدد مقدما، بينما الأجزاء الداخلية من كل عنصر يمكن تعديلها (أو استبدال) مع تقدم المشروع عن طريق تحديد واجهات مقدما فمن الممكن لاختبار فعالية الطريقة التي يتصرف كل مكون (عن طريق اختبار وحدة) عندما توسيع نطاق نظام مكونات جديدة يمكن بناؤها على أو بالإضافة للآخرين، إما عن طريق الميراث أو التكوين في هذه المرحلة تم تصميم backtester لسهولة التنفيذ ودرجة معقولة من المرونة، على حساب الدقة الحقيقية للسوق. على وجه الخصوص، وهذا backtester تكون قادرة على التعامل مع الاستراتيجيات بناء على صك واحد فقط. في وقت لاحق سوف تعديل backtester للتعامل مع مجموعات من الصكوك. لbacktester الأولية، يطلب من العناصر التالية: استراتيجية - تتلقى فئة استراتيجية على الباندا DataFrame من الحانات. أي قائمة من النقاط المفتوح ارتفاع منخفض-انهيار-المجلد (OHLCV) البيانات على تردد معين. فإن استراتيجية إنتاج قائمة من الإشارات. والتي تتكون من الطابع الزمني وعنصر من مجموعة $ \ $ يشير إلى فترة طويلة، عقد أو إشارة قصيرة على التوالي. محفظة - إن الغالبية العظمى من العمل backtesting تحدث في فئة محفظة. وسوف تتلقى مجموعة من إشارات (كما هو موضح أعلاه) وإنشاء سلسلة من المواقف، خصصت ضد العنصر النقدي. وظيفة من وجوه المحفظة هي لإنتاج منحنى الإنصاف. إدراج تكاليف المعاملات الأساسية وتتبع الصفقات. الأداء - الكائن الأداء يأخذ المحفظة وتنتج مجموعة من الإحصاءات حول أدائها. على وجه الخصوص سيكون الخطر الناتج / خصائص عودة (شارب، سورتينو ومعلومات النسب)، والتجارة / مقاييس الربح وتراجع من المعلومات. ما هو مفقود؟ كما يمكن أن يرى ولا يشمل هذا backtester أي إشارة إلى محفظة / إدارة المخاطر، والتنفيذ التعامل مع (أي لا أوامر الحد) كما أنها ستوفر نماذج متطورة من تكاليف المعاملات. هذه ليست مشكلة كبيرة في هذه المرحلة. لأنها تتيح لنا لكسب الألفة مع عملية إنشاء backtester وجوه المنحى والمكتبات الباندا / NumPy. في الوقت الذي سيتم تحسينه. التنفيذ سوف ننتقل الآن إلى الخطوط العريضة لتطبيقات لكل كائن. يجب أن يكون الهدف استراتيجية عامة للغاية في هذه المرحلة، لأنه سوف يكون التعامل مع استراتيجيات التنبؤ، متوسط، الارتداد، الزخم والتقلب. الاستراتيجيات التي يجري النظر فيها هنا سوف يكون دائما سلسلة زمنية مبنية، أي "سعر مدفوعة". مطلب في وقت مبكر لهذا backtester هو أن الطبقات الاستراتيجية المستمدة سيقبل قائمة البارات (OHLCV) كمدخل، بدلا من القراد (التجارة عن طريق التجارة الأسعار) أو بيانات أجل كتاب. وبالتالي خيرة التفاصيل التي يجري النظر فيها هنا سيكون الحانات 1 ثانية. فإن الطبقة الاستراتيجية أيضا تنتج دائما توصيات إشارة. وهذا يعني أنه سوف ننصح مثيل محفظة بمعنى الشراء / البيع أو عقد الموقف. وهذه المرونة تسمح لنا لخلق استراتيجية متعددة "المستشارين" التي توفر مجموعة من الإشارات، التي يمكن أن فئة المحفظة أكثر تقدما يقبل من أجل تحديد المواقف الفعلية التي تم إدخالها. وسوف يتم تطبيق واجهة من الطبقات من خلال استخدام منهجية الفئة الأساسية مجردة. فئة قاعدة مجردة هو الكائن الذي لا يمكن مثيل وبالتالي الفئات المشتقة فقط يمكن أن تنشأ. وتعطى رمز بيثون أدناه في ملف يسمى backtest. py. يتطلب الطبقة الاستراتيجية أن أي فئة فرعية تنفيذ أسلوب generate_signals. من أجل منع الطبقة استراتيجية من يجري مثيل مباشرة (لأنها مجردة!) فمن الضروري استخدام ABCMeta والأشياء abstractmethod من وحدة اي بي سي. نحن تعيين خاصية الطبقة، ودعا __metaclass__ ليكون مساويا لABCMeta ثم تزيين طريقة generate_signals مع الديكور abstractmethod. في حين أن واجهة المذكورة أعلاه هي واضحة وسوف تصبح أكثر تعقيدا عندما يتم توريث هذه الفئة لكل نوع محدد من الاستراتيجية. في نهاية المطاف الهدف من الطبقة استراتيجية في هذا الإعداد هو تقديم قائمة طويلة / قصيرة / عقد إشارات لكل أداة ليتم إرسالها إلى محفظة. الطبقة المحفظة هي التي تسكنها أغلبية من منطق التداول سوف يقيم. لهذا backtester البحث هو حافظة المسؤول عن تحديد موقف التحجيم، وتحليل المخاطر، وإدارة تكاليف المعاملات والتنفيذ التعامل مع (أي السوق على اساس مفتوحة، والسوق على اساس وثيقة أوامر). في مرحلة لاحقة سيتم تقسيم هذه المهام إلى مكونات منفصلة. الحق الآن سيتم توالت في لفئة واحدة. هذه الفئة تستفيد وافرة من الباندا ومثالا كبيرا من حيث المكتبة يمكن ان يوفر كمية كبيرة من الوقت، لا سيما في ما يخص الجدل البيانات "النمطي". بوصفها جانبا، وحيلة الرئيسية مع الباندا وNumPy هو تجنب بالتكرار على أي بيانات باستخدام لد في بناء الجملة.. وذلك لأن NumPy (الذي يكمن وراء الباندا) يحسن حلقات من العمليات vectorised. وبالتالي سوف نرى عدد قليل (إن وجدت!) تكرارات مباشرة عند استخدام الباندا. الهدف من الطبقة المحفظة هو في نهاية المطاف لإنتاج سلسلة من الصفقات ومنحنى الأسهم، والتي سوف يتم تحليلها من قبل الطبقة الأداء. ومن أجل تحقيق ذلك يجب أن توفر لها قائمة من التوصيات التداول من كائن الاستراتيجية. في وقت لاحق، وهذا سيكون مجموعة من الكائنات الاستراتيجية. سوف تحتاج الطبقة المحفظة أن يقال كيف رأس المال التي سيتم نشرها لمجموعة معينة من إشارات التداول، وكيفية التعامل مع تكاليف المعاملات والتي ستستخدم أشكال أوامر. الكائن استراتيجية تعمل على أشرطة من البيانات، وبالتالي الافتراضات يجب أن يتم في ما يتعلق بأسعار تحقق في تنفيذ أمر. منذ عالية / منخفضة السعر في أي شريط غير معروف بداهة أنه من الممكن فقط لاستخدام أسعار الافتتاح والاغلاق للتداول. في واقع الأمر من المستحيل أن تضمن التي سيتم شغلها أمر في واحدة من هذه الأسعار خاصة عند استخدام نظام السوق، لذلك سوف يكون، في أحسن الأحوال، تقريبي. بالإضافة إلى افتراضات حول أوامر يتم شغلها، وهذا backtester تجاهل كل مفاهيم القيود هامش / وساطة، وسوف تفترض أنه من الممكن أن يذهب طويلة وقصيرة في أي صك بحرية دون أي قيود السيولة. ومن الواضح أن هذا الافتراض غير واقعي جدا، ولكن هي واحدة يمكن أن تكون مريحة في وقت لاحق. القائمة التالية تزال backtest. py: في هذه المرحلة تم عرض الاستراتيجية ومحفظة الطبقات قاعدة مجردة. نحن الآن في وضع يمكنها من توليد بعض التطبيقات الملموسة المستمدة من هذه الفئات، من أجل إنتاج العمل "استراتيجية لعبة". سنبدأ من خلال توليد فئة فرعية من استراتيجية دعا RandomForecastStrategy. المهمة الوحيدة التي هي لإنتاج مؤشرات طويلة / قصيرة تم اختيارهم عشوائيا! في حين أن هذا هو الواضح أن استراتيجية التداول لا معنى لها، وسوف تخدم احتياجاتنا من خلال إظهار إطار backtesting وجوه المنحى. وبالتالي سنبدأ ملف جديد يسمى random_forecast. py. مع قائمة لالمتنبئ عشوائي على النحو التالي: الآن أن لدينا نظام التنبؤ "ملموس"، يجب علينا خلق تنفيذ كائن المحفظة. وستشمل هذا الكائن غالبية رمز backtesting. وهي مصممة لإنشاء اثنين DataFrames منفصلة، وأولها إطار المواقف، وتستخدم لتخزين كمية من كل صك تعقد في أي شريط معين. والثانية، محفظة. يحتوي في الواقع على سعر السوق لجميع الحيازات لكل شريط، فضلا عن رصيده من النقد، على افتراض مال أولي. وهذا يوفر في نهاية المطاف منحنى الأسهم التي لتقييم الأداء الاستراتيجية. الكائن المحفظة، في حين مرنة للغاية في واجهة، يتطلب خيارات معينة عندما يتعلق كيفية التعامل مع تكاليف المعاملات، وأوامر السوق وما إلى ذلك وفي هذا المثال الأساسي لقد اعتبرت أنه سيكون من الممكن للذهاب طويلة / قصيرة صك بسهولة مع أي قيود أو الهامش، شراء أو بيع مباشر بسعر مفتوح حول البار، تكاليف المعاملات صفر (تشمل انزلاق والرسوم وتأثير السوق) وحددت كمية الأسهم مباشرة لشراء لكل عملية متاجرة. هنا هو استمرار إدراج random_forecast. py: وهذا يعطي لنا كل ما نحتاجه لإنشاء منحنى الأسهم على أساس هذا النظام. الخطوة الأخيرة هي لربط كل ذلك جنبا إلى جنب مع وظيفة __main__: إخراج البرنامج كما يلي. لك سوف تختلف من إخراج أدناه وهذا يتوقف على مدى التاريخ الذي حدد والبذور تستخدم عشوائيا ل: في هذه الحالة فقدت استراتيجية المال، والتي ليس من المفاجئ نظرا لطبيعة العشوائية من المتنبئ! الخطوات المقبلة لإنشاء كائن الأداء الذي يقبل مثيل المحافظ ويقدم قائمة من مقاييس الأداء التي يمكن على أساسها اتخاذ قرار لتصفية استراتيجية الخروج أو لا. يمكننا أيضا تحسين الكائن المحفظة أن يكون التعامل أكثر واقعية من تكاليف المعاملات (مثل لجان سطاء التفاعلية والزلل). يمكننا أيضا أن تشمل مباشر محرك التنبؤ إلى كائن استراتيجية، والتي سوف (أمل) نتائج أفضل. في المقالات التالية سنبحث هذه المفاهيم على نحو أكثر عمقا. مايكل مور القاعات مايك هو مؤسس QuantStart وشاركت في صناعة التمويل الكمية على مدى السنوات الخمس الماضية، في المقام الأول كمطور ضليع في الرياضيات وفيما بعد الاستشارات تاجر ضليع في الرياضيات لصناديق التحوط.
No comments:
Post a Comment