Friday 19 January 2018

بيثون فوريكس باكتستينغ


جون V.


البيانات الكبيرة. الشركات الناشئة. تجارة.


البيانات الكبيرة. الشركات الناشئة. تجارة.


بناء نظام باكتستينغ في بايثون: أو كيف فقدت 3400 $ في ساعتين.


بناء نظام باكتست هو في الواقع من السهل جدا. من السهل المسمار يعني. على الرغم من أن هناك أطنان من المكتبات ممتازة هناك (وسوف نذهب من خلالهم في مرحلة ما)، وأنا دائما مثل القيام بذلك من تلقاء نفسها من أجل صقل ذلك.


من جميع أنظمة باكتستينغ رأيت، يمكننا أن نفترض أن هناك فئتين:


اليوم، سوف نتحدث عن لوبيرس.


و "فور-لوبيرس" هي نوعي المفضل من باكتسترس. هم تافهة لكتابة ومتعة فائقة للتوسع ولكن لديهم بعض التدفقات الحيوية و للأسف معظم باكتستيرس هناك "فور لوبيرس" (بس: أحتاج إلى العثور على اسم أفضل لهذا!).


كيف يعمل لوبيرس؟ باستخدام حلقة (كما كنت قد خمنت). إنه شيء من هذا القبيل:


حق بسيط جدا؟ هذه هي الطريقة التي يعمل نظام باكتستينغ واحد، الذي يدير استراتيجية الزخم:


فما هي المشكلة؟


من الصعب جدا على نطاق (أفقيا) يحتاج الكثير من العمل للحفاظ على application_strategy () العمل على باكتستينغ والإنتاج تحتاج إلى أن يكون كل شيء في نفس لغة البرمجة.


دعونا الغوص في هذه، واحدا تلو الآخر.


قابلية التوسع . كنت تجرب زوجين قبل أسابيع مع خوارزمية تسلق التل لتحسين واحد من استراتيجيات بلدي. لا يزال قيد التشغيل. بعد أسبوعين. وأنا بناء أنظمة اوبر قابلة للعيش. لماذا لا يزال قيد التشغيل؟ يمكنك استخدام المعالجات المتعددة، ديسكو، منتج / المستهلك (باستخدام زيرومق) أو المواضيع فقط لتسريع هذا ولكن بعض المشاكل ليست "محرجة موازية" (نعم، هذا هو مصطلح الفعلي، وليس واحدا من بلدي الكلمات المكتوبة). كمية العمل على نطاق باكتستر مثل هذا (وخصوصا عندما تريد أن تفعل نفس التعلم الآلي على رأسه) ضخمة. يمكنك أن تفعل ذلك ولكن هذا هو الطريق الخطأ.


الإنتاج و باكتستينغ في مزامنة هذا. الأوقات لقد تم لعض من قبل هذا. أستطيع أن أذكر الحرف المفقودة حيث كنت "هم، لماذا دخلت هذه التجارة؟" أو بلدي القديم الوقت المفضل "لماذا توقفت عربة توقفت الآن؟".


وقت القصة: كان لدي فكرة من أجل تحسين استراتيجيتي، لتشغيل باكتستر لمعرفة ما سيحدث لو كنت يمكن أن تضع وقف زائدة بعد أن كانت التجارة مربحة من أجل ضمان الأرباح دائما. عملت باكتستينغ مثل سحر في زيادة بنسبة 13٪ من الأرباح والإنتاج فقدت كل تجارة واحدة. أنا أحسب بها بعد خسر بلدي ألغو 3400 $ في بضع ساعات (درس مكلفة للغاية).


الحفاظ على مزامنة application_strategy من الصعب جدا ويصبح شبه مستحيل عندما تريد أن تفعل ذلك بطريقة موزعة. وأنت لا تريد أن يكون لديك إصدارين من الاستراتيجية الخاصة بك التي هي "تقريبا" متطابقة. إلا إذا كان لديك $ 3400 لتجنيب.


استخدام لغات مختلفة أحب بيثون. و إرلانغ. و كلوجور. و J. و C. و R. و روبي (لا فعلا أكره روبي). أريد أن أكون قادرا على الاستفادة من قوة اللغات الأخرى في نظامي. أريد أن جرب الاستراتيجيات في R حيث توجد مكتبات جيدة جدا اختبار وهناك مجتمع ضخم وراء ذلك. أريد أن يكون إرلانغ لتوسيع نطاق التعليمات البرمجية و C إلى أزمة البيانات. إذا كنت تريد أن تكون ناجحة (ليس فقط في التداول)، تحتاج إلى أن تكون قادرة على استخدام جميع الموارد المتاحة دون التحيز. لقد تعلمت الكثير من الاشياء من شنقا مع المطورين R بشأن كيف يمكنك دلتا السندات التحوط وتصور لهم أو لماذا نسبة شارب يمكن أن يكون كذب. كل لغة لديها حشد مختلف وتريد العديد من الناس سكب الأفكار في النظام الخاص بك. إذا حاولت أن يكون application_strategy في لغة مختلفة ثم حظا سعيدا مع (2).


هل أنت مقتنع الآن؟ حسنا، أنا لا أحاول إقناع لكم كما ل لوبرز هو وسيلة رائعة لتشغيل الاختبارات الأولية الخاصة بك. هكذا بدأت ولكثير من الاستراتيجيات أنا لا ترسل لهم إلى خط الأنابيب. وهناك طريقة "أفضل" (حتى تتمكن من النوم ليلا) هو مولدات الحدث.


القادمة القادمة، وتقاسم ومناقشة بلدي أبسط (ولكن الأكثر نجاحا) باكتستر!


إذا كان لديك المزيد من ردود الفعل، بينغ لي في جونروميرو أو الاشتراك في النشرة الإخبارية.


قانوني خارجي. هذا هو برنامج تعليمي هندسي حول كيفية بناء منصة ألغوترادينغ للتجريب و فان. أي اقتراحات هنا ليست النصائح المالية. إذا كنت تفقد أي (أو كل) لك المال لأنك اتبعت أي نصائح التداول أو نشر هذا النظام في الإنتاج، لا يمكنك إلقاء اللوم على هذه بلوق عشوائي (و / أو لي). استمتع على مسؤوليتك الخاصة.


بت - إجراء اختبار مرن لبيثون


ما هو بت؟ ¶


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


الهدف: لإنقاذ كوانتس من إعادة اختراع العجلة والسماح لهم التركيز على الجزء المهم من العمل - تطوير الاستراتيجية.


يتم ترميز بت في بيثون وينضم إلى نظام بيئي نابض بالحياة وغنية لتحليل البيانات. وتوجد مكتبات عديدة للتعلم الآلي ومعالجة الإشارات والإحصاءات، ويمكن الاستفادة منها لتجنب إعادة اختراع العجلة - وهو أمر يحدث في كثير من الأحيان عند استخدام لغات أخرى لا تملك نفس الثروة من الجودة العالية، المصدر.


بنيت بت فوق فوق فن - مكتبة وظيفة مالية لبيثون. تحقق من ذلك!


مثال سريع "


هنا هو طعم سريع من حزب العمال:


استراتيجية باكتستو بسيطة


دع & # 8217؛ s إنشاء استراتيجية بسيطة. سنقوم بإنشاء استراتيجية إعادة التوازن الشهرية، طويلة فقط حيث نضع أوزان متساوية على كل الأصول في عالمنا من الأصول.


أولا، سوف نقوم بتحميل بعض البيانات. بشكل افتراضي، bt. get (الاسم المستعار ffn. get) بتحميل الإغلاق المعدل من Yahoo! المالية. سنقوم بتحميل بعض البيانات ابتداء من 1 يناير 2018 لأغراض هذا العرض.


مرة واحدة لدينا بياناتنا، ونحن سوف تخلق استراتيجيتنا. كائن الاستراتيجية يحتوي على منطق الاستراتيجية من خلال الجمع بين مختلف ألغوس.


وأخيرا، سنقوم بإنشاء باكتست، وهو مزيج منطقي من استراتيجية مع مجموعة البيانات.


وبمجرد الانتهاء من ذلك، يمكننا تشغيل باكتست وتحليل النتائج.


الآن يمكننا تحليل نتائج باكتست لدينا. عنصر النتيجة عبارة عن ملف تعريف رقيقة حول ffn. GroupStats يضيف بعض أساليب المساعد.


تعديل إستراتيجية


الآن ماذا لو قمنا بإدارة هذه الإستراتيجية أسبوعيا واستخدمنا أيضا بعض أسلوب أسلوب التكافؤ في المخاطر باستخدام الأوزان التي تتناسب مع عكس كل تقلبات الأصول؟ حسنا، كل ما علينا القيام به هو سد العجز في بعض الطحالب المختلفة. انظر أدناه:


كما ترون، منطق الاستراتيجية من السهل أن نفهم والأهم من ذلك، من السهل تعديل. فكرة استخدام ألغوس بسيطة، قابلة للخلق لخلق استراتيجيات هي واحدة من اللبنات الأساسية من حزب العمال.


هيكل شجرة هيكل شجرة يسهل بناء وتكوين استراتيجيات التداول خوارزمية معقدة التي هي وحدات وإعادة استخدامها. وعلاوة على ذلك، كل عقدة شجرة لديها مؤشر الأسعار الخاصة بها التي يمكن استخدامها من قبل ألغوس لتحديد تخصيص عقدة & # 8217 s. خوارزمية مداخن ألغوس و ألغوستاكس هي سمة أساسية أخرى تسهل إنشاء منطقي وحدات وإعادة استخدامها للاستراتيجية. ونظرا لنمطها، فإن هذه الكتل المنطقية هي أيضا أسهل في الاختبار - وهي خطوة هامة في بناء حلول مالية قوية. الرسم البياني والإبلاغ بت أيضا يوفر العديد من وظائف الرسم البياني المفيدة التي تساعد على تصور النتائج باكتست. ونخطط أيضا لإضافة المزيد من المخططات والجداول وأشكال التقارير في المستقبل، مثل تقارير بدف التي يتم إنشاؤها تلقائيا. إحصاءات مفصلة وعلاوة على ذلك، بت يحسب مجموعة من الإحصائيات المتعلقة باكتست ويقدم وسيلة سريعة لمقارنة هذه الإحصاءات المختلفة عبر العديد من باكتيستس مختلفة عبر طرق العرض النتائج.


وستركز جهود التنمية في المستقبل على ما يلي:


السرعة نظرا للطبيعة المرنة للفرقة، يجب إجراء مقايضة بين قابلية الاستخدام والأداء. وستكون قابلية الاستخدام دائما الأولوية، ولكننا نرغب في تعزيز الأداء قدر الإمكان. ألغوس سنكون أيضا تطوير المزيد من الخوارزميات مع مرور الوقت. ونحن نشجع أيضا أي شخص للمساهمة ألغوس الخاصة بهم أيضا. الرسم البياني وإعداد التقارير هذا هو مجال آخر نود أن تحسين باستمرار على النحو الإبلاغ هو جانب مهم من هذه المهمة. كما يسهل التخطيط والإبلاغ إيجاد أخطاء في منطق الاستراتيجية.


الميكانيكية الفوركس.


التداول في سوق الفوركس باستخدام استراتيجيات التداول الميكانيكية.


باكتستينغ أنظمة التداول في بيثون: ليس خيارا جيدا حقا.


لغة الثعبان هي متعددة للغاية، وسهلة الاستخدام ومريحة. ليس هناك نقاش حول تنوع هذه اللغة عندما يتعلق الأمر إلى مقدار الوقت الذي يستغرقه لوضع فكرة قابلة للاستخدام في التعليمات البرمجية. هل تريد تحميل ملف كسف؟ تريد إجراء حساب المؤشر؟ تريد رسم مجموعة من القيم؟ كل هذه الأشياء يمكن القيام به مع اثنين فقط من خطوط التعليمات البرمجية في الثعبان في حين أنها بالتأكيد سوف تأخذ صفحات كاملة إن لم يكن الآلاف من خطوط للقيام بنفس الأشياء في لغات مثل C و فورتران. ومع ذلك فإن الثعبان لديه العديد من نقاط الضعف التي تجعله خيارا سيئا عندما يتعلق الأمر باستراتيجيات اختبار الاختبار الخلفي، لا سيما عندما يتعلق الأمر بالاختبار القائم على الحدث. في هذا المنصب سوف تذهب من خلال الأشياء المختلفة التي تجعل الثعبان خيارا سيئا لترميز محركات الاختبار الخلفي ولماذا & # 8211؛ على الرغم من وقت الترميز أطول بكثير & # 8211؛ فإن فوائد استخدام لغة أقل مستوى ربما بعيدة الوزن مشاكل لبعض أنواع الاختبار. لإجراء الاختبار أدناه يرجى تحميل الكود هنا.


بشكل عام من المهم أن نفهم أن هناك طريقتان رئيسيتان يمكنك من خلاله إجراء الاختبار الخلفي. الأول هو ما يسمى 'ناقلات "على أساس الاختبار الخلفي والثاني يسمى الاختبار القائم على الحدث. عند إجراء المتجهات على أساس الاختبارات الخلفية يمكنك حساب النواقل التي تمثل قرارات التداول ثم يمكنك القيام بعمليات ناقلات لاستخراج الأداء من هذه المتغيرات. لنفترض أنك ترغب في اختبار اختبار المتوسط ​​المتحرك باستراتيجية متجهية، فأنت تحسب أولا متجه مع كل قيم المتوسط ​​المتحرك، ثم تقوم بتكوين متجه ثان يحتوي على منطقية مع ما إذا كان المتوسط ​​المتحرك أكبر أو أصغر من السعر، ثم استخدام هذه القيم لحساب متجه يمثل حقوق الملكية وفقا للمكان الذي لديك إشارات، الخ المتجهات على أساس الاختبار الخلفي بشكل عام يفعل كل شيء عن طريق حساب ناقلات وهذه النواقل ثم تستخدم لتوليد نتائج الاختبار الخاص بك. بل هو وسيلة فعالة من الناحية الرياضية لإجراء الاختبار الخلفي لأنواع معينة من النظم.


ومع ذلك هناك العديد من العيوب لاستخدام اختبارات ناقلات مقرها (والتي سوف أترك لمناقشة على وظيفة في المستقبل)، الأمر الذي يؤدي العديد من الناس إلى البديل، والتي هي الاختبارات القائمة على الحدث. في الحدث القائم على الاختبار الخلفي لك حلقة من خلال بيانات التداول المتاحة وتمرير خوارزمية كل ما لديه من معلومات متاحة لها في كل نقطة في الوقت المناسب. هذه هي طريقة الاختبار الخلفي التي تتطابق بشكل وثيق مع تنفيذ السوق الحقيقي لأن إستراتيجيتك تفعل الشيء نفسه فقط، وهي تستقبل البيانات وتتخذ القرارات في كل وحدة زمنية عندما تحتاج إلى ذلك. لهذا السبب يمكن للاختبارات الظهر القائم على الحدث اختبار تست جميع الاستراتيجيات التي يمكن تداولها في السوق والخوارزميات المشفرة للحدث على أساس الاختبار الخلفي يمكن استخدامها عموما دون أي تعديلات على التجارة الحية، لأن الميكانيكا هي ببساطة نفسه. في الاختبار الخلفي القائم على الحدث، يمكنك إجراء عملية وهمية صريحة لاستراتيجيتك من خلال بياناتك كما كانت استراتيجيتك قد فعلت في التداول المباشر (أو على الأقل أقرب ما يمكنك إدارته).


إذا كنت ترغب في رمز محرك الاختبار القائم على الحدث في الثعبان أنت & # 8217؛ سوف تواجه بعض المشاكل الخطيرة بسبب الثعبان & # 8217؛ ق الطبيعة جدا. كنت قد قررت استخدام الثعبان لأن الترميز داخل هذه اللغة من السهل جدا ولكن سوف تجد قريبا أن هذا يأتي بتكلفة كبيرة. إذا كنت ترغب في إجراء تحميل البيانات بسيطة بالإضافة إلى الحدث ممارسة الاختبار على أساس أنك ربما تستخدم بعض التعليمات البرمجية كما هو موضح في المثال أعلاه. يقوم هذا المثال بتحميل بيانات من ملف يسمى TEST_60.csv (بيانات 1H التي تم إنشاؤها عشوائيا لمدة 30 عاما) ثم يقوم بتنفيذ حلقة بسيطة من خلال داتافريم كامل الباندا لحساب متوسط ​​نطاق 20 بار على كل شريط (شيء بسيط للغاية). В القيام بهذه العملية البسيطة يستغرق حوالي 12-15 ثانية لتحميل البيانات إلى الباندا داتافريم & # 8211؛ ويرجع ذلك أساسا إلى تاريخ تحليل & # 8211؛ وبعد ذلك عدة دقائق لأداء ممارسة حلقة. انها بطيئة للغاية ل حلقة من خلال داتافريم الباندا لأن مكتبات مثل الباندا هي ببساطة ليست مصممة لأداء هذا النوع من المهام، وهي مصممة للعمليات المتجهة على أساس التي هي الأمثل ضمن وظائف C القائمة داخل المكتبة.


عند استخدام المكتبات مثل الباندا أو نامبي تكلفة الحلقات هو في الواقع أكبر بكثير من تكلفة حلقة من خلال قائمة الثعبان بسيطة، وذلك لأن هذه المكتبات لديها وظائف غير فعالة نوعا ما للوصول إلى عناصر واحدة داخل كائنات لأن هذا النوع من العملية ليست ما تم تصميم المكتبات ل. لا يقصد من داتافرامس بانداس والمصفوفات نامبي أن يتكرر من خلال، أنها تهدف إلى أن تستخدم لأداء عمليات ناقلات تستند (وهذا هو & # 8220؛ بيثونيك & # 8221؛ شيء القيام به). يمكنك إجراء بعض الاختبارات ومعرفة مدى تغير وقتك بشكل كبير عند تغيير الدالة المستخدمة للوصول إلى القيم داخل داتافريم الباندا، إذا قمت بتغيير من إكس إلى إات أو إيلوك ستلاحظ بعض الاختلافات الهامة في أوقات التنفيذ (انظر هنا لمزيد من المعلومات حول أداء طريقة الفهرسة). استخدام مكتبة مثل الباندا أو نومبي كبيرة من حيث كمية من الوقت الترميز المحفوظة ولكن إذا كنت & # 8217؛ إعادة القيام على أساس الاختبار الخلفي على أساس أنك لن يكون شيئا بسرعة كافية.


تكلفة أداء هذا النوع من حلقات في الثعبان يجعل اللغة عديمة الفائدة عمليا لأي مشروع الاختبار الخلفي على نطاق واسع يتطلب الاختبار القائم على الحدث. ب أعلاه مشفرة حلقة 1H شريط يستغرق عدة دقائق لتشغيل وأنها لا & # 8217؛ s حتى مما يجعل أي حسابات تطلبا للغاية، فإنه حتى لا تتبع الأسهم، الصفقات أو القيام بأي جيل إشارة. هذا هو كل شيء لأن حلقات من خلال الباندا الأجسام بطيئة للغاية. بالتأكيد، يمكننا أن نجعلها أسرع إذا كنا لم نستخدم الباندا لهذا أو إذا استخدمنا كتيبيس بدلا من ذلك ولكن بعد ذلك أنت & # 8217؛ الانتقال إلى أراضي لغات مستوى منخفض بالفعل. كنت التخلي عن شيء هو ودية للغاية لرمز مع (الباندا) عن شيء أسرع (كتيبس). إذا كنت ترغب في زيادة وقت الترميز للحصول على السرعة فإنك أفضل حالا بمجرد الذهاب إلى لغة أقل مستوى. إذا كنت & # 8217؛ إنفاق 10x الوقت الذي يجعل رمز الثعبان أسرع ثم مجرد قضاء هذا الوقت الترميز في C حيث أنت & # 8217؛ ليرة لبنانية تعرف أنه سيكون في أسرع وقت ممكن.


طبعا أنا لا أجادل أنه لا يوجد مكان للثعبان في الاختبار الخلفي (بعد كل شيء قمنا بترميز مكتبة مفتوحة المصدر تحليل سلسلة الوقت في بيثون دعا قبات). يمكنك إجراء اختبارات سريعة إلى حد ما ناقلات بسيطة باستخدام هذه اللغة، وإذا كنت & # 8217؛ على استعداد للتخلي عن المكتبات الأكثر سهلة الاستخدام يمكنك ربما رمز شيء أسرع بكثير باستخدام كتيبس وتسريع ذلك أكثر من ذلك باستخدام شيء مثل بيبي . ومع ذلك فإن أفضل استخدام أن وجدت لثعبان هو في الواقع لاستخدامه كواجهة لمكتبات الاختبار الخلفي أسرع بكثير مشفرة في C / C ++. في مجتمعنا نستخدم الثعبان للقيام بأشياء مثل تكوينات الحمل، وتوليد الرسوم البيانية وتحميل الملفات كسف في حين أن مكتبة C أكثر كفاءة بكثير يؤدي الحدث الفعلي القائم على الاختبار الخلفي. القيام بذلك يمكننا أن نجعل كامل باكتيستس 30 سنة على أشرطة 1H في بضع ثوان أثناء القيام بذلك في الثعبان باستخدام المكتبات سهلة الاستخدام مثل الباندا من المرجح أن يستغرق 100 مرة من الوقت، إن لم يكن أطول. ليس من الغموض بعد ذلك لماذا هناك ببساطة لحدث الحدث القائم على برامج الاختبار الخلفي التي تستخدم الثعبان، انها & # 8217؛ ق ببساطة ليس قطع اللغة لهذه المهمة.


إذا كنت ترغب في معرفة المزيد عن الاختبار الخلفي وكيف يمكنك أيضا التعليمات البرمجية واختبار الاستراتيجيات باستخدام لدينا C / C ++ إطار البرمجةآ يرجى النظر في الانضمام إلى أسيريكوي، موقع على شبكة الإنترنت مليئة أشرطة الفيديو التعليمية، ونظم التداول والتنمية وصوت ونزيهة وشفافة نهج نحو التداول الآلي.


3 ردود على & # 8220؛ باكتستينغ أنظمة التداول في بيثون: ليس خيارا جيدا حقا & # 8221؛


أعتقد أن بعض التعديلات الطفيفة على التعليمات البرمجية الخاصة بك سوف يؤدي إلى تسريع كبيرة، وربما في نهاية المطاف جعل بايثون أكثر قبولا قليلا.


1) الطباعة مكلفة للغاية. إذا كنت ترغب في طباعة البيانات المتضمنة في range_range على فترات معينة، فيمكنك القيام بذلك بعد ملئها.


2) النظر في تحديد صفيف نومبي فارغة:


وGT؛ & GT. n_elements = لين (رانج (2، لين (main_rates. index)) * 20.


وGT؛ & GT. average_range [(i-2) * 20 + j] = range_value.


فقط عن طريق القيام بذلك، وأنا النزول إلى وقت التنفيذ الكلي من 0.033 ثانية على المزدوج إنتل زيون E5-2620 & # 8217؛ ق. أنا & # 8217؛ م في إبيثون 64 بت باستخدام نومبي 1.10 والباندا 0.17.1، لما هو & # 8217؛ ق يستحق.


شكرا على نشرك! تحسين لطيف حقا، كان واضحا وظيفة الطباعة فقط هناك لغرض التوضيح (أردت فقط للمستخدمين لمعرفة ما كانت وظيفة القيام به) ولكن وظيفة جميلة على تقليل الوقت عن طريق تخصيص مسبقا مجموعة نامبي. بالطبع هناك كل أنواع الأشياء التي يمكنك القيام بها لجعل رمز أسرع في الثعبان & # 8212؛ أنا بالتأكيد لا أقول أنه لا يمكن القيام به، وخاصة في حالات محددة مثل هذا واحد. ومع ذلك أعتقد أنه لا يزال هناك نقطة صالحة في ذلك للحصول على أداء مقبول في بايثون تحتاج إلى التخلي عن جزء جيد من & # 8220؛ الترميز الود & # 8221؛ التي تجعل من هذه اللغة جذابة لتبدأ. عندما تصبح التعليمات البرمجية الخاصة بك معقدة حقا & # 8211؛ مثل إذا كنت تريد أن تفعل التعلم الآلي & # 8211؛ التعديلات مثل واحد كنت نشرت تصبح أصعب وأصعب للوصول الى. في النهاية للوصول إلى أوقات التنفيذ مثل تلك من C / C ++ قد ينتهي بك الأمر قضاء الوقت كما لو كنت الترميز في هذه اللغات مستوى أقل.


ما رأيك؟ هل تعتقد أن هذا هو الحال؟ هل تعتقد أن هناك دائما الأمثل القابل للتحقيق التي قد تجعل رمز بيثون تصل إلى C / C ++ مثل الأداء دون الكثير من الجهد؟ أي نصائح بيثون كنت ترغب في مشاركة؟ بالطبع أنا لا & # 8217؛ ر يكون الكلمة الأخيرة على الثعبان حتى أي الفتاحات العين هي موضع ترحيب بالتأكيد! اسمحوا لي أن أعرف وشكرا جزيلا لمساهمتكم،


وأعتقد أن بشكل عام، إذا لم يتم فيكتورزد العملية، والحصول على & # 8216؛ أقرب إلى المعدن & # 8217؛ باستخدام سيثون (أو شيء من هذا القبيل) سيكون الأمثل وكنت & # 8217؛ يعيشون في C / C ++ العالم.


ومع ذلك، أنا & # 8217؛ كان نتائج عظيمة باستخدام نومبا (مكتبة تجميع في الوقت المناسب الذي يلعب بشكل جيد مع نومبي) لتسريع أرما & # 8217؛ ق وغيرها من غير متجه الحوسبة. لمزيد من المعلومات حول هذا الموضوع، انظر:


هناك كل أنواع التخصيصات والتحسينات المتاحة لك، ولكن ببساطة تزيين حلقة رقمية معزولة، على سبيل المثال، معjit يبدو أن أداء جيدا في معظم الحالات.


QuantStart.


الانضمام إلى كوانتكاديمي بوابة العضوية الخاصة التي تلبي احتياجات التجزئة المتزايد بسرعة المجتمع تاجر الكمي. سوف تجد مجموعة من ذوي الخبرة مثل التفكير من التجار الكميون على استعداد للرد على أسئلة التداول الكمي الأكثر إلحاحا.


تحقق من بلدي يبوك على التداول الكمي حيث أنا يعلمك كيفية بناء مربحة استراتيجيات التداول المنهجي مع أدوات بايثون، من الصفر.


نلقي نظرة على بلدي الكتاب الاليكتروني الجديد على استراتيجيات التداول المتقدمة باستخدام تحليل سلسلة زمنية، والتعلم الآلي والإحصاءات بايزي، مع بيثون و R.


من قبل مايكل هالز مور في 11 مارس 2017.


لقد قضينا الشهرين الماضيين على كوانتستارت باكتستينغ استراتيجيات التداول المختلفة باستخدام بيثون والباندا. طبيعة المتجهات من الباندا يضمن أن عمليات معينة على مجموعات البيانات الكبيرة هي سريعة للغاية. ومع ذلك فإن أشكال باكتستر فيكتوريسد التي درسنا حتى الآن تعاني من بعض السلبيات في الطريقة التي يتم محاكاة تنفيذ التجارة. في هذه السلسلة من المقالات سنقوم بمناقشة نهج أكثر واقعية لمحاكاة استراتيجية تاريخية من خلال بناء بيئة باكتستينغ يحركها الحدث باستخدام بايثون.


البرامج المستندة إلى الحدث.


قبل أن نخوض في تطوير مثل هذا باكتستر نحن بحاجة إلى فهم مفهوم الأنظمة يحركها الحدث. توفر ألعاب الفيديو حالة استخدام طبيعية للبرامج التي يحركها الحدث وتوفر مثالا مباشرا لاستكشافها. لعبة فيديو لديها مكونات متعددة التي تتفاعل مع بعضها البعض في الإعداد في الوقت الحقيقي في فراميراتي عالية. يتم التعامل مع هذا من خلال تشغيل مجموعة كاملة من العمليات الحسابية ضمن حلقة "لانهائية" المعروفة باسم حلقة الحدث أو حلقة حلقة.


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


تحقق التعليمات البرمجية باستمرار للأحداث الجديدة ثم تنفيذ الإجراءات بناء على هذه الأحداث. على وجه الخصوص فإنه يسمح الوهم من الاستجابة في الوقت الحقيقي التعامل معها لأنه يتم باستمرار يتم عقد رمز والتحقق من الأحداث. كما سيصبح واضحا هذا هو بالضبط ما نحتاج إليه من أجل تنفيذ محاكاة التداول عالية التردد.


لماذا باكتستر مدفوعة الحدث؟


توفر الأنظمة القائمة على الحدث العديد من المزايا على نهج متجه:


إعادة استخدام التعليمات البرمجية - يمكن استخدام باكتستر يحركها الحدث، حسب التصميم، لكلا من التاريخ التاريخي باكتستينغ والتداول الحي مع الحد الأدنى من التبديل من المكونات. هذا ليس صحيحا في باكتسترس ناقلات حيث يجب أن تكون جميع البيانات متاحة في وقت واحد لإجراء التحليل الإحصائي. تحيز لوكاهيد - مع باكتستر يحركها الحدث لا يوجد تحيز لوكهيد كما يتم التعامل مع إيصال بيانات السوق باعتباره "الحدث" التي يجب اتخاذ إجراء بشأنها. وبالتالي فمن الممكن "تغذية بالتنقيط" باكتستر يحركها الحدث مع بيانات السوق، وتكرار كيفية إدارة النظام ونظام محفظة سوف تتصرف. الواقعية - باكتسترس يحركها الحدث تسمح التخصيص كبيرة على كيفية تنفيذ أوامر وتكاليف المعاملات يتم تكبدها. فمن السهل التعامل مع السوق الأساسية وأوامر الحد، وكذلك السوق على فتح (مو) والسوق على مقربة (موك)، لأنه يمكن بناء معالج الصرف المخصصة.


على الرغم من أن النظم التي يحركها الحدث تأتي مع العديد من الفوائد التي تعاني من اثنين من العيوب الرئيسية على أنظمة فيكتوريسد أبسط. أولا أنها أكثر تعقيدا بكثير لتنفيذ واختبار. هناك المزيد من "الأجزاء المتحركة" مما يؤدي إلى فرصة أكبر لإدخال الأخطاء. للتخفيف من هذه المنهجية المناسبة اختبار البرمجيات مثل تطوير يحركها الاختبار يمكن استخدامها.


ثانيا أنها أبطأ لتنفيذ بالمقارنة مع نظام فيكتوريسد. العمليات فيكتوريسيد الأمثل غير قادر على استخدامها عند إجراء العمليات الحسابية الرياضية. وسوف نناقش سبل التغلب على هذه القيود في المواد اللاحقة.


نظرة عامة على الحدث باكتستر مدفوعة.


لتطبيق نهج يحركه الحدث لنظام باكتستينغ من الضروري تحديد مكوناتنا (أو الأشياء) التي من شأنها التعامل مع مهام محددة:


الحدث - الحدث هو وحدة الطبقة الأساسية للنظام يحركها الحدث. يحتوي على نوع (مثل "ماركيت" أو "سيغنال" أو "أوردر" أو "فيل") يحدد كيفية التعامل معها داخل حلقة الحدث. قائمة انتظار الحدث - قائمة انتظار الحدث عبارة عن عنصر انتظار قائمة انتظار بيثون في الذاكرة يقوم بتخزين كافة عناصر فئة الفئة إيفنت التي يتم إنشاؤها بواسطة بقية البرنامج. داتاهاندلر - داتاهاندلر هو فئة قاعدة مجردة (أبك) التي تقدم واجهة للتعامل مع كل من بيانات السوق التاريخية أو الحية. وهذا يوفر قدرا كبيرا من المرونة بحيث يمكن إعادة استخدام وحدات الاستراتيجية والحافظة بين كلا النهجين. و داتاهاندلر يولد ماركيتيفنت جديدة على كل ضربات القلب من النظام (انظر أدناه). الاستراتيجية - الاستراتيجية هي أيضا أبك التي تقدم واجهة لأخذ بيانات السوق وتوليد سيغناليفنتس المقابلة، والتي يتم استخدامها في نهاية المطاف من قبل كائن محفظة. A سيغناليفنت يحتوي على رمز شريط، اتجاه (طويل أو قصير) والطابع الزمني. محفظة - هذا هو أبك الذي يعالج إدارة النظام المرتبطة المواقف الحالية واللاحقة لاستراتيجية. كما تقوم بإدارة المخاطر عبر المحفظة، بما في ذلك التعرض للقطاع وتحديد حجم المراكز. في تنفيذ أكثر تعقيدا يمكن تفويض هذا إلى فئة إدارة المخاطر. يأخذ المحفظة سيغناليفنتس من قائمة الانتظار ويولد أوردريليفنتس التي تحصل على إضافة إلى قائمة الانتظار. إيكسكوتيونهاندلر - تنفيذ إيكسكوتيونهاندل يحاكي اتصال إلى الوساطة. مهمة المعالج هو اتخاذ أوردريفنتس من قائمة الانتظار وتنفيذها، إما عن طريق نهج محاكاة أو اتصال الفعلي إلى الوساطة الكبد. مرة واحدة يتم تنفيذ أوامر المعالج يخلق فيليفنتس، والتي تصف ما تم فعلا التعامل، بما في ذلك الرسوم والعمولة والانزلاق (إذا نمذجة). الحلقة - كل هذه المكونات ملفوفة في حلقة حدث تعالج بشكل صحيح جميع أنواع الأحداث، وتوجيهها إلى المكون المناسب.


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


في ما يلي مقتطف من شفرة بايثون يوضح كيفية عمل باكتستر في الممارسة العملية. هناك نوعان من الحلقات التي تحدث في التعليمات البرمجية. يتم استخدام حلقة الخارجي لإعطاء باكتستر ضربات القلب. أما بالنسبة للتداول المباشر فهذا هو التردد الذي يتم فيه استطلاع بيانات السوق الجديدة. لاستراتيجيات باكتستينغ هذا ليس ضروريا تماما منذ باكتستر يستخدم بيانات السوق المقدمة في شكل بالتنقيط تغذية (انظر bar. update_bars () السطر).


الحلقة الداخلية في الواقع يعالج الأحداث من كائن قائمة انتظار الأحداث. يتم تفويض أحداث محددة إلى المكون المعني وبعد ذلك يتم إضافة أحداث جديدة إلى قائمة الانتظار. عندما تكون قائمة انتظار الأحداث فارغة، تستمر حلقة نبضات القلب:


هذا هو المخطط الأساسي لكيفية تصميم باكتستر يحركها الحدث. في المقالة التالية سوف نناقش التسلسل الهرمي لصنف الحدث.


مجرد بدء مع التداول الكمي؟


3 أسباب الاشتراك في قائمة البريد الإلكتروني كوانتستارت:


1. دروس التداول الكمي.


سوف تحصل على إمكانية الوصول الفوري إلى دورة مجانية 10-البريد الإلكتروني معبأة مع تلميحات ونصائح لمساعدتك على البدء في التداول الكمي!


2. جميع أحدث المحتوى.


كل أسبوع سوف نرسل لك التفاف جميع الأنشطة على كوانتستارت لذلك عليك أن لا يفوتون وظيفة مرة أخرى.


ريال مدريد، وقابلة للتنفيذ نصائح التداول الكمي مع أي هراء.


QuantStart.


الانضمام إلى كوانتكاديمي بوابة العضوية الخاصة التي تلبي احتياجات التجزئة المتزايد بسرعة المجتمع تاجر الكمي. سوف تجد مجموعة من ذوي الخبرة مثل التفكير من التجار الكميون على استعداد للرد على أسئلة التداول الكمي الأكثر إلحاحا.


تحقق من بلدي يبوك على التداول الكمي حيث أنا يعلمك كيفية بناء مربحة استراتيجيات التداول المنهجي مع أدوات بايثون، من الصفر.


نلقي نظرة على بلدي الكتاب الاليكتروني الجديد على استراتيجيات التداول المتقدمة باستخدام تحليل سلسلة زمنية، والتعلم الآلي والإحصاءات بايزي، مع بيثون و R.


بواسطة مايكل هالز مور في 17 أبريل، 2018.


لقد كنت مشغولا بالعمل على نظام كسفوريكس المفتوح المصدر خلال الأسبوع الماضي. لقد جعلت بعض التحسينات المفيدة، وأعتقد أنني سوف مشاركتها معك في هذا الفوركس تحديث مذكرات التداول.


على وجه الخصوص، لقد أجريت التغييرات التالية، والتي سيتم مناقشتها بإسهاب في هذا الإدخال:


تعديل إلى كائن الموقف لإصلاح خطأ مع كيفية التعامل مع فتحات الموقع وإغلاق تمت إضافة القدرة على البيانات التاريخية عن طريق ملفات البيانات القراد من خلال دوكاسكوبي التنزيلات بنيت النسخة الأولى من باكتستر يحركها الحدث استنادا إلى هذه البيانات القراد اليومية.


بالنسبة لأولئك منكم الذين ليسوا على دراية كسفوريكس ويأتيون إلى هذه السلسلة يوميات الفوركس لأول مرة، وأقترح بشدة وجود قراءة من مذكرات التالية للحصول على ما يصل الى سرعة مع البرنامج:


فضلا عن صفحة جيثب ل كسفوريكس:


موقف التعامل مع خطأ فيكس.


التغيير الأول الذي أريد مناقشته هو كيفية تعامل كائن الموضع مع أوامر الشراء / البيع.


في البداية قمت بتصميم كائن الموضع أن يكون الهزيل جدا، تفويض غالبية العمل لحساب أسعار الموقف إلى كائن محفظة.


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


هذا من المرجح أن تصبح مشكلة خاصة وأنا متأكد من أنك ترغب في تطوير في نهاية المطاف الخاصة بك القدرة على التعامل مع محفظة مخصصة دون الحاجة إلى القلق حول "نمطي" التعامل مع الموقف.


وبالإضافة إلى ذلك أدركت أنني كنت في الواقع ارتكب خطأ لأنني قد مختلطة شراء وبيع أوامر مع وجود موقف طويل أو قصير. وهذا يعني أنه عند إغلاق المركز كان حساب P & أمب؛ L غير صحيح.


لقد عدلت الآن كائن الموضع لقبول عرض الأسعار وأسعار الطلب، بدلا من "إضافة" و "إزالة" الأسعار، والتي تم تحديدها في الأصل من أعلى عنصر الموضع عبر المحفظة.


وهذا يعني أن الموضع الآن يتتبع ما إذا كان طويلا أم قصيرا عند فتحه ويستخدم عرض السعر الصحيح أو سعر الطلب كقيمة الشراء أو الإغلاق.


كان علي أيضا تعديل اختبارات الوحدة لتعكس الواجهة الجديدة. على الرغم من أن هذه التعديلات يستغرق بعض الوقت لاستكمال، فإنه يوفر ثقة أكبر في النتائج. ويصدق هذا بشكل خاص عندما ننظر في استراتيجيات أكثر تطورا.


يمكنك الاطلاع على الملف position. py الجديد بالكامل أدناه:


كما هو الحال دائما يمكنك العثور على أحدث نسخة من الكود الكامل في صفحة جيثب.


تاريخية قراد القدرة على البيانات.


المهمة الرئيسية التالية في خلق نظام تجاري كامل مفيد هو أن يكون قدرة عالية التردد باكتستينغ.


شرط أساسي يتطلب إنشاء مخزن بيانات لبيانات علامة زوج العملات. هذه البيانات يمكن أن تصبح كبيرة جدا. على سبيل المثال، قمت بتحميل بيانات يوم من بيانات القراد لزوج عملة واحدة من دوكاسكوبي بتنسيق كسف وجاء إلى 3.3Mb.


يمكن للمرء أن يرى بسهولة أن باكتستينغ عالية التردد من أزواج العملات 20+، على مدى سنوات عديدة، مع الاختلافات المعلمة كبيرة، يمكن أن يؤدي بسرعة إلى غيغابايت من البيانات التجارية التي يجب تناولها.


وتحتاج هذه البيانات في نهاية المطاف إلى معالجة خاصة، بما في ذلك إنشاء قاعدة بيانات رئيسية مؤتمتة بالكامل للأوراق المالية. وسوف نناقش مثل هذا النظام في المستقبل، ولكن في الوقت الراهن، سوف ملفات كسف اليومية تكفي لاحتياجاتنا.


من أجل وضع البيانات باكتستينغ وبيانات البث المباشر على نفس قدم، لقد خلقت فئة معالجة السعر المستخرجة تسمى برايسهاندلر.


بريسيهاندلر هو مثال على الطبقة الأساسية المجردة التي تتطلب أي فئات فرعية لتجاوز أساليب "افتراضية نقية".


الطريقة المفوضة الوحيدة هي stream_to_queue، وهو ما يسمى عبر مؤشر التسعير عندما يتم تنشيط النظام (إما التداول المباشر أو باكتست).


stream_to_queue يأخذ معلومات الأسعار، من موقع يعتمد على تنفيذ فئة معينة، ثم يستخدم أسلوب. بوت () من قائمة الانتظار لإضافة الكائنات تيكيفنت.


وبهذه الطريقة يمكن لجميع الفئات الفرعية برايسهاندلر التفاعل مع بقية نظام التداول دون المكونات المتبقية معرفة (أو رعاية!) كيف يتم إنشاء معلومات التسعير.


هذا يعطينا مرونة كبيرة في اقتران الملفات المسطحة، ملف مخازن مثل HDF5، قواعد البيانات العلائقية مثل بوستغريزل أو حتى الموارد الخارجية مثل المواقع، إلى باكتستينغ أو محرك التداول المباشر.


هنا مقتطف ل برايسهاندلر:


لقد قمت بإنشاء فئة فرعية تسمى هيستوريكسفبريسيهاندلر، التي تمتلك طريقتين.


الأول يسمى _open_convert_csv_files ويستخدم بانداس لفتح ملف كسف في داتافريم وتشكيل عطاءات الطلب و أطلب.


الطريقة الثانية، stream_to_queue، إيتراتس من خلال هذا داتافريم وفي كل تكرار يضيف كائن تيكيفنت إلى قائمة انتظار الأحداث.


بالإضافة إلى ذلك، يتم تعيين أسعار العطاءات وأسعار الطلب الحالية على مستوى الفئة، والتي يتم الاستعلام عنها لاحقا عن طريق كائن محفظة.


هنا هو قائمة هيستوريكسفريسيهاندلر:


الآن لدينا القدرة على البيانات التاريخية الأساسية، ونحن في وضع يمكنها من إنشاء باكتستر يحركها الحدث بالكامل.


قدرات مدفوعة الحدث مدفوعة.


كما أظل التكرار على كوانتستارت أنا حريصة للغاية على استخدام بيتكستينغ البيئات التي هي أقرب ما يمكن إلى النشر المباشر.


ويرجع ذلك إلى حقيقة أن معالجة تكاليف المعاملات المتطورة، لا سيما في الترددات العالية، غالبا ما تكون محددا حقيقيا لما إذا كانت الاستراتيجية ستكون مربحة أم لا.


مثل هذا عالية التردد التعامل مع المعاملات الصفقة يمكن حقا أن يكون محاكاة مع استخدام متعددة الخيوط محرك التنفيذ يحركها الحدث.


في حين أن هذا النظام هو أكثر تعقيدا بكثير من P & أمبير؛ L "البحث" باكتستر الأساسية، فإنه سيتم التقاط الكثير من السلوك الحقيقي، ويسمح لنا لاتخاذ قرارات أفضل بكثير عند اختيار الاستراتيجيات.


In addition, it means that we can iterate more rapidly as time goes on, because we won't have to continually make the transition from "research level" strategy to "implementation grade" strategy as they are the same thing .


The only two components that change are the price streaming class and the execution class. Everything else will be identical between the backtesting and live trading systems.


In fact, this means that the new backtest. py code is almost identical to the trading. py code that handles live or practice trading with OANDA.


All we're really changing is the import of the HistoricPriceCSVHandler and the SimulatedExecution classes instead of StreamingPriceHandler and the OANDAExecutionHandler . Everything else remains the same.


Here is the listing for backtest. py :


One of the drawbacks of using a multi-threaded execution system for backtesting is that it is not deterministic .


This means that over multiple runs of the same data we will see changes, albeit small ones, across the results.


This is because we cannot guarantee that the threads will execute instructions in the same order over multiple runs of the same simulation.


For instance, when placing items onto the queue, we might get nine TickEvent objects placed onto the queue in run #1, but may get eleven in run #2.


Since the Strategy object is polling the queue for TickEvent objects, it will see different bid/ask prices across the two runs and thus will open a position at different bid/ask prices. This will lead to (small) differences in the returns.


Is this a major problem? I don't really think so. Not only is this how the live system will function anyway, but it also lets us know how sensitive our strategy is to the speed of data receipt.


For instance, if we calculate the variance of the returns across all of our simulated runs with the same data then it will give us an idea of how susceptible the strategy is to data latency.


Ideally we want a strategy that has a small variance across each of our runs. However, if it has a large variance, it means we should be very concerned about deployment.


We could even eliminate the problem of determinism entirely by simply using a single-thread in our backtesting code (as with the QuantStart equities event-driven backtester. However, this has the drawback of reducing the realism with the live system. Such are the dilemmas of high-frequency trading simulation!


الخطوات التالية.


Another issue that I keep bringing up is that the system is only capable of handling a base currency of GBP and a single currency pair, GBP/USD.


Now that the Position handling has been substantially modified, it will be a lot easier to extend it to handle multiple currency pairs. This is the next step.


At that point we will be able to try multi currency pair strategies and eventually introduce Matplotlib to graph the results.


Don't forget to check out the current version of QSForex at the Github page.


مجرد بدء مع التداول الكمي؟


3 أسباب الاشتراك في قائمة البريد الإلكتروني كوانتستارت:


1. دروس التداول الكمي.


سوف تحصل على إمكانية الوصول الفوري إلى دورة مجانية 10-البريد الإلكتروني معبأة مع تلميحات ونصائح لمساعدتك على البدء في التداول الكمي!


2. جميع أحدث المحتوى.


كل أسبوع سوف نرسل لك التفاف جميع الأنشطة على كوانتستارت لذلك عليك أن لا يفوتون وظيفة مرة أخرى.


ريال مدريد، وقابلة للتنفيذ نصائح التداول الكمي مع أي هراء.

No comments:

Post a Comment