Monday 19 March 2018

كالمان استراتيجية التداول مرشح


كالمان لتجارة الفلاتر والأزواج 1.
ولتحديد نسب التحوط لزوج من السلاسل السعرية المشتركة، تكون بسيطة جدا: استخدام بياناتها التاريخية وأداء عملية شريان الحياة للسحب من أجل اختبار الانحدار أو اختبار يوهانسن للعثور على النماذج.
إن اهتمامي هنا هو نفسه الذي تم العثور عليه في تجربتين الأخيرتين (1،2)، عالية مد والتقلب، وذلك بسبب أساس استراتيجيتنا، وأود أن تجد وسيلة لتحسينه من خلال حل قضية قطبية. في جميع الاستراتيجيات التي استخدمناها حتى الآن، أخذنا فقط فترة نظرة إلى الوراء المتحركة ووجدنا معامل الانحدار على مدى فترة زمنية محددة. ولكن إذا كانت فترة النظر إلى الوراء قصيرة، وإغفال من أقرب شريط وإدراج أحدث شريط مع مرور الوقت يمكن أن يسبب أخطاء على نسبة التحوط. وتوجد هذه المشكلة أيضا في الحالة عندما نستخدم متوسطا متحركا أو نحرف انحرافا معياريا لحساب المتوسط ​​الحالي والانحراف المعياري. أما بالنسبة للحل، يجب علينا تحسين نموذجنا بإضافة المزيد من الوزن إلى أحدث مجموعة البيانات وأقل وزنا للبيانات السابقة دون نقطة قطع التعسفي. هنا اخترت مرشحات كالمان كمخطط لتحديث نسبة التحوط مع مرور الوقت.
مرشح كالمان هو خوارزمية تستخدم ملاحظات صاخبة (بما في ذلك القيم المتطرفة) لنظام بمرور الوقت لتقدير معلمات النظام والتنبؤ بعمليات الرصد المستقبلية. في كل خطوة زمنية، فإنه يجعل التنبؤ، يأخذ في القياس، وتحديث نفسها على أساس كيفية التنبؤ وقياس مقارنة. من خلال القيام التعديل في حد ذاته، ونحن في الواقع توليد نموذج التعلم التنبؤية التي يمكن أن تتعلم وتحديث نفسها من خلال البيانات التي نطعمه. الافتراض وراء هذا النموذج هو أن المتغير الخفي في الوقت t هو وظيفة خطية في حد ذاته في الوقت ر -1 مع الضوضاء والضوضاء يطيع توزيعات المشي عشوائي.
في هذه الحالة، اخترت "وواف" (وايت ويف للأغذية) واحدة من شركات الأغذية العضوية ككائن. أستخدم مؤامرة مبعثر ملونة لإظهار العلاقة بين وواف و سبي (S & أمب؛ P500) على مدى عامين (من 2018-01-01 إلى 2018-01-01) مع كل نقطة ملونة حسب التاريخ. من الرسم البياني، يمكننا أن نقول أن التغييرات من هذين لا يمكن وصفها بدقة عن طريق الانحدار الخطي البسيط مع المنحدر المستمر والاعتراض.
في الواقع، يمكننا معرفة أفضل تقديرات α و β مع مرور الوقت. أيضا، يمكننا أن نرى كم المعلمات تتقلب على مدى فترات طويلة من الزمن. إذا كنا نستخدم استراتيجية التحوط بيتا، فمن المهم على نحو متزايد لتقدير بيتا بدقة.
الآن، يمكننا رسم كيف يتطور النظام عبر الزمن باستخدام مرشحات كالمان؛ نحن مؤامرة كل دولة الخامسة (نموذج خطي) أدناه، والخط الأسود هو واحد عندما نستخدم الانحدار العادي للسودان على مجموعة كاملة من البيانات.
جميع الرسوم البيانية أنا نشرت قبل استخدام سعر إغلاق والقياس. ولكننا نستخدم عوائد بدلا من الأسعار للقيام الانحدار عموما. الخطوة التالية سوف تظهر نفس هيكل الانحدار الخطي على بيانات الإرجاع بواسطة طريقة كلمان فيلتر.
لأن مرشح كالمان يقوم بتحديث تقديراته في كل خطوة زمنية ويميل إلى وزن الملاحظات الأخيرة أكثر من تلك القديمة، تطبيق آخر مفيد هو تقدير المعلمات المتداول للبيانات. على سبيل المثال، إذا قمنا بالفعل بحساب نسبة شارب تتحرك، يمكننا على نحو سلس باستخدام فلتر كالمان.
في المقالة التالية، سوف أضيف كلمان مرشحات في نموذج التداول أزواجي ومحاولة استخدامها لتيسير نسبة التحوط من الاستراتيجية.
لا تتردد في التعليق على أوجه القصور في أي شيء أوضح هنا كالمعتاد. أنا دائما على الأخطاء و ترغب في التعلم منها كمبتدئ في هذا المجال.
عن طريق التصفيق أكثر أو أقل، يمكنك أن تشير لنا القصص التي تبرز حقا.

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 (الرابط هنا).
سوف تحتاج هذه البيانات إلى وضعها في الدليل المحدد بواسطة ملف إعدادات كسترادر ​​إذا كنت ترغب في تكرار النتائج.
بيثون كسترادر ​​التنفيذ.
منذ كسترادر ​​يعالج تتبع الموقف، وإدارة المحافظ، وإدارة البيانات وإدارة النظام الرمز الوحيد الذي نحتاج إلى الكتابة ينطوي على كائن استراتيجية نفسها.
وتتصل الاستراتيجية مع بورتفوليوهاندلر عبر طابور الحدث، والاستفادة من الأجسام سيغناليفنت للقيام بذلك. وبالإضافة إلى ذلك يجب علينا استيراد قاعدة استراتيجية مجردة قاعدة، أبستراكتستراتيجي.
لاحظ أنه في إصدار ألفا الحالي من كسترادر ​​يجب علينا أيضا استيراد فئة بريسيبارسر. يستخدم هذا لمضاعفة جميع الأسعار على المدخلات من قبل متعددة كبيرة ($ 10 ^ 8 $) وأداء الحساب الصحيح عند تتبع المواقف. هذا يتجنب العائمة نقطة تقريب القضايا التي يمكن أن تتراكم على مدى فترة طويلة من باكتست. يجب علينا تقسيم جميع الأسعار عن طريق PriceParser. PRICE_MULTIPLIER للحصول على القيم الصحيحة:
الخطوة التالية هي إنشاء فئة كالمانبايرسترادينغستراتيغي. مهمة هذه الفئة هي تحديد متى يتم إنشاء كائنات سيغناليفنت استنادا إلى باريفنت تلقى من قضبان أوهلكف اليومية من تلت و إيي من ياهو المالية.
هناك العديد من الطرق المختلفة لتنظيم هذه الفئة. لقد اخترت هاردكود جميع المعلمات في الصف لوضوح التفسير. ومن الجدير بالذكر أنني قمت بتثبيت قيمة $ \ دلتا = 10 ^ $ و $ v_t = 10 ^ $. وهي تمثل اختلاف ضوضاء النظام وقياس الضوضاء في نموذج تصفية كالمان. ويمكن أيضا تنفيذ هذا كوسيط للكلمة الرئيسية في منشئ __init__ للفئة. ومن شأن هذا النهج أن يتيح تحسين المعلمة مباشرة.
المهمة الأولى هي تعيين الوقت والأعضاء المستثمرة لتكون مساوية ل نون، كما سيتم تحديثها كما يتم قبول بيانات السوق وإشارات التجارة ولدت. last_prices هو اثنين من مجموعة من الأسعار الحالية من تلت و إيي، وتستخدم لراحة من خلال الطبقة.
المجموعة التالية من المعلمات كلها تتعلق تصفية كالمان ويتم شرحها في العمق في المادتين السابقتين هنا وهنا.
وتشمل المجموعة النهائية من المعلمات أيام، وتستخدم لتتبع عدد الأيام التي مرت فضلا عن الكمية و cur_hedge_qty، وتستخدم لتتبع الكميات المطلقة من صناديق الاستثمار المتداولة لشراء لكلا الجانبين الطويل والقصير. لقد وضعت هذا ليكون 2000 وحدة على حقوق المساهمين من 100،000 دولار أمريكي.
الطريقة التالية _set_correct_time_and_price هي طريقة "المساعد" المستخدمة لضمان أن تصفية كالمان لديه كل المعلومات التسعير الصحيحة المتاحة في النقطة الصحيحة. وهذا أمر ضروري لأنه في نظام باكتست يحركها الحدث مثل معلومات سوق كسترادر ​​تصل بالتتابع.
قد نكون في وضع على اليوم $ K $ حيث تلقينا سعر إيي، ولكن ليس تفت. وبالتالي يجب علينا الانتظار حتى كل من تفت وأحداث السوق إيي وصلت من حلقة باكتست، من خلال قائمة انتظار الأحداث. في التداول المباشر هذه ليست قضية لأنها سوف تصل على الفور تقريبا مقارنة مع فترة التداول لبضعة أيام. ومع ذلك، في باكتست يحركها الحدث يجب علينا الانتظار لكلا السعرين للوصول قبل حساب التحديث مرشح كالمان الجديد.
تحقق التعليمات البرمجية بشكل أساسي إذا كان الحدث اللاحق لليوم الحالي. إذا كان هو، ثم يتم إضافة السعر الصحيح إلى قائمة أحدث_price من تلت و إيي. إذا كان يوم جديد ثم يتم إعادة تعيين أحدث الأسعار ويتم إضافة الأسعار الصحيحة مرة أخرى.
هذا النوع من طريقة "التدبير المنزلي" من المحتمل أن يتم استيعابها في قاعدة كسترادر ​​في المستقبل، مما يقلل من ضرورة كتابة "نمطي" رمز، ولكن في الوقت الراهن يجب أن تشكل جزءا من الاستراتيجية نفسها.
يتم تنفيذ جوهر الاستراتيجية في أسلوب account_signals. أولا وضعنا الأوقات الصحيحة والأسعار (كما هو موضح أعلاه). ثم نتحقق من أن لدينا كل من أسعار تلت و إيي، وعند هذه النقطة يمكننا أن ننظر إشارات تجارية جديدة.
يتم تعيين $ y $ يساوي أحدث سعر ل إيي، في حين أن $ F $ هي مصفوفة الملاحظة التي تحتوي على أحدث سعر ل تلت، فضلا عن عنصر نائب الوحدة لتمثيل اعتراض في الانحدار الخطي. يتم تحديث فلتر كالمان في وقت لاحق مع هذه أحدث الأسعار. وأخيرا نحسب خطأ التنبؤ $ e_t $ والانحراف المعياري للتنبؤات، $ \ سرت $. دعونا تشغيل من خلال هذه التعليمات البرمجية خطوة بخطوة، كما يبدو قليلا معقدة.
وتتمثل المهمة الأولى في تشكيل القيمة العددية y ومصفوفة الملاحظة F التي تحتوي على أسعار إيي و تلت على التوالي. نقوم بحساب مصفوفة التباين-التغاير R أو تعيينه إلى مصفوفة الصفر إذا لم يتم إضفاء الطابع المبدئي عليه بعد. وفي وقت لاحق نحن حساب التنبؤ الجديد من يهات الملاحظة وكذلك خطأ التنبؤ وآخرون.
ثم نحسب تباين توقعات الملاحظة كيو تي وكذلك الانحراف المعياري sqrt_Qt. نحن نستخدم قواعد التحديث المستمدة هنا للحصول على التوزيع الخلفي للولايات ثيتا، التي تحتوي على نسبة التحوط / المنحدر بين السعرين:
وأخيرا نولد إشارات التداول استنادا إلى قيم $ e_t $ و $ \ سرت $. وللقيام بذلك، نحتاج إلى التحقق من الحالة "المستثمرة" - إما "طويلة" أو "قصيرة" أو "لا شيء". لاحظ كيف نحتاج لضبط cur_hedge_qty كمية التحوط الحالية عندما نذهب طويلة أو قصيرة كما المنحدر $ \ ثيتا ^ 0_t $ يتم ضبط باستمرار في الوقت المناسب:
هذا هو كل من التعليمات البرمجية اللازمة لعنصر الاستراتيجية. نحن بحاجة أيضا إلى إنشاء ملف باكتست لتغليف كل من منطقتنا التداول وخيارات الطبقة. النسخة الخاصة هي مشابهة جدا لتلك المستخدمة في دليل الأمثلة ويستبدل حقوق الملكية من 500،000 دولار أمريكي مع 100،000 دولار أمريكي.
كما أنه يغير فيكسيدبوسيتيونزيزر إلى نيفيبوسيتيونزيزر. يستخدم هذا الأخير ل "ساذجة" قبول اقتراحات الكميات المطلقة من وحدات إتف للتجارة كما هو محدد في فئة كالمانبايرسترادينغستراتيغي. وفي بيئة الإنتاج، سيكون من الضروري تعديل ذلك تبعا لأهداف إدارة المخاطر للمحفظة.
في ما يلي الكود الكامل ل kalman_qstrader_backtest. py:
طالما تم تثبيت كسترادر ​​بشكل صحيح وتم تحميل البيانات من ياهو المالية يمكن تنفيذ التعليمات البرمجية عبر الأمر التالي في المحطة:
بفضل جهود العديد من المطورين المتطوعين، وخاصةryankennedyio و فيمتوترادر، رمز هو الأمثل جيدا ل أوهلفف شريط البيانات وتنفيذ باكتستينغ بسرعة.
نتائج الاستراتيجية.
واحدة من أحدث الميزات التي يمكن أن تضاف إلى كسترادر ​​هو أن من "تيرشيت" وضعت في المقام الأول من قبلnwillemse. هذه الميزة لا تزال في مرحلة مبكرة من التنمية ولكن سيتم توضيحها هنا.
يتم استخدام ورقة تيرشيت في المقام الأول في إطار المؤسسات باعتبارها وصفا "بيجر واحد" لاستراتيجية التداول. الطبقة تيرشيتستاتيستيكش في كسترادر ​​كستبراس يكرر العديد من الإحصاءات الموجودة في تقرير أداء استراتيجية نموذجي.
يمثل الرسمان البيانيان العلويان منحنى رأس المال ونسبة السحب، على التوالي. تحت هذا هي لوحات الأداء الشهرية والسنوية. وأخيرا يتم عرض منحنى رأس المال، والإحصاءات على مستوى التجارة والإحصاءات القائمة على الوقت:
اضغط على الصورة لعرض أكبر.
يبدأ منحنى األسهم بشكل مسطح نسبيا للسنة األولى من االستراتيجية ولكنه يتصاعد بسرعة خالل عام 2018. خالل عام 2018، تصبح االستراتيجية أكثر تقلبا بكثير "تحت الماء" حتى عام 2018، وتصل إلى نسبة سحب يومية قصوى تبلغ 15.79٪. ويزداد الأداء تدريجيا من الحد الأقصى للتخفيض في أواخر 2018 وحتى 2018.
وقد بلغ معدل النمو السنوي المركب للاستراتيجية 8.73٪ مع نسبة شارب 0.75. كما أن لديها أطول مدة السحب القصوى 777 يوما - أكثر من عامين! لاحظ أن هذه الإستراتيجية يتم إجراؤها من إجمالي تكاليف المعاملات بحيث من المرجح أن يكون الأداء الحقيقي أسوأ.
الخطوات التالية.
هناك الكثير من الأعمال البحثية اللازمة لتحويل هذا إلى استراتيجية مربحة التي سوف نشر في بيئة حية. وتشمل السبل الممكنة للبحث ما يلي:
المعلمة الأمثل - متغير المعلمات من تصفية كالمان عبر البحث عبر شبكة التحقق من صحة أو بعض شكل من أشكال التعلم آلة الأمثل. ومع ذلك، فإن هذا يقدم إمكانية متميزة للإفراط في تجهيز البيانات التاريخية. اختيار الأصول - من شأن اختيار أزواج إضافية أو بديلة من صناديق الاستثمار المتداولة أن يساعد على إضافة التنويع إلى المحفظة، ولكنه يزيد من تعقيد الاستراتيجية وكذلك عدد الصفقات (وبالتالي تكاليف المعاملات).
في المقالات المستقبلية سوف ننظر في كيفية تنفيذ هذه الإجراءات لمختلف استراتيجيات التداول.
المراجع.
مجرد بدء مع التداول الكمي؟
3 أسباب الاشتراك في قائمة البريد الإلكتروني كوانتستارت:
1. دروس التداول الكمي.
سوف تحصل على إمكانية الوصول الفوري إلى دورة مجانية 10-البريد الإلكتروني معبأة مع تلميحات ونصائح لمساعدتك على البدء في التداول الكمي!
2. جميع أحدث المحتوى.
كل أسبوع سوف نرسل لك التفاف جميع الأنشطة على كوانتستارت لذلك عليك أن لا يفوتون وظيفة مرة أخرى.
ريال مدريد، وقابلة للتنفيذ نصائح التداول الكمي مع أي هراء.

بطاقة: كلمان تصفية.
التحكيم الإحصائي الناجح.
لا أميل إلى الانخراط في Q & أمب؛ A مع قراء بلوق بلدي، أو مع المستثمرين. أنا في مرحلة في حياتي حيث أقضي وقتي في الغالب ما أريد القيام به، وليس ما يريده الناس الآخرون. وبما أنني أستمتع بالبحث والتداول، & # 8230؛
إتف أزواج التداول مع تصفية كالمان.
سألني من قبل القارئ إذا كنت يمكن أن توضح تطبيق تقنية تصفية كالمان وصفها في مشاركتي السابقة مع مثال. لنأخذ زوج إتف أغ أغ، باستخدام البيانات اليومية من يناير 2006 إلى فبراير 2018 لتقدير النموذج. كما ترون من الرسم البياني في الشكل 1، و & # 8230؛
المراجحة الإحصائية باستخدام فلتر كالمان.
ومن بين التحديات التي تواجه نهج التكامل المشترك في المراجحة الإحصائية التي ناقشتها في منصبي السابق، أن علاقات التكامل المشترك نادرا ما تكون ثابتة: فهي تتغير بشكل متكرر وغالبا ما تنهار تماما. مرة أخرى في عام 2009 بدأت تجربة نهج أكثر ديناميكية لتداول أزواج، استنادا إلى تصفية كالمان. في & # 8230؛
تطبيق عملي لنماذج تبديل النظام إلى أزواج التداول.
في المنصب السابق أوجزت بعض التقنيات المتاحة المستخدمة لوضع نماذج السوق. وفيما يلي توضيح لكيفية تطبيق هذه التقنيات عمليا. يمكنك تحميل هذه المشاركة في شكل قوات الدفاع الشعبي هنا. يظهر الرسم البياني أدناه العوائد المتراكمة اليومية لزوج واحد في المراجحة الإحصائية إتف & # 8230؛
تعلم تصفية كالمان.
وقد سمع كثير من الناس من تصفية كالمان، ولكن يعتبر الموضوع غامض. في حين أنه صحيح أن استخلاص مرشح كالمان وإثبات رياضيا أنه هو & # 8220؛ الأمثل & # 8221؛ تحت مجموعة متنوعة من الظروف يمكن أن تكون مكثفة نوعا ما، وتطبيق مرشح لنظام خطي الأساسي هو في الواقع من السهل جدا. ويهدف هذا الملف ماتلاب لإثبات ذلك.

كالمان إستراتيجية تداول الفلتر
هذه الاستراتيجية مأخوذة من المثال 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. Is there a reason behind such huge discrepancy? This number can obviously change the results dramatically.
When I rerun the numbers, I can get negative value for Q which result in errors when I calculate sqrt(Q). How do you manage negative Qs?
problem solved for only one leg in the beginning.
However, mean reversion quality for bond product is very bad.
Better try on other equity or FX spreads.
If we are using a Kalman filter as in the the example above, would we still need to reblanace any open positions periodically to reflect the position in the latest spread as it is getting updated by the Kalman Filter?
(sorry but i dont seem to be able to see any rebalancing in the algorithm?)
hi thx aidan for the nice post. It certainly helps to enlightened more about Kalman filter application. Just wonder what will be the best practice in using this Kalman filter to find the cointegrated pairs. Will following two approaches both reasonable?
Testing cointegration based on simple OLS residual (spread) analysis.
I've found option 2 wasn't really appropriate since it makes an assumption on evolving state of beta which might impact the regression residual of the actual price measurement. Let me know what others think as well. شكر.
Agree with your analysis. Approach 1 is reasonable but you'll find most of the time the conitegration relationship will break down and will never revert to the mean. Approach 2 doesn't make a lot of sense as the relationship is constantly evolving.
thx aidan. Guess i will try to combine both analysis (i. e. in sample cointegration analysis based on simple OLS to find the pairs and out sample forecast based on Kalman filter for trading signal). Do you think this approach makes sense?
Are there any leverage used in this algo?
Hi, I'm seeking help here. While I'm understanding Kalman Filter and trying to apply this algorithm in real trades, there are something I don't quite understand.
In the sample algorithm, the kalman filter takes one price for each symbol, and get hedge ratio, mean, standard deviation etc. So that it further decides if we can enter long/short at a moment. However, in real trades, for every tick/bar, there are bid price and short price for every symbol, so they are two values of each symbol, four values for pair trading. Then how should we use the four values to calculate trading signal?
Actually this question is not only about Kalman Filter, but general to any backtest program. Back test data has only one value for each time (which might be OPEN or CLOSE), but in real trades, there are lowest ask, highest bid and other order prices. Which values should we use to decide trading signal?
Appreciate any help!
عذرا، هناك خطأ ما. حاول مرة أخرى أو اتصل بنا عن طريق إرسال الملاحظات.
لقد أرسلت بنجاح تذكرة دعم.
سيكون فريق الدعم لدينا على اتصال قريبا.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.
يتم توفير المواد على هذا الموقع لأغراض إعلامية فقط ولا تشكل عرضا للبيع أو طلب شراء أو توصية أو تأييد لأي أمن أو استراتيجية، كما أنها لا تشكل عرضا لتقديم الخدمات الاستشارية الاستثمارية من قبل كوانتوبيان.
وبالإضافة إلى ذلك، لا تقدم المادة أي رأي فيما يتعلق بملاءمة أي ضمان أو استثمار محدد. لا ینبغي اعتبار أي معلومات واردة في ھذه الوثیقة بمثابة اقتراح للانخراط في أي مسار عمل یتعلق بالاستثمار أو الامتناع عنھ حیث لا یقوم أي من کوانتوبيان أو أي من الشرکات التابعة لھ بتقدیم المشورة الاستثماریة أو العمل کمستشار لأي خطة أو کیان خاضع ل وقانون تأمين دخل التقاعد للموظفين لعام 1974، بصيغته المعدلة، أو حساب التقاعد الفردي أو المعاش التقاعدي الفردي، أو تقديم المشورة بصفة الأمانة فيما يتعلق بالمواد المعروضة في هذه الوثيقة. إذا كنت مستقلا فرديا أو مستثمرا آخر، فاتصل بمستشارك المالي أو أي جهة مالية أخرى لا علاقة لها بكوانتوبيان حول ما إذا كانت أي فكرة استثمار أو إستراتيجية أو منتج أو خدمة معينة مذكورة هنا قد تكون مناسبة لظروفك. وتشمل جميع الاستثمارات مخاطر، بما في ذلك خسارة أصل الدين. لا تقدم كوانتوبيان أي ضمانات بشأن دقة أو اكتمال الآراء المعرب عنها في الموقع. وتخضع اآلراء للتغيير، وقد تصبح غير موثوقة ألسباب مختلفة، بما في ذلك التغيرات في ظروف السوق أو الظروف االقتصادية.

Kalman filter trading strategy


سحب طلبات 0.
تاريخ جيثب اليوم.
جيثب هي موطن لأكثر من 20 مليون مطورين يعملون معا لاستضافة ومراجعة التعليمات البرمجية، وإدارة المشاريع، وبناء البرمجيات معا.
استنساخ مع هتبس.
استخدام جيت أو الخروج مع سفن باستخدام ورل على شبكة الإنترنت.
This is a general purpose lightweight backtesting engine for stocks, written in modern Java 8.
Some advantages compared to other backtesting implementations are:
It uses a callback model and since it is implemented in java it should be pretty performant when running many backtests Implemented in a mature programming language Easily extensible Strategies are easily debuggable using a java IDE Lightweight and therefore the backtesting engine is easily verifiable No dependencies Backtesting results are further analyzable in R or Excel since it uses a CSV output format.
I've written this library primarily to try out this particular strategy.
The cointegration strategy, or also known as pairs trading strategy, tries to take two stocks and create a linear model to find a optimal hedge ratio between them in order create a stationary process.
Assume stocks A and B with prices Pa and Pb respectively, we set Pa = alpha + beta*Pb and try to find optimal alpha and beta . One method to find alpha and beta is using a so called Kalman Filter which is a dynamic bayesian model and we use it as an online linear regression model to get our values.
After we've found the values we look at the residuals given by residuals = Pa - alpha - beta*Pb , and if the last residual is greater than some threshold value you go short n A stocks and long n*beta B stocks, for some fixed n .
For further explanation and a formal definition of cointegration and the strategy you may want to look at:
A good introduction video series to the Kalman filter can be found at Udacity (https://udacity/wiki/cs373/unit-2).
Run a backtest skeleton:
Just create a class which implements org. lst. trading. lib. model. TradingStrategy , for example a simple buy and hold strategy might look like this:
The onTick() method is called for every price change, all relevant information (like historical prices, etc..) is available through TradingContext and also orders can be submitted through it.
Backtest: The core class which runs the backtest package org. lst. trading. lib. series : TimeSeries: A general purpose generic time series data structure implementation and which handles stuff like mapping, merging and filtering. DoubleSeries: A time series class which has doubles as values. (corresponds to a pandas. Series (python)) MultipleDoubleSeries: A time series class which has multiple doubles as values. (corresponds to a pandas. DataFrame or a R Dataframe) KalmanFilter: A general purpose and fast Kalman filter implementation. Cointegration: A cointegration model using a Kalman filter. CointegrationTradingStrategy: The cointegration strategy implementation.
To run a backtest, edit and then run the main class org. lst. trading. main. BacktestMain . By default the cointegration strategy is executed with the GLD vs. GDX ETF's and you might get a result like this:
To further investigate the results you can import the CSV files into some data analysis tool like R or Excel.
I've created a R script which does some rudimentary analysis (in src/main/r/report. r ).
The return curve of the above strategy plotted using R:
This is a plot of the implied residuals:
The cointegration can be quite profitable however the difficulty is to find some good cointegrated pairs.
You might want to try for example Coca-Cola (KO) and Pepsi (PEP), gold (GLD) and gold miners (GDX) or Austrialia stock index (EWA) and Canada stock index (EWC) (both Canada and Australia are commodity based economies).
I'm generally interested in algorithmic trading and I read about the cointegration trading strategy in Ernest Chans Book and wanted to try it out. I know many people prefer using tools like Matlab and R to try out their strategies, and I also agree with them you can't get a prototype running faster using these technologies, however after the prototyping phase I prefer to implement my strategies in a "full blown" programming language where I have a mature IDE, good debugging tools and less 'magic' where I know exactly what is going on under the hood.
This is a side project and I'm not planning to extend this further.
It is thought as a educational project, if you want to do something similar, this may be a good starting point or if you just want to try out different strategies. I thought it might be useful for someone so I decided to make this open source. Feel free to do anything what you want with the code.
My name is Lukas Steinbrecher, I'm currently in the last year of the business informatics (Economics and Computer Science) master at Vienna University of Technology. I'm interested in financial markets, (algorithmic) trading, computer science and also bayesian statistics (especially MCMC methods).
If you have any questions or comments feel free to contact me via lukas@lukstei or on lukstei.
&نسخ؛ 2018 جيثب، Inc. شروط الخصوصية تعليمات حالة الأمان.
لا يمكنك تنفيذ هذا الإجراء في الوقت الحالي.
لقد سجلت الدخول باستخدام علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة. لقد سجلت الخروج في علامة تبويب أو نافذة أخرى. أعد التحميل لتحديث الجلسة.

No comments:

Post a Comment