كالمان إستراتيجية تداول الفلتر
هذه الاستراتيجية مأخوذة من المثال 3.3 في كتاب إرني تشان، الخوارزمية التجارية: استراتيجيات الفوز وأساسها المنطقي. لقد تم نشرها هنا سابقا ولكن تلك الثوابت المستخدمة لمعاملات الانحدار الخطي.
في هذه الحالة، يتم استخدام عامل تصفية كالمان لتحديث معاملات الانحدار الخطي ديناميكيا بين إوا و إوك إتفس. فإنه يؤدي جيدا حتى عام 2009 ولكن بعد ذلك الأداء يتحلل.
بارد، شكرا لهذا المثال.
مرشح كالمان هو قوي جدا بمجرد فهم كيف يعمل. إذا كنت تعمل دون اتصال، فراجع وحدة بيكالمان. فكرة الترجيح أمر لطيف، لم أكن فكرت في ذلك.
هل هناك سبب لإعادة التوازن أسبوعيا فقط؟ يمكنك تقليل وتيرة التداول عن طريق الحد من التباين الانتقال (دلتا) وزيادة التباين الملاحظة (في). ويؤدي ذلك إلى إبطاء المعدل الذي تتغير فيه معاملات الانحدار.
أي شخص يعرف ما إذا كان مرشح كالمان يمكن أن تمتد إلى أكثر من اثنين من الأوراق المالية حيث المتغيرات التابعة والمستقلة ليست واضحة جدا؟
سيمون، فإنه من السهل أن تمتد إلى الانحدار الخطي ن الأبعاد عن طريق زيادة أبعاد مصفوفة الملاحظة لتصفية كالمان (متغير س في الغو). هذا باكتست يفعل الانحدار بين سبي و إتف القطاع شل، زلف و زلي.
أولا، أشكركم على عملكم العظيم. كنت ذاهبا لاستكشاف هذه خوارزمية كلمان تصفية قبل نشرها. لقد ساعدتني وكثير من الناس هنا.
ثانيا، بالنسبة لمعظم الأزواج تداول الطحالب، ونحن بحاجة لاختبار التكامل المشترك للزوج باستخدام معظمها إما أدف أو اختبار يوهانسن. في هذا المثال، يتم اختبار الزوج إيوا-إوك مع اختبار يوهانسن وأظهرت أن الزوج لديه إيجنفكتور جيدة. هل هناك أي طريقة أن تداول الزوج ألغو يتضمن واحدة من هذه الاختبارات ويعطينا تأكيدا إذا كان الزوج هو جيد أم لا قبل تشغيله؟
ثالثا، الذهاب أبعد قليلا، هل هناك أي وسيلة ل ألغو للبحث أفضل الزوج باستخدام تلك الاختبارات، واختيار الزوج الأيمن (ق) وتشغيل مع كالمان تصفية ألغو؟
وأخيرا، أتساءل لماذا يأمر نموذج زوج إيوا-إوك نفس الأسهم لفترة طويلة وقصيرة. هل يشمل بالفعل عوامل معدلة للمخاطر؟ ماذا لو قمت بتعيين زوج لديه أفضل جدا إيجنفكتورس ولكن نسبة السعر وبيتا مرتفعة جدا؟ في هذه الحالة، طلب نفس الأسهم لفترة طويلة / قصيرة لا معنى له. كيف يعمل نموذج زوج كالمان فيلتر فيما يتعلق بتعديل المخاطر؟
هل هناك أي طريقة أن تداول الزوج ألغو يتضمن واحدة من هذه الاختبارات ويعطينا تأكيدا إذا كان الزوج هو جيد أم لا قبل تشغيله؟
هل يمكن استخدام وظيفة أدفولر في حزمة ستاتسموديلز لاختبار التكامل المشترك. في تجربتي، إحصائية اختبار ديكي فولر جيدة لا يعني بالضرورة زوج مربحة للتداول. عفيك، واختبار يوهانسن غير متوفر في أي مكتبة بيثون العامة ولكن هناك قضية مفتوحة لإدراجها في ستاتسموديلز.
هل هناك أي طريقة للحصول على ألغو للبحث أفضل الزوج باستخدام تلك الاختبارات، واختيار الزوج الأيمن (ق) وتشغيل مع كالمان تصفية ألغو؟
العثور على أزواج جيدة للتداول هو مشكلة صعبة ومكلفة حسابيا. إلقاء نظرة على موضوع سيمون، شبكة البحث عن المحافظ المربحة، لنقاش جيد حول هذا الموضوع.
أنا أتساءل لماذا نموذج زوج إيوا-إوك أوامر نفس الأسهم لفترة طويلة وقصيرة.
كما أنها لا تطلب نفس عدد الأسهم لفترة طويلة وقصيرة. إذا أردنا & كوت؛ طويل & كوت؛ على انتشار إيوا / إوك، ونحن شراء X كمية من الأسهم في إوك وبيع بيتا * X من أسهم في إيوا. هذا هو موقف التحوط، ونحن أبدا طويلة وقصيرة على انتشار في نفس الوقت.
Oooops. الحق، لم يكن نفس الأسهم.
شكرا لكم. وسوف ننظر وظيفة أدفولر و سيمون 'ق الموضوع.
نعم، العثور على أزواج الحق أمر صعب جدا. حتى هذا الكلام مرشح ألغو لا يعمل مع بعض أزواج أخرى. أعتقد أننا بحاجة إلى العمل أكثر وأكثر صعوبة.
مرة أخرى، شكرا لك على العمل العظيم.
إيدان - كانت وجهة نظري أنه حتى مع مرشح كالمان، يجب على المرء أن يقرر مسبقا المتغير هو المتغير التابع والتي هي ريجريسورس مستقلة. في حالة سلة، وهذا يبدو غير منطقي؟
عامل تصفية كالمان يعمل تحت افتراضات أن لديك وظيفة التنبؤ جيدة في تقريب سلوك الظاهرة كنت تحاول تتبع وأن الخطأ في إخراج تلك الوظيفة يتم توزيعها عادة. في محاكاة الظواهر الفيزيائية هذا يعمل بشكل جيد، لأنك تعرف أن صاروخ كنت تحاول اطلاق النار مع الليزر، على سبيل المثال، لن تتحول فجأة 90 درجة اليسار. القوانين المادية تحد من الدول المقبلة المحتملة من هذا الصاروخ إلى مجموعة صغيرة جدا من القيم.
الأسواق من ناحية أخرى، يمكن أن تتحول 180 درجة دون إشعار وليس هناك زخم مادي لجعل تتبع لهم تراكتابل. ربما لا أفعل شيئا ما، ولكنني لا أرى سبب إجراء فلتر كالمان بشكل جيد.
مرشح الجسيمات على الأقل تحسين الوضع عن طريق إزالة الافتراض حول السلوك الخطي. أفكار؟
في حين أنني لا أعتبر نفسي عالم البيانات، لقد فعلت النمذجة (البرمجة) بالنسبة للبعض. وفيما يتعلق بالنجاح الواضح لهذا المثال، بالنسبة لي يبدو أن هذا هو & كوت؛ الصندوق الأسود & كوت؛ والنتيجة النهائية هي متوسط الاتجاهات، وتعطيك مؤشرا للخطوة الزمنية التالية. أنا لا أقول كل ذلك، ولكن لأولئك (مثلي) الذين لا يفهمون تماما الرياضيات وراء الخوارزمية، وهذا ما هو عليه.
أوه أيضا، لا تحتاج إلى & كوت؛ تعتمد & كوت؛ متغير. واحد فقط من دفق المدخلات، التي تتوقع القيمة التالية لنفسها.
تحرير: على الأقل هذا ما مرشح كلمان كما هو موضح في ويكيبيديا هو عن. لم أكن أنظر إلى التنفيذ الذي قدمه إيدان.
Simon، إنك على حق، فهذه ليست تجربة علمية، كما أنه ليس واضحا مادة العرض التي سيتم استخدامها كمتغير تابع. السؤال المهم هو هل يهم حقا الأصول التي نختار أن نعتمد عليها؟ في اختباراتي الخاصة، اكتشفت أنه لا يحدث فرقا كبيرا في النتيجة النهائية. وكقاعدة عامة، أختار المتغير التابع الذي يعطي أكبر قيمة لمعامل التكامل المشترك، مما يعني أن الأصول ذات التقلب الأدنى مستقلة.
Eric وJason، هناك سبب وراء استخدام مرشح كالمان لهذا التطبيق!
أولا، دعونا نلقي نظرة على ما نحاول تحقيقه. نريد بناء سلسلة زمنية ثابتة (انتشار) من سلسلتين زمنيتين غير ثابتة بشكل فردي (إيوا و إوك). لنفترض أن هناك معلمة (معامل تجريبي أو معامل تكامل مشترك) بحيث يكون المتبقي من المجموعة الخطية من السلاسل الزمنية غير الثابتة ثابتة ويمكننا استخدام السلسلة الثابتة الناتجة لتوليد إشارات التداول. في عالم مثالي، بيتا سيكون ثابتا وسوف يتم عملنا.
مشكلتنا الآن هو أن بيتا ليست ثابتة والتغيرات تدريجيا (على افتراض أن سلسلة البقاء كوينتغراتد) مع مرور الوقت. لاستخدام فلتر كالمان، نحتاج إلى صياغة معادلة الملاحظة والانتقال. ومعادلة الملاحظة هي التشكيل الخطي للمسلسل الزمني غير الثابت بالإضافة إلى الضوضاء البيضاء الغوسية. هذا هو حقا مجرد انحدار خطي من إيوا و إوك. تفترض معادلة الانتقال أن بيتا يساوي بيتا السابق بالإضافة إلى الضوضاء البيضاء غاوس. هذا هو المشي العشوائي.
إن استخدام نماذج غير خطية أكثر تعقيدا ربما لن يحسن الأشياء، كما قال إرني تشان على نماذج غير خطية & كوت؛ تجارب لي أن النماذج غير الخطية كانت في الغالب كوارث غير معتادة من حيث تداول الأرباح & كوت؛ و & كوت؛ واحد يكاد يكون من المؤكد أن تجاوز نموذج غير خطية للضوضاء غير المتكررة & كوت ؛.
هاها، شكرا ماتي :)
أنا فقط حصلت على نسخة من كتاب إرني تشان، لذلك نتطلع إلى قراءة حول هذا بالتفصيل :)
شكرا لنشر هذه. لم أضعها من خلال كتاب إرني الثاني حتى الآن، ولكن من الغريب أن أي شخص سوف يستخدم هذه الاستراتيجية نظرا لأنه يفعل فظيعة في أقرب وقت كما كنت عامل في الانزلاق والعمولات. حتى مع 10 أضعاف رأس المال فإنه لا يزال يفقد المال.
أنا جديد في التداول، لذا فمن المحتمل أن أكون هناك سوء فهم هنا. هل يمكن للشخص أن يشرح متى ستكون هذه الإستراتيجية (أو استراتيجيات تداول الزوج مماثلة) منطقية؟
باستخدام الإعداد الحالي للألغو، فإنه يتداول بشكل متكرر، كل يوم تقريبا، والربح من كل التجارة ليست كافية لتغطية تكاليف المعاملات. انها تتداول في كثير من الأحيان لأن مرشح كالمان يستجيب بسرعة للتغيرات في انتشار إيوا / إوك. الحد من حساسية مرشح كالمان سوف يقلل من تواتر التداول ويتجاوز فقط الانحرافات الكبيرة في الانتشار، الأمر الذي سيزيد من العائد المتوقع. للإجابة على سؤالك، من المنطقي فقط استخدام هذه الاستراتيجية، أو أي استراتيجية أخرى، عندما يكون العائد المتوقع من التجارة أكبر من تكاليف المعاملات.
هنا طعنة كاملة في الظلام:
أردت أن أسأل ما هو معنى هذا الخط:
لماذا لا تريد رسم القيم حيث يكون الفارق & غ؛ = 5؟
لا أستطيع أن أتذكر بالضبط لماذا فعلت ذلك. كان الأمر يتعلق بإبقاء المقياس الصادي على الناتج الرسم البياني القياسي صغيرا بحيث يسهل رؤيته. ولن يكون لها أي تأثير على النتائج إذا أزلتها.
نعم، لقد استنسخت الخوارزمية واكتشفت بالفعل. هناك فقط لتصفية المتطرفة الأولية من إخراج الرسم البياني. شكر.
أستطيع أن أرى قضية واحدة عند محاولة استخدام فلتر كالمان للتداول - الذاكرة لانهائية. حاولت فقط تضمين المزيد من العينات التي تسبق تاريخ بدء باكتست - لا يزال يؤثر على التنبؤ بيتا / ألفا حتى عندما أستخدم الآلاف من العينات (لا التقارب). أعتقد لتطبيق التداول، يجب أن يكون تنفيذ فلتر كالمان الفعلي أكثر انحيازا على البيانات الحديثة ويكون قادرا على & كوت؛ نسيان & كوت؛ حول البيانات من الماضي القديم. بالطبع، يمكنك تعيين & كوت؛ ما قبل القطار & كوت؛ طول الطور إلى بعض القيمة التعسفية، ولكن إلى أي واحد؟
هناك بعض التطبيقات مثل هذه المناقشة (على سبيل المثال، البحث عن التكيف يتلاشى كالمان تصفية). هل لدى أي شخص خبرات مع هذه التعديلات؟
كيف يمكنني تغيير خوارزمية التداول اليومي؟
هل هناك سبب بأن الطلبات تتم فقط في آخر 5 دقائق من يوم التداول؟
أيضا، عند تشغيل باكتست الكامل والنظر في تفاصيل الصفقة، وهناك في بعض الأحيان أوامر متعددة في نفس اليوم. على سبيل المثال، في 5-03-06، كان هناك الترتيب التالي: -1137 إيوا، -1125 إيوا، +1000 إوك، و +1000 إوك. لماذا هناك أوامر متعددة في نفس اليوم؟
في 4-26-06، كان هناك أمر واحد فقط: -1000 إوك. لماذا لم يكن هناك سوى أمر واحد وليس هناك تجارة أزواج مقابلة، أي + إيوا؟
شكرا لتقاسم الخوارزمية والإجابة على الأسئلة.
هل هناك سبب بأن الطلبات تتم فقط في آخر 5 دقائق من يوم التداول؟
إرني تشان الأصلي ألغو يعمل على البيانات وثيقة اليومية وذلك لتكرار ذلك على كوانتوبيان اعتدت سعر إغلاق في 3.55PM لتحديث مرشح كالمان والسماح 5 دقائق قبل إغلاق السوق لأية أوامر لملء.
شكرا جزيلا لردكم لك.
تغيير الوقت الذي تستغرقه الأوامر من 15-30 دقيقة يمكن أن يغير بشكل كبير نتائج باكتست (على سبيل المثال، تغيير من 3:55 م إلى 3:30 م). لماذا يحدث هذا؟ هل هناك وقت مثالي لتنفيذ الصفقات؟ شكر.
لماذا يحدث هذا؟ هل هناك وقت مثالي لتنفيذ الصفقات؟
أنا لست متأكدا من السبب ولكن إذا كان لي أن تخمين أود أن أقول أن التحكيم ألجو أداء أفضل مع زيادة التقلب، وعموما، التقلب هو أعلى حول السوق مفتوحة وسوق قريبة. لست متأكدا مما إذا كان هناك & كوت؛ الوقت المثالي & كوت؛ لتنفيذ الصفقات، فإنه يعتمد حقا على ما كنت تحاول استغلال.
كيف يتم اختيار نقاط الدخول والخروج؟ يتم فتح موضع قصير عندما e & غ؛ سرت (س). ثم علينا أن ننتظر e إلى الانخفاض. ولكن نحن مجرد الخروج عندما ه العودة إلى سرت (س) مرة أخرى. لماذا هو؟
كيف تبدأ الصفقة دائما مع ساق واحدة بدلا من ساقين؟
لماذا يحدث هذا؟ هل هناك وقت مثالي لتنفيذ الصفقات؟
ليس هناك وقت مثالي معين لتنفيذ الصفقات، ولكن يستند أطروحة / تحليل على بيانات أسعار الإغلاق اليومية. لذلك، يجب أن تهدف إلى التقليل إلى أدنى حد من الانزلاق مقابل السعر المقرب قريبا في كل يوم معين. تنفيذ الصفقات 15 دقيقة قبل إغلاق السوق لا يزال يخضع لك لاحتمال الانزلاق مقابل سعر إغلاق في ذلك اليوم، ولكن كيف يمكنك أن تقرر الوقت الأمثل. ربما 5 دقائق قبل الإغلاق. أو 2 دقيقة؟ ويؤدي ضبط التنفيذ / الطلب في أقرب وقت ممكن نحو الإغلاق إلى زيادة احتمال عدم ملء الطلب الخاص بك، لذا ستحتاج إلى تقييم التبادل التجاري بين الانزلاق في السعر / احتمال التنفيذ.
شكرا لتقاسم إيدان. وقد كان هذا مفيدا جدا جنبا إلى جنب مع دفتر الملاحظات كلمان الخاص بك.
لدي سؤال على الرغم من الإعداد الإعداد لديك هنا. في دفتر الملاحظات، افترضت خطأ القياس لتكون 10، أو في لتكون 100، ولكن هنا قمت بتعيين في إلى شيء أصغر بكثير، 0.001. هل هناك سبب وراء هذا التفاوت الضخم؟ هذا الرقم يمكن أن يتغير بشكل واضح النتائج بشكل كبير.
عند إعادة تشغيل الأرقام، يمكنني الحصول على قيمة سالبة ل Q مما يؤدي إلى أخطاء عند حساب سرت (Q). كيف تدير قس السلبية؟
حل المشكلة لساق واحدة فقط في البداية.
ومع ذلك، يعني جودة العائد للمنتج السندات سيئة للغاية.
محاولة أفضل على الأسهم الأخرى أو فروق أسعار العملات الأجنبية.
إذا كنا نستخدم عامل تصفية كالمان كما هو موضح في المثال أعلاه، هل ما زلنا بحاجة إلى استبدال أي مراكز مفتوحة بشكل دوري لتعكس الموقف في آخر انتشار كما يتم تحديثه من قبل تصفية كالمان؟
(آسف ولكن أنا لا يبدو أن تكون قادرا على رؤية أي إعادة التوازن في خوارزمية؟)
مرحبا ثكس إيدان عن وظيفة لطيفة. ومن المؤكد أنه يساعد على التنوير أكثر حول تطبيق مرشح كالمان. فقط أتساءل ما سيكون أفضل الممارسات في استخدام هذا المرشح كالمان للعثور على أزواج كوينيغراتد. هل سيتبع نهجان معقولان؟
اختبار التكامل المشترك استنادا إلى تحليل بسيط (انتشار) عملية شريان الحياة للسودان.
لقد وجدت أن الخيار 2 مناسب حقا لأنه يفترض حالة المتطورة التجريبية التي قد تؤثر على بقايا الانحدار لقياس السعر الفعلي. واسمحوا لي أن أعرف ما يعتقده الآخرون أيضا. شكر.
توافق مع التحليل الخاص بك. النهج 1 هو معقول ولكنك سوف تجد في معظم الوقت العلاقة كونتيغراشيون سوف تنهار ولن تعود إلى المتوسط. النهج 2 لا يجعل الكثير من الشعور والعلاقة تتطور باستمرار.
ثكس إيدان. تخمين سأحاول الجمع بين التحليل على حد سواء (في عينة تحليل التكامل المشترك على أساس عملية شريان الحياة البسيطة للعثور على أزواج وتوقعات عينة على أساس مرشح كالمان لإشارة التداول). هل تعتقد أن هذا النهج منطقي؟
هل هناك أي الرافعة المالية المستخدمة في هذا الغو؟
مرحبا، أطلب المساعدة هنا. في حين أنني أفهم كلمان تصفية ومحاولة تطبيق هذه الخوارزمية في الصفقات الحقيقية، وهناك شيء أنا لا أفهم تماما.
في خوارزمية العينة، مرشح كلمان يأخذ سعر واحد لكل رمز، والحصول على نسبة التحوط، يعني، الانحراف المعياري وما إلى ذلك حتى أنه يقرر أيضا ما إذا كنا يمكن أن تدخل طويلة / قصيرة في لحظة. ومع ذلك، في الصفقات الحقيقية، لكل علامة / شريط، وهناك سعر العطاءات وسعر قصير لكل رمز، لذلك هم قيمتان من كل رمز، أربع قيم لتداول الزوج. ثم كيف ينبغي لنا استخدام القيم الأربع لحساب إشارة التداول؟
في الواقع هذا السؤال ليس فقط حول كالمان تصفية، ولكن عامة إلى أي برنامج باكتست. بيانات الاختبار مرة أخرى لديها قيمة واحدة فقط لكل مرة (والتي قد تكون مفتوحة أو إغلاق)، ولكن في الصفقات الحقيقية، هناك أدنى طلب، أعلى محاولة وأسعار النظام الأخرى. ما هي القيم التي يجب أن نستخدمها لتحديد إشارة التداول؟
نقدر أي مساعدة!
عذرا، هناك خطأ ما. حاول مرة أخرى أو اتصل بنا عن طريق إرسال الملاحظات.
لقد أرسلت بنجاح تذكرة دعم.
سيكون فريق الدعم لدينا على اتصال قريبا.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
QuantStart.
الانضمام إلى كوانتكاديمي بوابة العضوية الخاصة التي تلبي احتياجات التجزئة المتزايد بسرعة المجتمع تاجر الكمي. سوف تجد مجموعة من ذوي الخبرة مثل التفكير من التجار الكميون على استعداد للرد على أسئلة التداول الكمي الأكثر إلحاحا.
تحقق من بلدي يبوك على التداول الكمي حيث أنا يعلمك كيفية بناء مربحة استراتيجيات التداول المنهجي مع أدوات بايثون، من الصفر.
نلقي نظرة على بلدي الكتاب الاليكتروني الجديد على استراتيجيات التداول المتقدمة باستخدام تحليل سلسلة زمنية، والتعلم الآلي والإحصاءات بايزي، مع بيثون و R.
من قبل مايكل هالز مور في 15 أغسطس، 2018.
إن أسلوب التداول الكمي المشترك ينطوي على أخذ اثنين من الأصول التي تشكل علاقة التكامل المشترك والاستفادة من نهج متوسط العودة إلى بناء استراتيجية التداول. ويمكن القيام بذلك عن طريق إجراء انحدار خطي بين الأصلين (مثل زوج من صناديق الاستثمار المتداولة) واستخدام ذلك لتحديد مقدار كل أصل طويل وقصير عند عتبات معينة.
ومن الشواغل الرئيسية لهذه الاستراتيجية أن أي بارامترات أدخلت عن طريق هذه العلاقة الهيكلية، مثل نسبة التحوط بين الأصلين، من المرجح أن تكون متغيرة زمنيا. أي أنها ليست ثابتة طوال فترة الاستراتيجية. ومن أجل تحسين الربحية سيكون من المفيد لو تمكنا من تحديد آلية لتعديل نسبة التحوط على مر الزمن.
نهج واحد لهذه المشكلة هو استخدام الانحدار الخطي المتداول مع نافذة المراجعة. وهذا ينطوي على تحديث الانحدار الخطي على كل شريط بحيث المنحدر واعتراض المصطلحات "متابعة" أحدث سلوك للعلاقة التكامل المشترك. ومع ذلك فإنه يقدم أيضا المعلمة الحرة أخرى في استراتيجية، وهي طول فترة الاستعراض. يجب أن يكون هذا الأمثل، في كثير من الأحيان عبر التحقق من صحة.
وهناك نهج أكثر تعقيدا هو استخدام نموذج الفضاء الدولة التي تعالج نسبة "الحقيقية" التحوط كمتغير مخفي غير مراقب ويحاول تقديره مع الملاحظات "صاخبة". في حالتنا هذا يعني بيانات التسعير لكل مادة عرض.
مرشح كالمان يؤدي بالضبط هذه المهمة. في مقال سابق كان لدينا نظرة متعمقة في تصفية كالمان وكيف يمكن أن ينظر إليه على أنه عملية تحديث بايزي.
في هذه المقالة سوف نستفيد من تصفية كالمان، من خلال مكتبة بيثمان بيكلمان، لمساعدتنا في تقدير ديناميكيا المنحدر والاعتراض (وبالتالي نسبة التحوط) بين زوج من صناديق الاستثمار المتداولة.
وسيتم في نهاية المطاف إعادة اختبار هذه التقنية مع نظام كسترادر الجديد للتداول المفتوح المصدر، والذي سيمكننا من معرفة كيف تغير أداء هذه الاستراتيجية في السنوات القليلة الماضية.
وكانت المؤامرات في هذا المنصب مستوحاة إلى حد كبير، ومددت من وظيفة كتبها إيدان أوماهوني، الذي يدير بلوق ألغو إنجينير.
موجز مختصر من تصفية كالمان.
إذا كنت ترغب في قراءة أكثر عمقا رياضيا المادة حول تصفية كالمان، يرجى إلقاء نظرة على المادة السابقة. وسوف أختصر باختصار النقاط الرئيسية هنا.
نموذج فضاء الدولة الذي سنستخدمه يتكون من معادلتين مصفوفة. ويعرف الأول بمعادلة الدولة أو الانتقال ويصف كيف يتم تغيير مجموعة من متغيرات الحالة، $ \ theta_t $ من فترة زمنية إلى أخرى. هناك اعتماد خطي على الحالة السابقة التي أعطاها مصفوفة الانتقال $ G_t $ فضلا عن الضوضاء نظام توزيعها عادة $ w_t $. لاحظ أن $ G = G_t $، بمعنى عام يعني أن مصفوفة الانتقال هي نفسها تعتمد على الوقت:
\ بيجين \ theta_t = G_t \ theta_ + w_t \ إند.
ومع ذلك، غالبا ما تكون هذه الحالات غير ملحوظة، وقد لا نستطيع الحصول على الملاحظات إلا في كل مؤشر زمني، والتي يتم منحها $ y_t $. ولملاحظات أيضا معادلة رصد مرتبطة تتضمن مكونا خطيا عن طريق مصفوفة الملاحظة $ F_t $، فضلا عن ضوضاء قياس، توزع عادة، وتعطى بمقدار $ v_t $:
\ بيجين y_t = F_t \ theta_t + v_t \ إند.
للحصول على مزيد من التفاصيل حول نموذج مساحة الدولة وتصفية كالمان، يرجى الرجوع إلى مقالتي السابقة.
دمج الانحدار الخطي في تصفية كالمان.
والسؤال الرئيسي في هذه المرحلة هو كيف يمكننا الاستفادة من هذا النموذج الفضاء الدولة لدمج المعلومات في الانحدار الخطي؟
إذا كنا نتذكر من المقالة السابقة على مل للانحدار الخطي ونحن نعلم أن الانحدار الخطي متعددة تنص على أن قيمة استجابة $ y $ هي وظيفة خطية من مدخلات ميزة $ $:
حيث $ \ بيتا ^ T = (\ beta_0، \ beta_1، \ لدوتس، \ beta_p) $ يمثل متجه تبديل اعتراض $ \ beta_0 $ والمنحدرات $ \ beta_i $، مع $ \ إبسيلون \ سيم \ ماثكال (\ مو ، \ سيغما ^ 2) $ يمثل مصطلح الخطأ.
نظرا لأننا في إعداد أحادي البعد، يمكننا ببساطة كتابة $ \ بيتا ^ T = (\ beta_0، \ beta_1) $ و $ = \ بيجين 1 \\ x \ إند $.
وضعنا الدول (مخفي) من نظامنا أن تعطى من قبل ناقلات $ \ بيتا ^ T $، وهذا هو اعتراض ومنحدر الانحدار الخطي لدينا. الخطوة التالية هي أن نفترض أن اعتراض الغد والمنحدر يساوي اعتراض اليوم والمنحدر مع إضافة بعض الضوضاء نظام عشوائي. وهذا يعطيها طبيعة المشي العشوائي، ويناقش سلوكها في طول في المادة السابقة على الضوضاء البيضاء والمشي العشوائي:
حيث يتم تعيين مصفوفة الانتقال إلى مصفوفة التفكيك ثنائية الأبعاد، $ G_t = $. هذا هو نصف نموذج الفضاء الدولة. والخطوة التالية هي استخدام أحد صناديق الاستثمار المتداولة في الزوج ك "ملاحظات".
تطبيق فلتر كالمان على زوج من صناديق الاستثمار المتداولة.
لتشكيل معادلة الملاحظة، من الضروري اختيار أحد سلاسل تسعير إتف لتكون المتغيرات "الملاحظة"، $ y_t $، والآخر الذي يعطى $ x_t $، والذي يوفر صياغة الانحدار الخطي كما هو موضح أعلاه:
\ بيجين y_t & = & F_t _t + v_t \\ & = & (\ beta_0، \ beta_1) \ بيجين 1 \\ x_t \ إند + v_t \ إند.
وبالتالي لدينا الانحدار الخطي إعادة صياغتها كنموذج فضاء الدولة، والذي يسمح لنا لتقدير اعتراض والمنحدر كما وصول نقاط السعر الجديدة عن طريق تصفية كالمان.
تلت و إتف.
سننظر في صندوقين متداولين لصناديق الاستثمار المتداولة ذات الدخل الثابت، وهما إتشاريس 20+ يار ترياسوري بوند إتف (تلت) و إتشاريس 3-7 سنوات سندات الخزينة إتف (إيي). وتتبع كل من صناديق الاستثمار المتداولة هذه أداء سندات الخزانة الأمريكية لفترة متفاوتة، وبالتالي فإنها تتعرض لعوامل سوقية مماثلة. سنقوم بتحليل سلوكهم الانحداري على مدى السنوات الخمس الماضية أو نحو ذلك.
سكاتيربلوت من أسعار إتف.
نحن الآن بصدد استخدام مجموعة متنوعة من المكتبات بايثون، بما في ذلك نومبي، ماتلوتليب، الباندا و بيكالمان لتحليل سلوك الانحدار الخطي الديناميكي بين هذين الأوراق المالية. كما هو الحال مع جميع برامج بايثون المهمة الأولى هي استيراد المكتبات اللازمة:
ملاحظة: سوف تحتاج على الأرجح لتشغيل بيب تثبيت بيكلمان لتثبيت مكتبة بيكلمان.
والخطوة التالية هي كتابة الدالة draw_date_coloured_scatterplot لإنتاج مبعثر لأسعار الإغلاق المعدلة للأصول (مستوحاة من هذا النوع من الانتثار من إنتاج إيدان أوماهوني). سيتم تلوين سكاتيربلوت باستخدام خريطة اللون ماتلوتليب، وتحديدا "الأصفر إلى الأحمر"، حيث الأصفر يمثل أزواج الأسعار أقرب إلى 2018، في حين الأحمر يمثل أزواج السعر أقرب إلى 2018:
لقد علقت على التعليمات البرمجية لذلك ينبغي أن يكون واضحا إلى حد ما لمعرفة ما تقوم به جميع الأوامر. ويتم العمل الرئيسي في إطار متغيرات الألوان، الألوان والمتغيرات العشوائية. وتنتج المؤامرة التالية:
سكاتيربلوت من صناديق الاستثمار المتداولة ذات الدخل الثابت، تفت مقابل إيي.
متفاوتة الوقت المنحدر والاعتراض.
الخطوة التالية هي في الواقع استخدام بيكالمان لضبط حيوي اعتراض والانحدار بين تفت و إيي. هذه الوظيفة أكثر تعقيدا وتتطلب بعض التوضيح.
أولا نحدد متغير يسمى دلتا، والذي يستخدم للسيطرة على التباين الانتقال للضوضاء النظام. في مقالتي الأصلية على تصفية كالمان كان هذا يرمز $ W_t $. نحن ببساطة مضاعفة مثل هذه القيمة من قبل مصفوفة الهوية ثنائية الأبعاد.
الخطوة التالية هي إنشاء مصفوفة الملاحظة. كما وصفنا سابقا هذه المصفوفة هو متجه الصف تتكون من أسعار تفت وتسلسل القيم الوحدة. لبناء هذا نستخدم طريقة فستاك نومبي لكومة عموديا هذه سلسلة السعر اثنين في متجه عمود واحد، ونحن بعد ذلك تبديل.
عند هذه النقطة نستخدم فئة كالمانفيلتر من بيكالمان لإنشاء مثيل تصفية كالمان. نحن نوردها مع أبعاد الملاحظات (الوحدة في هذه الحالة)، أبعاد الدول (اثنان في هذه الحالة ونحن ننظر إلى اعتراض والانحدار في الانحدار الخطي).
ونحن بحاجة أيضا إلى توفير المتوسط والتكافؤ في الحالة الأولية. في هذه الحالة وضعنا متوسط الحالة الأولية لتكون صفر لكل من اعتراض والمنحدر، في حين أننا نأخذ مصفوفة الهوية ثنائية الأبعاد للتغاير الحالة الأولية. وتعطى مصفوفات الانتقال أيضا من خلال مصفوفة الهوية ثنائية الأبعاد.
وآخر المصطلحات التي يجب تحديدها هي مصفوفات المراقبة كما هو مبين أعلاه في أوبس، مع تساوي التباين بينها. وأخيرا يتم إعطاء مصفوفة التباين المشترك (التي تسيطر عليها دلتا) بواسطة trans_cov، الموصوفة أعلاه.
الآن لدينا لدينا كف كالمان مرشح المثال يمكننا استخدامه لتصفية استنادا إلى أسعار معدلة من إيي. وهذا يوفر لنا وسيلة الدولة للاعتراض والمنحدر، وهذا ما نحن بعد. وبالإضافة إلى ذلك نحن أيضا الحصول على التباينات من الدول.
كل هذا ملفوفة في الدالة Calc_slope_intercept_kalman:
وأخيرا نقوم بتخطيط هذه القيم كما تم إرجاعها من الدالة السابقة. لتحقيق ذلك نحن ببساطة إنشاء داتافريم الباندا من المنحدرات والاعتراضات في قيم الوقت $ t $، وذلك باستخدام مؤشر من أسعار داتافريم، ومؤامرة كل عمود كقسم فرعي:
ويعطى الناتج على النحو التالي:
الانحدار المتغير الوقت واعتراض الانحدار الخطي بين صناديق الاستثمار المتداولة بتف و إيي.
ومن الواضح أن المنحدر الزمني يتغير بشكل كبير خلال الفترة 2018-2018، حيث انخفض من حوالي 1.38 في عام 2018 إلى نحو 0.9 في عام 2018. وليس من الصعب أن نرى أن استخدام نسبة التحوط الثابتة في استراتيجية تداول أزواج سيكون جامدا جدا.
وبالإضافة إلى ذلك تقدير المنحدر صاخبة نسبيا. ويمكن التحكم في ذلك من خلال متغير الدلتا الوارد في الشفرة أعلاه ولكن له تأثير أيضا على تقليل استجابة المرشح للتغيرات في نسبة التحوط "الحقيقية" غير المرصودة بين صندوقي الاستثمار المتداولين.
عندما نأتي لتطوير استراتيجية التداول سيكون من الضروري لتحسين هذا الدلتا المعلمة عبر سلال من أزواج من صناديق الاستثمار المتداولة باستخدام التحقق من صحة مرة أخرى.
الخطوات التالية.
والآن بعد أن تمكنا من بناء نسبة تحوط دينامية بين صندوقي الاستثمار المتداولين، نحتاج إلى طريقة لتنفيذ استراتيجية تداول تستند إلى هذه المعلومات. المقالة التالية في السلسلة سوف تستفيد من كسترادر لإجراء اختبار خلفي على أزواج مختلفة من أجل معرفة كيف يتغير الأداء عندما تتغير المعلمات والفترات الزمنية.
ملاحظة بيبليوغرافية.
وقد تم استخدام تصفية كالمان ل "الانحدار الخطي على الانترنت" من قبل العديد من الأفراد التداول الكمي. يستخدم إرني تشان هذه التقنية في كتابه [1] لتقدير معاملات الانحدار الخطي الديناميكية بين صندوقي الاستثمار المتداولين: إيوا و إوك.
استخدم إيدان أوماهوني ماتبلوتليب و بيكالمان أيضا لتقدير معاملات الانحدار في وظيفته [2]، والتي ألهمت الرسوم البيانية لهذه المقالة الحالية.
يناقش جوناثان كينلاي تطبيق فلتر كالمان لمحاكاة البيانات المالية [3]، ويقترح أنه قد يكون من المستحسن استخدام كف لقمع الإشارات التجارية الناتجة في فترات الضوضاء العالية، أو زيادة المخصصات للأزواج حيث الضوضاء منخفضة.
يمكن العثور على مناقشة تمهيدية حول تصفية كالمان، باستخدام لغة البرمجة R، في كوبيرتوايت وميتكالف [4].
المراجع.
مجرد بدء مع التداول الكمي؟
3 أسباب الاشتراك في قائمة البريد الإلكتروني كوانتستارت:
1. دروس التداول الكمي.
سوف تحصل على إمكانية الوصول الفوري إلى دورة مجانية 10-البريد الإلكتروني معبأة مع تلميحات ونصائح لمساعدتك على البدء في التداول الكمي!
2. جميع أحدث المحتوى.
كل أسبوع سوف نرسل لك التفاف جميع الأنشطة على كوانتستارت لذلك عليك أن لا يفوتون وظيفة مرة أخرى.
ريال مدريد، وقابلة للتنفيذ نصائح التداول الكمي مع أي هراء.
QuantStart.
الانضمام إلى كوانتكاديمي بوابة العضوية الخاصة التي تلبي احتياجات التجزئة المتزايد بسرعة المجتمع تاجر الكمي. سوف تجد مجموعة من ذوي الخبرة مثل التفكير من التجار الكميون على استعداد للرد على أسئلة التداول الكمي الأكثر إلحاحا.
تحقق من بلدي يبوك على التداول الكمي حيث أنا يعلمك كيفية بناء مربحة استراتيجيات التداول المنهجي مع أدوات بايثون، من الصفر.
نلقي نظرة على بلدي الكتاب الاليكتروني الجديد على استراتيجيات التداول المتقدمة باستخدام تحليل سلسلة زمنية، والتعلم الآلي والإحصاءات بايزي، مع بيثون و R.
من قبل مايكل هالز مور في 21 سبتمبر، 2018.
في السابق على كوانتستارت لقد نظرنا في الأسس الرياضية لنماذج الفضاء الدولة و كالمان مرشحات، فضلا عن تطبيق مكتبة بيكالمان لزوج من صناديق الاستثمار المتداولة لضبط حيوي نسبة التحوط كأساس لاستراتيجية التداول عائد المتوسطة.
في هذه المقالة سوف نناقش استراتيجية التداول في الأصل بسبب إرنست تشان (2018) [1] واختبارها من قبل إيدان أوماهوني في كوانتوبيان [2]. سوف نستفيد من الإطار المفتوح كسترادر باكتستينغ المصدر المفتوح بايثون من أجل تنفيذ الاستراتيجية. وستقوم كسترادر بتنفيذ "الرفع الثقيل" لتتبع الموقف، والتعامل مع محفظة ومعالجة البيانات، في حين أننا نركز فقط على التعليمات البرمجية التي تولد إشارات التداول.
إستراتيجية التداول.
يتم تطبيق استراتيجية التداول أزواج على اثنين من الصناديق المتداولة في البورصة (إتف) التي تتبع كل من أداء متفاوتة المدة سندات الخزانة الأمريكية. هم انهم:
والهدف من ذلك هو بناء استراتيجية متوسطة العودة من هذا الزوج من صناديق الاستثمار المتداولة.
"الانتشار" الاصطناعي بين تلت و إي هو السلاسل الزمنية التي نحن مهتمون فعلا بالتوق أو التقصير. يتم استخدام فلتر كالمان لتتبع نسبة التحوط بشكل حيوي بين الاثنين من أجل الحفاظ على الفارق الثابت (وبالتالي يعني التراجع).
لإنشاء قواعد التداول فمن الضروري تحديد متى انتقلت الفارق بعيدا جدا عن القيمة المتوقعة. كيف نحدد ما هو "بعيد جدا"؟ يمكننا استخدام مجموعة من القيم المطلقة الثابتة، ولكن هذه يجب أن يكون تحديد تجريبيا. وهذا من شأنه أن يدخل معلمة حرة أخرى في النظام الذي يتطلب التحسين (وخطر إضافي من الإفراط في الإمداد).
نهج واحد "بارامتريليس" لإنشاء هذه القيم هو النظر في مضاعف الانحراف المعياري للفرق واستخدامها كحدود. للبساطة يمكننا تعيين معامل متعددة لتكون مساوية لأحد.
وبالتالي يمكننا أن نذهب "فترة طويلة انتشار" إذا كان الخطأ توقعات قطرات أقل من الانحراف المعياري السلبي للفرق. على التوالي يمكننا أن نذهب "قصيرة انتشار" إذا تجاوز الخطأ التنبؤ الانحراف المعياري الإيجابي للفرق. قواعد الخروج هي ببساطة عكس قواعد الدخول.
وتمثل نسبة التحوط الديناميكية بمكون واحد من متجه الحالة المخفي في الوقت $ t $، $ \ theta_t $، والذي سنشير إليه على أنه $ \ ثيتا ^ 0_t $. هذا هو قيمة "بيتا" المنحدر المعروف جيدا من الانحدار الخطي.
"شوق انتشار" هنا يعني شراء (شوق) $ N $ وحدات من تلت وبيع (تقصير) $ \ لفلور $، حيث $ \ لفلور $ هو "الكلمة" التي تمثل أعلى عدد صحيح أقل من $ X $. هذا الأخير ضروري لأنه يجب علينا التعامل مع عدد كامل من وحدات صناديق الاستثمار المتداولة. "تقصير انتشار" هو عكس ذلك. يتحكم $ N $ في الحجم الإجمالي للموقف.
يمثل $ e_t $ خطأ التنبؤ أو الخطأ المتبقي للتنبؤ في الوقت $ t $، في حين أن $ Q_t $ تمثل تباين هذا التنبؤ في الوقت $ t $.
من أجل الاكتمال، يتم تحديد القواعد هنا:
$ e_t \ لوت - \ سرت $ - طول الفارق: اذهب طويلا $ $ $ سهم من تلت و اقصر $ \ لفلور $ وحدات إيي $ e_t \ غي - \ سرت $ - خروج طويل: أغلق كل المواقف الطويلة ل تلت و إيي $ e_t \ غ \ سرت $ - اختصار الفارق: اذهب قصير $ N $ سهم من تلت وتذهب $ \ لفلور $ وحدات إيي $ e_t \ لي \ سرت $ - خروج قصير: أغلق كل المراكز القصيرة من تلت و إيي .
دور فلتر كالمان هو مساعدتنا في حساب $ \ theta_t $، وكذلك $ e_t $ و $ Q_t $. يمثل $ \ theta_t $ متجه قيم الاعتراض والمنحدرات في الانحدار الخطي بين تلت و إيي في الوقت $ t $. ويقدر من قبل مرشح كالمان. الخطأ المتوقع / المتبقي $ e_t = y_t - \ هات _t $ هو الفرق بين القيمة المتوقعة للعلاج تلت اليوم وتقدير عامل تصفية كالمان ل تلت اليوم. $ Q_t $ هو التباين في التوقعات، وبالتالي $ \ سرت $ هو الانحراف المعياري للتنبؤ.
ويشمل تنفيذ الاستراتيجية الخطوات التالية:
تلقي الحانات السوق اليومية أوهلكف لكل من تلت و إيي استخدام المتكرر "على الانترنت" فلتر كالمان لتقدير سعر تلت اليوم استنادا إلى ملاحظات الأمس من إيي تأخذ الفرق بين تقدير كالمان من تلت والقيمة الفعلية، وغالبا ما تسمى خطأ التوقعات أو خطأ متبقي، وهو مقياس لمدى انتشار انتقال تل و إيي بعيدا عن قيمته المتوقعة طول الفارق عندما تكون الحركة بعيدة كل البعد عن القيمة المتوقعة وتقابل في المقابل الفارق عندما تكون الحركة بعيدة عن المتوقع القيمة قم بإنهاء المراكز الطويلة والقصيرة عندما تعود السلسلة إلى قيمتها المتوقعة.
من أجل تنفيذ هذه الاستراتيجية من الضروري أن يكون لديك بيانات التسعير أوهلكف للفترة التي يغطيها هذا باكتست. وعلى وجه الخصوص، من الضروري تنزيل ما يلي:
تلت - للفترة من 3 أغسطس 2009 إلى 1 أغسطس 2018 (الرابط هنا) إيي للفترة من 3 أغسطس 2009 إلى 1 أغسطس 2018 (الرابط هنا).
This data will need to placed in the directory specified by the QSTrader settings file if you wish to replicate the results.
Python QSTrader Implementation.
Since QSTrader handles the position tracking, portfolio management, data ingestion and order management the only code we need to write involves the Strategy object itself.
The Strategy communicates with the PortfolioHandler via the event queue, making use of SignalEvent objects to do so. In addition we must import the base abstract strategy class, AbstractStrategy .
Note that in the current alpha version of QSTrader we must also import the PriceParser class. This is used to multiply all prices on input by a large multiple ($10^8$) and perform integer arithmetic when tracking positions. This avoids floating point rounding issues that can accumulate over the long period of a backtest. We must divide all the prices by PriceParser. PRICE_MULTIPLIER to obtain the correct values:
The next step is to create the KalmanPairsTradingStrategy class. The job of this class is to determine when to create SignalEvent objects based on received BarEvent s from the daily OHLCV bars of TLT and IEI from Yahoo Finance.
There are many different ways to organise this class. I've opted to hardcode all of the parameters in the class for clarity of the explanation. Notably I've fixed the value of $\delta=10^ $ and $v_t=10^ $. They represent the system noise and measurement noise variance in the Kalman Filter model. This could also be implemented as a keyword argument in the __init__ constructor of the class. Such an approach would allow straightforward parameter optimisation.
The first task is to set the time and invested members to be equal to None , as they will be updated as market data is accepted and trade signals generated. latest_prices is a two-array of the current prices of TLT and IEI, used for convenience through the class.
The next set of parameters all relate to the Kalman Filter and are explained in depth in the previous two articles here and here.
The final set of parameters include days , used to track how many days have passed as well as qty and cur_hedge_qty , used to track the absolute quantities of ETFs to purchase for both the long and short side. I have set this to be 2,000 units on an account equity of 100,000 USD.
The next method _set_correct_time_and_price is a "helper" method utilised to ensure that the Kalman Filter has all of the correct pricing information available at the right point. This is necessary because in an event-driven backtest system such as QSTrader market information arrives sequentially.
We might be in a situation on day $K$ where we've received a price for IEI, but not TFT. Hence we must wait until both TFT and IEI market events have arrived from the backtest loop, through the events queue. In live trading this is not an issue since they will arrive almost instantaneously compared to the trading period of a few days. However, in an event-driven backtest we must wait for both prices to arrive before calculating the new Kalman filter update.
The code essentially checks if the subsequent event is for the current day. If it is, then the correct price is added to the latest_price list of TLT and IEI. If it is a new day then the latest prices are reset and the correct prices are once again added.
This type of "housekeeping" method will likely be absorbed into the QSTrader codebase in the future, reducing the necessity to write "boilerplate" code, but for now it must form part of the strategy itself.
The core of the strategy is carried out in the calculate_signals method. Firstly we set the correct times and prices (as described above). Then we check that we have both prices for TLT and IEI, at which point we can consider new trading signals.
$y$ is set equal to the latest price for IEI, while $F$ is the observation matrix containing the latest price for TLT, as well as a unity placeholder to represent the intercept in the linear regression. The Kalman Filter is subsequently updated with these latest prices. Finally we calculate the forecast error $e_t$ and the standard deviation of the predictions, $\sqrt $. Let's run through this code step-by-step, as it looks a little complicated.
The first task is to form the scalar value y and the observation matrix F , containing the prices of IEI and and TLT respectively. We calculate the variance-covariance matrix R or set it to the zero-matrix if it has not yet been initialised. Subsequently we calculate the new prediction of the observation yhat as well as the forecast error et .
We then calculate the variance of the observation predictions Qt as well as the standard deviation sqrt_Qt . We use the update rules derived here to obtain the posterior distribution of the states theta , which contains the hedge ratio/slope between the two prices:
Finally we generate the trading signals based on the values of $e_t$ and $\sqrt $. To do this we need to check what the "invested" status is - either "long", "short" or "None". Notice how we need to adjust the cur_hedge_qty current hedge quantity when we go long or short as the slope $\theta^0_t$ is constantly adjusting in time:
This is all of the code necessary for the Strategy object. We also need to create a backtest file to encapsulate all of our trading logic and class choices. The particular version is very similar to those used in the examples directory and replaces the equity of 500,000 USD with 100,000 USD.
It also changes the FixedPositionSizer to the NaivePositionSizer . The latter is used to "naively" accept the suggestions of absolute quantities of ETF units to trade as determined in the KalmanPairsTradingStrategy class. In a production environment it would be necessary to adjust this depending upon the risk management goals of the portfolio.
Here is the full code for the kalman_qstrader_backtest. py :
As long as QSTrader is correctly installed and the data has been downloaded from Yahoo Finance the code can be executed via the following command in the terminal:
Thanks to the efforts of many volunteer developers, particularly @ryankennedyio and @femtotrader, the code is well-optimised for OHLCV bar data and carries out the backtesting rapidly.
نتائج الاستراتيجية.
One of the latest features to be added to QSTrader is that of the "tearsheet" developed primarily by @nwillemse. This feature is still in an early stage of development but will be demonstrated here.
A tearsheet is primarily used within institutional settings as a "one pager" description of a trading strategy. The TearsheetStatistics class in the QSTrader codebase replicates many of the statistics found in a typical strategy performance report.
The top two graphs represent the equity curve and drawdown percentage, respectively. Beneath this are the monthly and yearly performance panels. Finally the equity curve, trade-level and time-based statistics are presented:
Click the image for a larger view.
The equity curve begins relatively flat for the first year of the strategy but rapidly escalates during 2018. During 2018 the strategy becomes significantly more volatile remaining "underwater" until 2018 and reaching a maximum daily drawdown percentage of 15.79%. The performance gradually increases from the maximum drawdown in late 2018 through to 2018.
The strategy has a CAGR of 8.73% with a Sharpe Ratio of 0.75. It also has a long maximum drawdown duration of 777 days - over two years! Note that this strategy is carried out gross of transaction costs so the true performance would likely be worse.
الخطوات التالية.
There is a lot of research work necessary to turn this into a profitable strategy that we would deploy in a live setting. Potential avenues of research include:
Parameter Optimisation - Varying the parameters of the Kalman Filter via cross-validation grid search or some form of machine learning optimisation. However, this introduces the distinct possibility of overfitting to historical data. Asset Selection - Choosing additional, or alternative, pairs of ETFs would help to add diversification to the portfolio, but increases the complexity of the strategy as well as the number of trades (and thus transaction costs).
In future articles we will consider how to carry out these procedures for various trading strategies.
المراجع.
مجرد بدء مع التداول الكمي؟
3 أسباب الاشتراك في قائمة البريد الإلكتروني كوانتستارت:
1. دروس التداول الكمي.
سوف تحصل على إمكانية الوصول الفوري إلى دورة مجانية 10-البريد الإلكتروني معبأة مع تلميحات ونصائح لمساعدتك على البدء في التداول الكمي!
2. جميع أحدث المحتوى.
كل أسبوع سوف نرسل لك التفاف جميع الأنشطة على كوانتستارت لذلك عليك أن لا يفوتون وظيفة مرة أخرى.
ريال مدريد، وقابلة للتنفيذ نصائح التداول الكمي مع أي هراء.
Kalman filter trading strategy
Kalman Filters are used in signal processing to estimate the underlying state of a process. They are incredibly useful for finance, as we are constantly taking noisy estimates of key quantities and trading indicators. This notebook introduces Kalman Filters and shows some examples of application to quantitative finance.
The lecture will be presented at this meetup. We will be releasing a video lecture as well, watch this thread for a link.
Also in this lecture:
This is part of Quantopian’s Summer Lecture Series. We are currently developing a quant finance curriculum and will be releasing clone-able notebooks and algorithms to teach key concepts. Stay tuned for more. We are also working on a permanent home for all of our notebooks.
Credit for the notebooks goes to Evgenia 'Jenny' Nitishinskaya, and credit for the algorithms goes to David Edwards.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
A big thanks to one of our own users, Dr Aidan O'Mahony, for allowing us to use his Kalman Filter example. You can find more on his blog.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Nice intro on Kalman filters. One little point on the financial side though, you can use prices to estimate the hedge ratio in a cointegration relationship but you should use returns to estimate alpha and beta to avoid spurious relationships.
You're completely correct, Matthieu. We have a note near the end explaining that you'd generally want to use returns, but perhaps we should make that clearer. We used prices because the pictures are clearer due to the increased range.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
I found these two sites incredibly helpful for figuring out which variables in the Kalman filter do what.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Here is the companion algorithm for the Kalman filter talk. It's an implementation of the pair trade from this post that uses Kalman filters to smooth the prices and calculate the spread between the two stocks.
thank you very much for the lecture. It was very instructive ;). From France :)
Very glad you enjoyed it, Tao. Please don't hesitate to share any feedback.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
How do read the heat map does 2018 to 2018.. is a good year.. and 2017 is a bad year. from blue to red?? which one.. indicates overheating.
The heat map doesn't say anything about the quality of the year. Rather it just indicates how the relationship between two securities, and therefore regression coefficients, changes over time. There is a distinct movement through the time space as indicated by color. The point here is that you have to be careful when taking a regression, as at any given time the actual underlying conditions may be changing.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Thanks Delany for clarifying things..
What do the valleys in the equity curve represent? Times when Kalman got the underlying state completely wrong?
Hi Bharath, are you referring to the algorithm returns or something in the notebook?
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Hi, did you put out the link to the video? Sorry if I'm missing it.
Check out the Quantopian Lectures page it is a living collection of all of the Quantopian Lectures Series material including notebooks, backtests, and videos.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
arxiv/abs/1509.04072 -- read this on the train this morning, looks good, but I haven't worked through the maths for the actual feature transformation yet.
Also, for future readers of this thread, David shared an algo which generalizes the Kalman-based pairs trading to multiple pairs, in this thread:
I was working through the Kalman Filter notebook and I noticed in the Linear Regression portion if you regress SPY over SPY you dont get a Beta of 1 throughout and it shows that there is alpha to be gained.
It should approach 1 though, over time? It's just an estimator.
Shouldnt Alpha approach zero though? It hangs around 0.96 - 0.99.
I am not sure how you got it to do that, for me, alpha approaches 0. I'm attaching my clone.
I am by no means an expert at python, but I am assuming that the +9.916e-1 at the top of the second graph gets added to each y interval in the second plot making it around 0.900.
Your notebook is the same exact as mine. I have attached my notebook. I changed my start and end date and it goes from 2018-2018.
I am no expert on kalman filters so I will have to leave that one to the crowd.
Will go ahead and run some simple regression checks tonight, but I imagine it has do due something with the calculation and not the input prices.
Attempted other pairs of the same securities, and none of them seem to approach a beta of 1 or alpha of 0 when regressed over eachother (for example, tried SPY & SPY, TSLA & TSLA, and IWM & IWM).
Miles, the issue is related to the choice of the prior mean and covariance. I'm not sure what the justification is for choosing np. ones((2,2)) as the prior covariance matrix. I found this link very helpful to understand how the filter works. In the attached notebook I ran some experiments to better understand how choice of prior affects convergence.
I will definitely look into this as I want to move away from an EMA to something that has inputs that are more appropriate.
I’m curious if anyone has an opinion as to when you would exactly use a Kalman filter to calculate a moving average. For example in momentum and trend following strategies moving averages are used to smooth a time series to give an indication of a trend or change in momentum. It seems like using a Kalman filter by virtue of giving a closer fit to the actual time series reduces the smoothing effect. In the moving average example in Delaney's original notebook the 90 day MA looks smoother than the 60 day MA which is smoother than the 30 day MA which is smoother than the Kalman estimate of the MA. So applying a Kalman estimate of a moving average to momentum and trend following strategies would in general result in extra unwanted trading. ماذا ينقصني؟
A Kalman filter is used to smooth out noise, and the parameters to a Kalman filter can be adjusted to make the smoothing effect more or less severe, just like in a moving average. The trade-off is that a smoother signal will lag the true state of the world, whereas a signal that follows the measurements of the world can be quite noisy. Why some people use Kalman filters is that they are effectively more mathematically generalized moving averages. You can put in other models, and the parameters to control the smoothness actually mean something (measurement error, etc.). In a moving average what does 29 days mean vs 47 days? In practice Kalman filters may be able to get you closer to a non-parametric model. A non-parametic model is one in which you don't have to tweak parameters, which is highly desirable -- parameter tweaking leads to a lot of overfitting. Again, because the parameters to a Kalman filter actually mean something, you may be able to estimate them by say measuring variance on a dataset. This would allow you to not have to tweak and pick a smoothness, like you would have to with a moving average.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
One continuing question on using Kalman as a replacement for MAs. I'm not sure what the "correct" values of transition covariance and observation covariance should be. According to me, we must take.
observation cov = variance of underlying data over some ballpark lookback window (how long?)
Without estimating these (and setting both to some default value like 1) will likely defeat the non-parametric nature of the Kalman filter?
هل فهمي صحيح؟ And if yes, is there a better way to estimate the observation / transition covariances?
You're correct, there's no easy answer, and in the end a Kalman filter may end up being just as parametric as a MA. However, with an MA there is no hope of being able to derive the proper parameter, as the window length really means nothing. With a Kalman filter you can at least have some hope of occasionally doing so. There may be a process (less frequent in finance, more frequent in other fields) in which you can estimate observation and transition covariances through another variable rather than the data itself, or maybe even derive theoretical values. The idea is that worst case you're just as parametric as a MA, and have to optimize covariance values, best case you find another way to estimate/derive covariances in a non-parametric fashion. The way in which you would derive the covariances is probably pretty specific to each system, so I'm not sure there's a general way of doing so.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Can you please help calculate Q(t), the measurement variance prediction, in Python? I'm assuming that Q(t) can be calculated from the state_covs array in the notebook. The square root of Q(t) can then be used to determine entry/exit signals (as described in Ernest Chan's book Algorithmic Trading ). شكر.
Hello Peter. Unfortunately my plate is very full developing more lectures, and I will not have time to look into this for a few weeks. My recommendation is to clone the notebook and mess around with the code. You should be able to see how to retrieve the information from the state matrix. If not I can take a look when I have time.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
@delany it doesnt work. I've tried run all.
Hello Vlademir. I just double-checked the lecture and it should all be working fine. There was a small bug in the first moving average example plots that I corrected.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان. وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Can anyone help me with the application of Kalman Filters (KF) in predicting returns vs prices - When I run KF on prices I get pretty stable coefficients but when I run the same on returns, as expected, very noisy coefficients.
Lets say daily return on day t is +2% and on t+1 is -3%. When I will use the coefficients of day t to trade on t+1 the coefficients on t+1 trading will be totally off. Is there a way to handle this or we should run KF on prices and not on returns when estimating betas.
I used the code from the following link to estimate betas -
I'm assuming by coefficients you mean the beta coefficients? My guess is you are using the same observation and transition covariance in both cases. Try adjusting the observation covariance to reduce the effect of the latest observation on the beta coefficients.
شكرا لك على الرد. Yes, chaging covariance matrices improved the beta coefficients.
Are there any good practices for the number of iterations we should run to stablize the beta coefficients ? I have daily data for around 15 years so to calculate today's betas should I run from the first data point or should I run for the last 100 or 300 days. In these two cases since covariance matrices will be different so I may get different beta coefficients.
I would say the more data the better but the only real way to know is to test it and see what works best.
عذرا، هناك خطأ ما. حاول مرة أخرى أو اتصل بنا عن طريق إرسال الملاحظات.
لقد أرسلت بنجاح تذكرة دعم.
سيكون فريق الدعم لدينا على اتصال قريبا.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
Kalman filter trading strategy
Let's define the variables:
xt is the hidden variable that is estimated, in this case it represents the best estimate of the dynamic mean or dynamic center of the time series.
A is the state transition matrix, or I often think of it as similar to the autoregressive coefficient in an AR model; think of it as Beta in a linear regression here.
w is the noise of the model.
zt is the measured noisy state variable that has a probabilistic relationship to x.
xt we recognize as the estimate of the dynamic center of the time series.
v is the noise of the model.
xt_new_est=xt_est + K*(zt - H*x_est). The value of K generally converges to a stable value, when the underlying series is truly gaussian (as seen in fig 1. during the start of the series, it learns). After a few iterations, the optimal value of K is pretty stable, so the model has learned or adapted to the underlying series.
Those working on the Neural Network tutorials, hopefully see a big advantage here.
Here are some references which may further help in understanding of the kalman filter.
In addition, there is a kalman smoother in the R package, DLM.
Not only is there a fantastic writeup on hidden markov models and kalman filters, but there is real code you can replicate. It is one of the best practical books on Machine Learning I have come across-- period.
51 التعليقات:
I like your style, but you must admit that building multi-dim models would be a bit tough to explain to others without some 'math jargon' like vectors.
with a diagram and a brief summary, for those interested in practical application.
I discovered your blog recently, excellent work, it is giving me much material for thought and study. تهانينا.
I have come across a number of recent Internet posts like this that attempt to bring better understanding to what the Kalman filter is, how it is applied and what fields it is used in. Thank you for contributing to this effort.
I have also been familiarizing myself with the Kalman filter, it seems the equations assume an underlying 'model' (for example one paper I looked at had an example of estimating a random constant), what model(s) would one apply to a random walk such as the one in the picture?
The transition and observation eqs A and H were assumed a constant 1 for the exercise.
The 1st estimates of x0, y0 were simply the normal parameters used to generate the series; أي. .002 and .02, respectively. The update equations take over from the initial estimates.
Of course this is an idealized case. That is using the "true" mean and standard deviation values (0.002 and 0.02, respectively) of the normal Gaussian process as the initial estimates for the Kalman filter or estimator.
In this toy model, I used cumsum (for simple compounding I use cumproduct of 1+N(u, std)_rtns), but if I was modelling something more accurate, I would.
1) Record the mean and std of the actual instrument as a proxy for the RW.
2) If I'm modeling a price series, I will use Geometric Brownian Motion model, which doesn't allow negative price values; and give a lognormal price distribution (for things like terminal wealth monte carlo simulations, for example).
Hi, I have done a bit of research on the packages you mentioned: dlm for R.
But apparently the one you use (in the dlm package) is not causal. I thought the smoothing was so good that I tried to calculate the estimate mean at different dates.
s <- dlmSmooth(Nile, dlmModPoly(1, dV = 15100, dW = 1470))
s2 <- dlmSmooth(Nile2, dlmModPoly(1, dV = 15100, dW = 1470))
lines(dropFirst(s2$s), col = "red", lwd=2)
What will happen is that final few values will change to reflect the best fit for the entire series. I think this is what you are referring to? If so, I do not typically use dlm (but it looked to be the only package implementing the kalman filter in R), but I assume it is running the entire series in batch mode and then estimating the best fit of the entire series for each of your runs, which changes some of the endpoints.
for (i in 5:length(Nile))
Nile2 = ts(first(Nile, i), start=1871, frequency=1)
s2 <- dlmSmooth(Nile2, dlmModPoly(1, dV = 100, dW = 10))
lines(dropFirst(s2$s), col = "red", lwd=1)
causalSmoothedNile = c(causalSmoothedNile, last(dropFirst(s2$s)))
causalSmoothedNile = ts(causalSmoothedNile, start=1871, frequency=1)
lines(causalSmoothedNile, col = "orange", lwd=2)
Anyway I thought that this filter was causal, it is not. My mistake. I guess my question is really if the Kalman Filter can give a good real time smoothing. Different from a moving average. Or a FIR.
After launching the first script, can you try to execute.
lines(causalSmoothedNile, col = "orange", lwd=2)
lines(EMA(Nile,6), col = "green", lwd=2)
xfm, because I got to first and could not have R recognize the command (don't know what library it came from) first from first(Nile,4) ((Error: could not find function "first")), I decided to abort the mission, before debugging as in the last example. I'm pretty sure your concern is what I mentioned earlier though; that the filter changes with rolling data (particularly at the endpoints), yes? This is correct, although I'm not sure it is strictly causal or not in the sense that causality requires future data.
To simplify in the sense I was explaining, is that batch typically processes data in parallel (all at once), while online does so sequentially (or one at a time). If you use a rolling window, it is using batch training on overlapping windows each iteration, which can and will alter properties of the transformed data dependent on overlapped regions. If you transform and processes the data only one element at a time (online), you can sometimes avoid these problems.
Thanks for your last explanation.
"last comes from the package xts" . would be a good general practice to include require(xts) or library(xts) in your script to make this clear.
What is H in this equations??
And how to calculate it??
This link can be helpful for dummies like me to understand Kalman filter)))
Intelligent Trading. Thank you for this fantastic post on a useful implementation of a Kalman Filter in R. I looked for it in the comments above and in the initial blog post, but I didn't see any link or posting of the original R code used to produce the image shown above. Is there any chance you may be able to post that or provide a link to it?
The package for kalman filter that I recall is DLM. cran. r-project/web/packages/dlm/dlm. pdf.
There is a similar example in the Marsland book, "Machine Learning," in the recommended book section up top.
It was mentioned that the Kalman filter from the dlm package is not causal. Is that true of Kalman filters in general or only the dlm implementation? I'm curious to know whether the fkf, kfas, or sspir implmentations might be causal.
Kalman filters generally are not dependent upon unseen future data as far as I know. As explained in the basic tutorial, they make estimates and corrections of properties of the data in an online fashion (as it arrives).
Thanks, for your post, I'm finally getting some decent results with my interpretation of the kalman filter. Its really just a simple recursive way of tracking a linear parameter such as beta based on the volatility of the parameter and the amount of noise in the measurement. If you wanted to also include other inputs such as market depth & volatility to a Beta estimate how could this be added to the kalman filter? A PhD type told me that Beta is highly correlated with variance, (today's high vol stocks -> today's high beta stocks), trying to see how adding various inputs would work with the kalman filter.
Not certain I fully follow your approach.
I assume you are going to collect some proprietary factors, then use PCA to reduce the factor set. Given such a factor set, you use a kalman filter to update the factor values?
Jeff, I apologize as I removed your post (accidentally), but I saved the answer above.
Some of these initial estimates are arrived at via trial and error or having knowledge of the system behavior beforehand.
One way I approach it is to start by visualizing the result running sweeps of R and Q values and observing if the response is what I am looking for in the estimator.
I've found in the case of estimating time series as in the example I posted is to use a very small value of process noise Q, relative to the measurement noise, R, as we are looking for a fairly smooth estimate of the process.
Just thought I would make a comment on the 'dlm' package.
Sorry I've been out a few days, but the update will automatically happen in the KF equation updater. You can do many things to adjust and toy around with some variables like the gain factor, K, itself. In the R program DLM, I believe they show examples of how do deal with discrete time jumps and quickly updating based upon the jump size.
Anon from above (should register; excellent website).
A lot of it is part art, part science. However, you can borrow from machine learning-- various validation and regularization methods to each series. Most of these methods try to generalize and tradeoff between fitted bias and variance vs model complexity.
Have you experimented at all using either the Particle or Unscented version? What I am wondering is how one could can construct a simple price function so to be used in conjunction with either of the non linear versions of the Kalman filter.
yes I saw the sin function version implemented at the blog you mentioned. If one wanted to apply this but to a simple price series what kind of price function could they use? I guess the hardest part here is how do you determine what type of function to use when predicting something like price?
There are dozens of econometric models that already exist for this; some have worked for years on some price series.
Thanks IT. Did you find that the linear version of the filter to be sufficient. Or did you have to move onto variants I. e unfiltered, particle, gaussian process, etc.
IT would you be able to do a post (without divulging information) on how one of these predictors could be used?
Regarding the discussion of dlmFilter and dlmSmooth in the R DLM package, or the comparable two functions in the pykalman package, I don't don't why causality in the EE sense should recommend itself, particularly in a batch or moving window process. A Rauch-Tung-Striebel smoother (as in dlmSmooth, and sometimes sloppily referred to as a "Kalman smoother") is a Bayesian updater. The idea is that after one has made a forward estimate, as in dlmFilter, and the actual data is observed, it's entirely sensible to go backwards and update the state estimates in light of what was actually observed. Accordingly the filtering-smoothing process has a structure like that of the EM algorithm ("expectation-maximization") where there is a run forward through the dataset, and then backwards doing the state update.
Comments
Post a Comment