Quintuitive.
وجهات نظر بديهية كميا على الأسواق.
التداول مع دعم آلات المتجهات (سفم)
وأخيرا جميع النجوم قد الانحياز وأستطيع أن تكرس بثقة بعض الوقت للاختبار الخلفي من أنظمة التداول الجديدة، ودعم آلات ناقلات (سفم) هي جديدة & # 8220؛ لعبة & # 8221؛ والتي سوف تبقى لي مشغول لفترة من الوقت.
سفمس هي أداة معروفة من مجال آلة التعلم تحت إشراف، وتستخدم كل من التصنيف والانحدار. لمزيد من التفاصيل راجع الأدب.
يبدو لي أن التطبيق الأكثر بديهية للتداول هو الانحدار، لذلك دعونا & # 8217؛ ق عن طريق بناء نموذج الانحدار سفم.
بعد تجربتنا مع نماذج أرما + غارتش، سنبدأ بمحاولة التنبؤ بالعائدات، بدلا من الأسعار. وبالمثل، في اختباراتنا الأولى، سوف نستخدم فقط عوائد الأيام الخمسة السابقة كميزات تحدد عودة يوم معين. سنبدأ مع التاريخ من 500 يوما كما مجموعة التدريب.
في مصطلحات رياضية أكثر، لمجموعة التدريب لدينا ميزات N، لكل واحد منهم لدينا عينات M. لدينا أيضا ردود M.
نظرا لصف من قيم الميزة، المصفوفة اليسرى، يتم تدريب سفم لإنتاج قيمة الاستجابة. في مثالنا المحدد، لدينا خمسة أعمدة (ميزات)، كل عمود مناظرة للعائدات بفارق زمني مختلف (من 1 إلى 5). لدينا 500 عينات و الردود المقابلة.
مرة واحدة يتم تدريب سفم على هذه المجموعة، يمكننا البدء في تغذية مع مجموعات من خمس ميزات، المقابلة للعائدات للأيام الخمسة السابقة، وسوف سفم توفر لنا مع الاستجابة، وهو العائد المتوقع. على سبيل المثال، بعد تدريب سفم على ال 500 يوم السابقة، سوف نستخدم العوائد للأيام 500، 499، 498، 497 و 496 (هذه هي لنا كمدخل للحصول على العائد المتوقع ليوم 501.
من جميع الحزم المتوفرة في R، قررت أن تختار حزمة e1071. وكان الخيار الثاني قريب حزمة كيرنلاب، التي ما زلت تخطط لمحاولة في المستقبل.
ثم حاولت بعض الاستراتيجيات. أولا حاولت شيئا مشابها جدا لنهج أرما + غارتش & # 8211؛ أي العائدات المتخلفة عن الأيام الخمسة السابقة. لقد فوجئت تماما لرؤية هذه الاستراتيجية أداء أفضل من أرما + غارتش (وهذا هو أرض الوطن من أرما + غارتش، وكنت قد سعيدة جدا فقط مع أداء مماثل)!
بعد ذلك، حاولت نفس الميزات الخمس، ولكن في محاولة لتحديد أفضل مجموعة فرعية. تم اختيار باستخدام نهج الجشع، بدءا من 0 الميزات، وإضافة تفاعلي الميزة التي تقلل من الخطأ أفضل. وقد أدى هذا النهج إلى تحسين الأمور.
وأخيرا، حاولت نهجا مختلفا مع حوالي عشرة الميزات. وشملت الميزات عوائد على مدى فترة مختلفة من الزمن (يوم واحد، يومين، 5 أيام، الخ)، وبعض الإحصاءات (متوسط، وسيط، سد، الخ) والحجم. لقد استخدمت نفس النهج الجشع لتحديد الميزات. هذا النظام النهائي أظهر أداء جيدا جدا أيضا، ولكن أخذ الجحيم من الوقت لتشغيل.
الوقت لإنهاء هذه المشاركة، نتائج الاختبار الخلفي يجب أن تنتظر. حتى ذلك الحين يمكنك أن تلعب مع شفرة المصدر الكامل نفسك. في ما يلي مثال لاستخدامه:
مرحبا، هل من الممكن أن يكون مثالا للتطبيق إذا وظيفتك؟
تم تحديث المشاركة.
مشاركة رائعة حول سفم & # 8217؛ s. شكرا للمشاركة. أنا & # 8217؛ م R مبتدئ، هل يمكن أن تخبرني ما هو الفرق بين القيام بذلك.
في ويندوز دوسن & # 8217؛ ر العمل بسبب مشكلة متعددة النوى.
شيء آخر لا أفهمه ينعكس في هذا إلى صفوف من التعليمات البرمجية.
في رأيي أنه أكثر فعالية لدمج السلسلة.
وأن يكون هناك حجة واحدة فقط = كائن لتشغيل الدالة بدلا من 2.
العمل المثير للاهتمام، وذلك بفضل.
أرغ، ويندوز & # 8211؛ أنا استخدامه نادرا في الآونة الأخيرة. فوجئت تماما لا يزال، منذ حزمة موازية هي جزء من توزيع قاعدة R الآن. نأمل أنه سيتم تناولها قريبا.
وفي الوقت نفسه، ماذا عن عدم استخدام التنفيذ المتوازي؟ أيضا هناك حزم أخرى توفر التنفيذ المتوازي، ولكن هذا سيكون المزيد من العمل.
أنت على حق بشأن الدمج & # 8211؛ ما زلت أتساءل لماذا فعلت ذلك بهذه الطريقة هذه المرة. :)
I & # 8217؛ m تلقي أخطاء.
الآن الخطأ هو.
وGT. داتا = سفمفاتوريس (ت) [، c (1،2)]
خطأ في match. fun (فان): أوبجيكت & # 8216؛ سكيونيس & # 8217؛ غير معثور عليه.
ولكن عندما أقدم يدويا كائن البيانات أتلقى خطأ في التنبؤ.
سفمكومبوتونيفوريكاست & لوت؛ - وظيفة تتعلق الأبعاد و.
من الصعب علي التصحيح.
الانحراف يأتي من حزمة بيرفورمانساناليتيكش، التي تحتاج إلى تثبيت من كران. إضافة تتطلب (بيرفورمانساناليتيكش) كما السطر الأول من سفمفاتوريس يجب أن تعالج المشكلة الأولى.
خطأ في merge. xts (ريس، شتس (n. trim (لاغ (رولمان (ريتس، k = 21، ألين = & # 8220؛ رايت & # 8221؛)،:
طول & # 8216؛ ديمنامس & # 8217؛ [2] لا يساوي مدى الصفيف.
يبدو أنه في رمز ويندوز يحتاج إلى الكثير من التغييرات.
مايك، أنا لم يعني رمز لاستخدامها مباشرة (حتى الآن كنت توفير مقتطفات فقط)، ولكن أنا مندهش أن R على ويندوز هو قبيح جدا. لست متأكدا ما هو هدفك، ولكن لتحليل أداء الاستراتيجيات، يمكنك استخدام سلسلة المؤشرات التي تم حسابها بالفعل.
إنه & # 8217؛ مجرد اهتمام أكاديمي نقي على سفم. اعتدت على العمل مع مجموعات، يكا وأنا غريبة كيف سفم يقوم بنفس العمل.
في ويندوز الكثير من الأخطاء تتعلق الكائنات مع التواريخ كما شتس هو أو إطارات البيانات.
أونيكس هو أفضل ولكن جميع الوسطاء إعطاء أبي للنوافذ. بعض منهم في جافا وفقط هذا قد نستخدم من أونيكس.
أنا لا & # 8217؛ ر مثل العمارة الفوز لكنه & # 8217؛ s عادة بالفعل وأنا لا & # 8217؛ ر يكون الوقت لتغيير نظام التشغيل.
أنا فقط حاولت ذلك على ويندوز 7، 64 بت، R الإصدار 2.15.2. أحصل على تحذير من سفمفاتوريس، وأنا أعرف كيفية إصلاح (الدعوة سد على كستس / حديقة الحيوان الكائن لا تحويل مثيرة للاهتمام لمصفوفة)، ولكن لا توجد مشاكل. جري:
سؤال واحد إذا كنت لا العقل.
لماذا تستخدم الحصول على وظيفة سيتسيمبولس من حزمة كوانتمود؟
يمكنني استخدام المكالمة.
سبي & لوت؛ - جيتسيمبولز (& # 039؛ سبي & # 039 ؛، auto. assign = فالس)
لديك الكثير لحساب والحصول على تستهلك الذاكرة ويستغرق وقتا للحصول على اسم الكائنات.
كسلسلة فار.
ولكن أنا & # 8217؛ م فاجأ مع هذه النتيجة قبل المكالمة.
1 (& # 8230 ؛، ليست = تشاراكتر ()، باكيج = نول، lib. loc = نول،
2 فيربوس = جيتوبتيون (& # 8220؛ مطول & # 8221؛)، إنفير =.GlobalEnv)
4 فيليكست & لوت؛ - فونكتيون (x)
يبدو أن البيانات محفوظة كلمة.
والآن أنا لا أعرف ما هو الذهاب إلى ميزات وظيفة.
أنا باستخدام R 2.15.2 على لينكس 64 بت. على البيانات نظام بلدي هو أيضا وظيفة، ولكن أنا لا & # 8217؛ ر أعتقد أن هذه هي المشكلة.
ربما تكون طريقة أفضل. لقد رأيت ذلك من قبل، ولكن لا & # 8217؛ ر الانتباه حتى الآن لتحقيق أنه يفعل ذلك بالضبط. شكر.
ماذا تعني عندما تتحدث عن العوائد المتأخرة؟ هل هي القيمة 500،499،498،497،496 للتنبؤ بالعودة 501؟
نعم، يتم استخدام هذه العائدات للتنبؤ بعودة 501، والذي يستخدم كموقع (طويل / قصير حسب العلامة) ل 501. يتم تدريب النموذج على البيانات السابقة فقط، أي آخر & # 8220؛ الصف & # 8220؛ 8221؛ في مجموعة التدريب هو 499،498،497،496،495.
حسنا، هذا الصوت جيد، والعودة هل تستخدم هذا النموذج:
عودة t = سجل (السعر t + 1 / السعر t)
وبعد تطبيع (مركز وحجم) عودة؟
يمكنك العثور على هذه التفاصيل في شفرة المصدر المصحوبة. يمكنني استخدام عوائد منفصلة:
أنا دون & # 8217؛ ر مركز البيانات، لا أنا قياس ذلك. ومع ذلك، كلا الحزم التي يمكنني استخدامها (كاريت + كيرنلاب و e1071) يبدو أن تفعل ذلك بشكل افتراضي.
أشياء أخرى، آسف، ولكن يمكنك بناء النموذج الخاص بك على 499 القيم السابقة، وهذا هو مجموعة بيانات التدريب الخاص بك،
و أفت، r لتوقع 501 العودة يمكنك استخدام الصف الأخير كما قيم الاختبار؟
لماذا بناء نموذج على القيم 500 واستخدام الصف الأخير أي 500،499 الخ وقت آخر لاختبار أو لتدريب؟
في البرنامج التعليمي الخاص بك قلت: على سبيل المثال، بعد تدريب سفم على الأيام ال 500 السابقة، وسوف نستخدم عائدات لأيام 500، 499، 498، 497 و 496 (هذه هي لنا كمدخل للحصول على العائد المتوقع ليوم 501 .
وفي ردكم قلت: نعم، يتم استخدام هذه العوائد للتنبؤ بالعودة 501، والتي تستخدم كموقف (طويل / قصير اعتمادا على علامة) ل 501. يتم تدريب النموذج على البيانات السابقة فقط، أي آخر "الصف" في مجموعة التدريب هو 499،498،497،496،495.
هل أنت بخير إذا كنت ادعي، أنا بناء النموذج على القيم 500، وتوقع 501 ط استخدام نموذج بناء سابقا وأعطيه ل & # 8220؛ أكل & # 8221؛ الصف الأخير من مجموعة بيانات التدريب أي: 500،499 كمدخلات للحصول على قيمة 501 & # 8217 المتوقعة؟
تحيات وآسف على وظيفة متعددة، ولكن لقد حصلت على مشكلة مع الشبكة الخاصة بي.
بشكل عام، أعتقد أنه ينبغي أن يكون على ما يرام لاستخدام النهج الذي تقترحه. لاحظ أن هذا النهج سيكون أكثر تطلبا بكثير لتنفيذ في التداول في الحياة الحقيقية، أو على الأقل الطريق أفعل ذلك.
إذا كان المرء أن يحسب جميع أسعار الإغلاق المعقولة مسبقا، فإن النهج الجديد سوف تحتاج إلى أن تفعل واحدة مناسبة لكل وثيقة إغلاق واحد التنبؤ. مقارنة مع النهج الآخر & # 8211؛ فإن النموذج يصلح على أساس 500 يوما السابقة، ثم فقط يتم تغذية البيانات الجديدة (مختلفة لكل وثيقة). وبعبارة أخرى، هنا لدينا صالح واحد، يتوقع العديد.
حقا معجب زميل العمل الخاص بك، إم جديد ل سفم مع R، إم تحاول استخدام عشرة المؤشرات الفنية للتنبؤ مؤشر الأسهم تومورو & # 8217؛ ق الحركات (صعودا أو هبوطا كما 1 أو -1)، عند تدريب النموذج، ماذا كنت استخدم كعمود استجابة & # 8230؛ إذا كنت في 07/07/2018 & # 8230؛ يمكنك استخدام حركة ذلك اليوم أو 08/07 & # 8217 الصورة للحصول على المؤشرات الفنية 07/07 & # 8217؛ & # 8230؛ إذا كنت تستخدم 07 / 07 & # 8217؛ s المدخلات & # 8230؛ كيف كنت فوركاست تومورو & # 8217؛ s النتائج كما كنت لا أعرف تومورو & # 8217؛ المدخلات & # 8230؛ وآمل أن يكون منطقيا & # 8230؛
سيكون موضع تقدير أي مساعدة.
مرحبا لويس، إذا كان الهدف هو فقط طويلة / قصيرة، قد ترغب في استخدام التصنيف بدلا من الانحدار. يتم تحويل معظم الحزم بصمت إلى التصنيف إذا كان متجه الاستجابة هو & # 8220؛ فاكتورس & # 8221؛ بدلا من الأرقام. راجع الكمumfinancier. wordpress / 2018/06/26 / سوبورت-فيكتور-ماشين-رسي-سيستيم / على سبيل المثال.
قبل بدء عملية الخطوة إلى الأمام، أنا محاذاة الاستجابة المطلوبة مع البيانات التي تتنبأ به. بشكل عام، وهذا هو تأخر (1) من التنبؤات (البيانات). هذا يوازي القيمة المطلوبة من 08/07 (عودة 08/07) مع التنبؤات (المؤشرات اعتبارا من 07/07 وثيقة). ثم أنا تناسب النموذج باستخدام البيانات عن طريق استبعاد آخر موعد. وبعبارة أخرى، اسمحوا & # 8217؛ ق أقول أنا على وشك التنبؤ 08/07. آخر موعد أتطلع إليه هو 07/07. وبما أن البيانات متأخرة بالفعل، فإن آخر موعد للمؤشرات هو في الواقع 06/07. وأخيرا للتنبؤ قبل يوم واحد، أنا تغذية البيانات ل 08/07، وهو ما يتوافق مع المؤشرات في 07/07. الآن يمكنني مقارنة توقع مع القيمة الحقيقية. ويمكن تطبيق ذلك بسهولة نسبيا عمليا، طالما أن المؤشرات تستند إلى أسعار الإغلاق فقط. أي شيء باستخدام عالية / منخفضة / حجم / الخ (ستوشاستيك على سبيل المثال)، يحتاج إلى أن يتأخر عن طريق يوم إضافي، أو التداول لا يمكن أن يحدث الحق في نهاية & # 8230؛ انظر مشاركتي الأخرى: كينتيتيف / 2018/08/23 / ترادينغ-أت-ذي-كلوز-ذي مشانيكش /.
أتمنى أن يساعدك هذا.
ثاتس مفيدة حقا، وذلك بفضل زميله كثيرا & # 8230؛
معظم الأوراق عن سفم على الانترنت هي بلا جدوى جدا & # 8230؛ أعتقد ليس الجميع يحب لتبادل أسرارهم هاها.
آسف، سؤال واحد آخر: لنموذج مع أفضل أداء، ما المدخلات التي استخدمتها للتنبؤ تومورو & # 8217؛ s عودة ..
أس اقتباس & # 8221؛ وأخيرا، حاولت نهجا مختلفا مع حوالي عشرة الميزات. وشملت الميزات عوائد على مدى فترة مختلفة من الزمن (يوم واحد، يومين، 5 أيام، الخ)، وبعض الإحصاءات (متوسط، وسيط، سد، الخ) والحجم. لقد استخدمت نفس النهج الجشع لتحديد الميزات. هذا النظام النهائي أظهر أداء جيدا جدا كذلك، ولكن أخذ الجحيم من الوقت لتشغيل. & # 8221؛
النموذج مع أفضل أداء، من قبل قليلا، كان يستخدم المتخلفة (بواسطة 1،2،3،4 و 5 أيام) العوائد اليومية. وكان التطور الوحيد الذي كان يستخدم طريقة الجشع لتحديد & # 8220؛ أفضل & # 8221؛ مزيج من الميزات.
انتهيت للتو من عملي، واعتمدت نهج التصنيف للتنبؤ حركة تومورو & # 8217؛ s & # 8230؛
ودقة ما يقرب من 86٪ على اختبار 140days .. وأتساءل عما إذا كان هذا هو قليلا عالية جدا & # 8230؛
ومع ذلك & # 8230؛ شكرا جزيلا لك.
يبدو عالية جدا بالنسبة لي. أنا & # 8217؛ د بالتأكيد مراجعة عدة مرات قبل أن تأخذ على محمل الجد & # 8211؛ أن & # 8217؛ s مثل وجود الكرة وضوح الشمس ؛؛)
في ما يلي فكرة، عند تحديد مجموعة التدريب، حاول أن تخفف مجموعة التدريب الخاصة بك إلى جزأين متساويين، واحد هو عائد الاستجابة فوق المتوسط، والآخر هو عوائد أقل من المتوسط & # 8230؛ وبهذه الطريقة، قد دقة توقعاتك لا تتغير كثيرا، ولكن يمكنك التنبؤ الحركات بيج أكثر دقة & # 8230؛
يجب تحسين الأداء & # 8230؛ أنا & # 8217؛ حاولت هذا والنتائج لطيفة جدا & # 8230؛ واسمحوا لي أن أعرف إذا كان هذا يعمل بالنسبة لك.
اسمي اسمي كريستوف وأنا & # 8217؛ م مؤلف هذا الموضوع.
في هذا المشروع كنت تستخدم خوارزميات التعلم الآلي مختلفة (بما في ذلك سفم) في محاولة للتنبؤ إذا كانت التجارة معينة مع تب ثابتة / سي تكون ناجحة أو لا تصنيف ذلك.
بعض التعليقات / الأسئلة إلى التعليمات البرمجية.
1) باستخدام التحقق من صحة الصليب (tune. control، عبر = الصليب). هل أنت متأكد من أن استخدام التحقق من صحة الصليب هو الصحيح في حالة السلاسل الزمنية ؟؟ في مثل هذه الحالة سيتم التدريب على البيانات الماضية وبتعريف السلاسل الزمنية أنها إدخال تسرب في المستقبل والنتائج تضخم. ربما يجب استخدام خيار الإصلاح بدلا من ذلك.
2) ثوابت النواة. أهم معلمات سفم هي ثوابت النواة. لماذا يتم استخدام تلك القيم الثابتة وليس آخر ؟؟
3) حجم العينة / اختيار سفم. يرتبط وقت تدريب هذا سفم أضعافا مضاعفة إلى حجم عينة التدريب بقدر ما أتذكر. ولكن هناك سفمس أخرى المتخصصة للاستخدام مع أكبر حجم عينة التدريب على سبيل المثال. كنت تدرب نظامي على ما يصل إلى 150 000 الحانات في غضون ساعات قليلة. على سبيل المثال بيغاسوس، المكتبات أو سفليت. وفي مثل هذه الحالة يكون من الممكن مثلا. لاستخدام البيانات كل ساعة وحجم عينة أكبر من شأنها أن تعطي أفضل بكثير دقة.
4) لماذا لا تستخدم حزمة رويكا ولها الوصول ربما أكثر من مائة مل ألغوس.
موضوع مثير للاهتمام، بالتأكيد شيء لإلقاء نظرة على & # 8211؛ شكرا لإحضاره. ماذا تعني ب & # 8220؛ تب / سي & # 8221 ؛؟
1) التعليمات البرمجية هي في الغالب لأغراض التوضيح، وأنا لم & # 8217؛ ر تجد أنه مفيد جدا عموما. أنا أوافق، فمن المشكوك فيه للنظر في كل صف في مجموعة التدريب على أنها مستقلة عن بقية في حالة السلاسل الزمنية مع ارتباطاتها، وإنما هو نهج. وفقا ل روبجيندمان / هيندسيت / كروسفاليداتيون /، قد يكون نهج أفضل خطوة واحدة عبر التحقق من صحة باستخدام البيانات السابقة، والتي ينبغي أن تكون سهلة نسبيا لإضافة.
2) لا شيء خاص حول هذه الثوابت كيرنيل & # 8211؛ مجرد مجموعة لتكرار من خلال. أعتقد أنني استخدمت القيم الموجودة في الأمثلة باستخدام الحزمة (ق). الأمثل يختار الأفضل.
3) من الجيد أن تعرف. حاليا أنا لا & # 8217؛ t التداول خلال اليوم، لذلك لم يكن لدي حاجة للتعامل مع مثل هذه كميات كبيرة من البيانات. للحصول على البيانات اليومية، وزيادة النافذة يحسن الأداء، ولكن ما يصل الى نقطة من تجربتي. وهناك عداد قليلا بديهية أن نافذة أطول فترة سيؤدي إلى تحسين التوقعات إلى أجل غير مسمى - في بعض نقطة البيانات هو أكثر من اللازم (كنسبة مقابل عدد المعلمات الأمثل).
4) هافن & # 8217؛ ر حقا بدا في رويكا. أصلا بدأت مع e1071 لأنه & # 8217؛ ق سريعة ومستقرة جدا. ثم تحولت إلى كاريت، الذي يوفر واجهة موحدة لكثير من حزم أخرى، بما في ذلك بعض خوارزميات من رويكا. في تجربتي، أنا ملاذ & # 8217؛ ر وجدت نهج مل التي تقف حقا للتنبؤ البيانات سلسلة زمنية. هل؟
شكرا للمشاركة،
1) باستخدام التحقق من صحة الصليب (tune. control، عبر = الصليب). هل أنت متأكد من أن استخدام التحقق من صحة الصليب هو الصحيح في حالة السلاسل الزمنية ؟؟ في مثل هذه الحالة سيتم التدريب على البيانات الماضية وبتعريف السلاسل الزمنية أنها إدخال تسرب في المستقبل والنتائج تضخم. ربما يجب استخدام خيار الإصلاح بدلا من ذلك.
يجب أن يكون & # 8216؛ في مثل هذه الحالة سيتم التدريب على البيانات المستقبلية & # 8217؛
لا ينفذ تطبيقي & # 8217؛ t (على الأقل حسب التصميم؛)) استخدام البيانات المستقبلية. إذا كان التاريخ هو 500 نقطة، يتم استخدام التحقق من صحة الصليب ضمن هذه 500 لتحديد أفضل تناسب.
تب / سي & # 8211؛ أخذ الربح / وقف الخسارة. كان النظام يحاول التداول في كل شريط (شراء أو بيع) من التسمية.
تم تحديد (التجارة ناجحة / غير ناجحة) يعتمد إذا تم ضرب تب أو سي أولا.
& # 8220؛ إذا كان التاريخ هو 500 نقطة، يتم استخدام التحقق من صحة الصليب ضمن هذه 500 لتحديد أفضل تناسب & # 8221؛
حسنا في مثل هذه الحالة في نتائج العينة سوف تضخم وليس له معنى. على سبيل المثال إذا قمت بتقسيم فترة التدريب لمدة 10 فترات فرعية وتدريب على فترات 1-8 و 10 من التقييم على فترة 9، يحدث تسرب في المستقبل كما فترة 10 بعد فترة 9 لذلك في المستقبل.
هذا كيف يعمل التحقق من صحة الصليب وأعتقد وأنه ينطبق فقط لأنماط ثابتة. فقط المشي إلى الأمام له معنى في حالة السلاسل الزمنية.
عندما أحاول رمز أجد روك 2 للصف 29/03/195: هو الفرق بين: قيمة 28/03 و 24/03 القسمة بقيمة 24/03، لماذا ليست قيمة 27/03 - قيمة 24/03 قسمة بقيمة 24/03 & # 8230؛.
الرمز هو للتوضيح. يمكنك تعديله على أي حال تريد واستخدام أي الميزات التي تعتقد أنها قد تحسن التنبؤات. تأتي وظيفة روك من حزمة تر.
هل من الممكن أن يكون مؤامرة من نموذج أرما و سفم خارج العينة لمقارنة أدائها؟
ليس من المرجح أن تحصل على الوقت للعودة إليها، ولكن سوف نضعها في الاعتبار.
تعلم الآلة: كيف يمكن دعم آلات المتجهات يمكن استخدامها في التداول.
ما هي آلة دعم ناقلات؟
جهاز ناقل الدعم هو وسيلة للتعلم الآلي الذي يحاول أخذ بيانات المدخلات وتصنيفها في واحدة من فئتين. ولكي تكون آلة ناقل الدعم فعالة، من الضروري استخدام مجموعة من بيانات المدخلات والمخرجات التدريبية لبناء نموذج جهاز ناقل الحركة الذي يمكن استخدامه لتصنيف البيانات الجديدة.
وتطور آلة ناقلات الدعم هذا النموذج عن طريق أخذ مدخلات التدريب، ورسم خرائط لها في الفضاء متعدد الأبعاد، ثم استخدام الانحدار للعثور على مفرط (وهي عبارة عن سطح في الفضاء n الأبعاد، ويفصل بين الفضاء إلى نصف المسافات) الذي يفصل أفضل والفئتين من المدخلات. مرة واحدة وقد تم تدريب آلة ناقلات الدعم، وأنها قادرة على تقييم المدخلات الجديدة فيما يتعلق مفرطة فصل وتصنيفها في واحدة من الفئتين.
آلة ناقل الدعم هي في الأساس آلة الإدخال / الإخراج. يمكن للمستخدم أن يضع في المدخلات، واستنادا إلى نموذج وضعت من خلال التدريب، فإنه سيعود الناتج. عدد المدخلات لأي جهاز ناقل دعم معين يتراوح نظريا من واحد إلى ما لا نهاية، ولكن من الناحية العملية قوة الحوسبة لا تحد من عدد المدخلات التي يمكن استخدامها. على سبيل المثال، يتم استخدام المدخلات N لجهاز متجه دعم معين (القيمة الصحيحة لل N يمكن أن تتراوح من واحد إلى ما لا نهاية)، يجب على جهاز ناقل الدعم تعيين كل مجموعة من المدخلات في الفضاء N الأبعاد، والعثور على (N-1 ) - dimensional هيبيربلان أن أفضل يفصل البيانات التدريب.
الشكل 1. دعم آلات المتجهات هي آلات الإدخال / الإخراج.
أفضل طريقة لتصور كيف تعمل آلة دعم ناقلات هو النظر في حالة ثنائية الأبعاد. نفترض أننا نريد إنشاء جهاز ناقل الدعم الذي يحتوي على اثنين من المدخلات ويعود إخراج واحد الذي يصنف نقطة البيانات كما تنتمي إلى واحدة من فئتين. يمكننا تصور هذا عن طريق التآمر على الرسم البياني 2-الأبعاد مثل الرسم البياني أدناه.
الشكل 2. اليسار: دعم ناقلات الجهاز ناقلات تعيينها إلى الرسم البياني 2D. وتستخدم الدوائر الحمراء والصلبان الزرقاء للدلالة على فئتي المدخلات.
الشكل 3. الحق: دعم المدخلات آلة ناقلات تعيينها إلى الرسم البياني 2D. وتستخدم الدوائر الحمراء والصلبان الزرقاء للدلالة على فئتين من المدخلات مع خط أسود يشير إلى فصل مفرط.
في هذا المثال، تشير المصلبات الزرقاء إلى نقاط البيانات التي تنتمي إلى الفئة 1 والدوائر الحمراء التي تمثل نقاط البيانات التي تنتمي إلى الفئة 2. كل نقطة من نقاط البيانات الفردية لها قيمة إدخال 1 فريدة (تمثل بموقفها على المحور س ) وقيمة إدخال 2 فريدة (ممثلة بموقفها على المحور الصادي) وقد تم تعيين كل هذه النقاط إلى الفضاء ثنائي الأبعاد.
آلة ناقلات الدعم قادرة على تصنيف البيانات عن طريق إنشاء نموذج من هذه النقاط في 2 الفضاء الأبعاد. آلة ناقلات الدعم مراقبة البيانات في الفضاء 2 الأبعاد، ويستخدم خوارزمية الانحدار للعثور على 1 هيبيربلان الأبعاد (ويعرف أيضا باسم الخط) التي تفصل أكثر دقة البيانات إلى فئتين. ثم يتم استخدام خط الفصل هذا بواسطة جهاز ناقل الدعم لتصنيف نقاط البيانات الجديدة إلى الفئة 1 أو الفئة 2.
الرسوم المتحركة أدناه توضح عملية تدريب جهاز ناقل دعم جديد. سوف تبدأ الخوارزمية عن طريق جعل تخمين عشوائي العثور على لوحة مفرغة فصل، ثم بشكل متكرر تحسين دقة لوحة مفرغة. كما ترون خوارزمية يبدأ بقوة جدا، ولكن بعد ذلك يبطئ كما يبدأ في الاقتراب من الحل رغبات.
الشكل 4. الرسوم المتحركة تظهر تدريب جهاز ناقل الدعم. وتتقارب الطفرة تدريجيا مع الهندسة المثالية لفصل فئتي البيانات.
السيناريو ثنائي الأبعاد أعلاه المقدمة يسمح لنا لتصور عملية آلة ناقلات الدعم، ومع ذلك فإنه هو فقط قادرة على تصنيف نقطة بيانات باستخدام اثنين من المدخلات. ماذا لو أردنا استخدام المزيد من المدخلات؟ الحمد لله، خوارزمية آلة ناقلات الدعم يسمح لنا أن نفعل الشيء نفسه في أبعاد أعلى، على الرغم من أنه يصبح من الصعب بكثير لتصور.
النظر في هذا، كنت ترغب في إنشاء دعم ناقلات الجهاز الذي يأخذ 20 المدخلات ويمكن تصنيف أي نقطة البيانات باستخدام هذه المدخلات في أي فئة 1 أو الفئة 2. من أجل القيام بذلك، تحتاج آلة ناقلات الدعم لنموذج البيانات في 20 الفضاء الأبعاد واستخدام خوارزمية الانحدار للعثور على 19 هيبيربلان الأبعاد التي تفصل نقاط البيانات إلى فئتين. هذا يصعب من الصعب تصور كما أنه من الصعب بالنسبة لنا أن نفهم أي شيء فوق 3 أبعاد، ولكن كل ما تحتاج إلى معرفته هو أن يعمل بنفس الطريقة تماما كما يفعل لحالة 2 الأبعاد.
كيف "دعم ناقلات آلات العمل"؟ مثال: هل هو سنيك؟
تخيل هذا السيناريو الافتراضي، كنت باحثا التحقيق في حيوان نادر فقط وجدت في أعماق القطب الشمالي دعا شنيكس. وبالنظر إلى بعد هذه الحيوانات، لم يتم العثور سوى حفنة صغيرة من أي وقت مضى (دعونا نقول حوالي 5000). كباحث، كنت عالقة مع هذا السؤال. كيف يمكنني تحديد سنيك؟
كل ما لديك تحت تصرفكم هي الأبحاث التي نشرت سابقا من قبل حفنة من الباحثين التي شهدت واحدة. في هذه الأبحاث، يصف المؤلفون خصائص معينة عن سنيكس وجدوا، أي الارتفاع والوزن وعدد الساقين، وما إلى ذلك ولكن كل هذه الخصائص تختلف بين الأوراق البحثية التي لا يوجد بها نمط ملحوظ.
كيف يمكننا استخدام هذه البيانات للتعرف على حيوان جديد باعتباره سنيك؟
أحد الحلول الممكنة لمشكلتنا هو استخدام آلة ناقلات الدعم لتحديد الأنماط في البيانات وإنشاء إطار عمل يمكن استخدامه لتصنيف الحيوانات على أنها سنيك أو لا سنيك. الخطوة الأولى هي إنشاء مجموعة من البيانات التي يمكن استخدامها لتدريب جهاز ناقلات الدعم لتحديد شنيكس. بيانات التدريب هي مجموعة من المدخلات والمخرجات مطابقة لآلة ناقلات الدعم لتحليل واستخراج نمط من.
ولذلك، يجب أن نقرر ما هي المدخلات التي سيتم استخدامها وكم. نظريا، يمكن أن يكون لدينا العديد من المدخلات كما نريد، ولكن هذا يمكن أن يؤدي في كثير من الأحيان إلى التدريب بطيئة (والمزيد من المدخلات لديك المزيد من الوقت الذي يستغرق آلة ناقلات الدعم لاستخراج أنماط). أيضا، كنت ترغب في اختيار المدخلات القيم التي تميل إلى أن تكون متسقة نسبيا عبر جميع شنيكس. على سبيل المثال، ارتفاع أو وزن الحيوان سيكون مثالا جيدا على المدخلات لأنك تتوقع أن هذا سيكون متسقا نسبيا في جميع سشنيكس. ومع ذلك، فإن متوسط عمر الحيوان سيكون خيارا ضعيفا من المدخلات لأنك تتوقع سن الحيوانات التي تم تحديدها من شأنها أن تختلف اختلافا كبيرا.
ولهذا السبب، تم اختيار المدخلات التالية:
ارتفاع الوزن عدد الساقين عدد العيون طول الذراع الحيوان متوسط سرعة الحيوانات تردد الحيوانات الدعوة التزاوج.
مع المدخلات المختارة، يمكننا أن نبدأ في تجميع بيانات التدريب لدينا. يجب أن تستوفي بيانات التدريب الفعالة لآلة ناقلات الدعم متطلبات معينة:
يجب أن يكون البيانات أمثلة من الحيوانات التي هي سنيكس يجب أن يكون البيانات أمثلة من الحيوانات التي ليست سنيكس.
في هذه الحالة لدينا أوراق بحثية من العلماء التي حددت بنجاح سنيك و سرد خصائصها. لذلك يمكننا قراءة هذه الأوراق البحثية واستخراج البيانات تحت كل من المدخلات وتخصيص مخرجات صحيحة أو خاطئة لكل من الأمثلة. قد تبدو بيانات التدريب في هذه الحالة مشابهة للجدول أدناه.
الجدول 1. مثال لجدول الملاحظات.
وبمجرد أن جمعنا البيانات لجميع المدخلات والمخرجات التدريبية لدينا، يمكننا استخدامه لتدريب لدينا ناقلات دعم الجهاز. خلال عملية التدريب، فإن آلة ناقلات الدعم إنشاء نموذج في سبعة أبعاد الفضاء التي يمكن استخدامها لفرز كل من الأمثلة التدريبية في إما صحيحة أو خاطئة. وستستمر آلة ناقلات الدعم في القيام بذلك إلى أن يكون لها نموذج يمثل بدقة بيانات التدريب (ضمن التسامح المحدد للخطأ). وبمجرد اكتمال التدريب، يمكن استخدام هذا النموذج لتصنيف نقاط بيانات جديدة إما صحيحة أو خاطئة.
هل آلة دعم الدعم في الواقع العمل؟
وباستخدام سينيك سنيك، قمت بكتابة نص برمجي يختبر مدى قدرة جهاز متجه الدعم على التعرف على سنيكس جديدة. للقيام بذلك، لقد استخدمت "دعم ناقلات آلة التعلم أداة" مكتبة مكتبة التي يمكن تحميلها من السوق.
لنموذج هذا السيناريو بشكل فعال، نحن بحاجة إلى أن تقرر أولا ما هي الخصائص الفعلية لل سنيك. وقد تم إدراج الخصائص التي افترضتها في هذه الحالة في الجدول أدناه. إذا كان الحيوان يفي بجميع المعايير أدناه، فإنه هو سنيك.
الجدول 2. ملخص المعلمات التي تحدد سنيك.
الآن بعد أن عرفنا سنيك لدينا، يمكننا استخدام هذا التعريف لتجربة آلات ناقلات الدعم. الخطوة الأولى هي إنشاء وظيفة قادرة على اتخاذ المدخلات السبعة لأي حيوان معين والعودة التصنيف الفعلي للحيوان كما سنيك أم لا. وسوف تستخدم هذه الوظيفة لتوليد بيانات التدريب للجهاز ناقلات الدعم وكذلك تقييم أداء منه في نهاية المطاف. ويمكن القيام بذلك باستخدام الدالة أدناه؛
الخطوة التالية في العملية هي إنشاء وظيفة يمكن أن تولد المدخلات والمخرجات التدريبية. سيتم إنشاء الإدخالات في هذه الحالة بإنشاء أرقام عشوائية ضمن نطاق محدد لكل من قيم الإدخال السبعة. ثم لكل من مجموعات من المدخلات العشوائية ولدت، سيتم استخدام الدالة إسيتاسشنيك () أعلاه لتوليد الناتج المطلوب المقابلة. ويتم ذلك في الوظيفة التالية:
لدينا الآن مجموعة من المدخلات والمخرجات التدريب، فقد حان الوقت الآن لإنشاء آلات ناقلات الدعم باستخدام "دعم ناقلات آلة التعلم أداة" المتاحة في السوق. مرة واحدة يتم إنشاء جهاز ناقل دعم جديد، فمن الضروري لتمرير مدخلات التدريب والمخرجات له وتنفيذ التدريب.
لدينا الآن آلة ناقلات الدعم التي تم تدريبها بنجاح في تحديد سنيكس. للتحقق من ذلك، يمكننا اختبار جهاز ناقل الدعم النهائي عن طريق طرحه لتصنيف نقاط بيانات جديدة. ويتم ذلك من خلال توليد المدخلات العشوائية أولا، ثم استخدام الدالة إسيتاسشنيك () لتحديد ما إذا كانت هذه المدخلات تتوافق مع سنيك الفعلي، ثم استخدام آلة ناقلات الدعم لتصنيف المدخلات وتحديد ما إذا كانت النتيجة المتوقعة تتطابق مع النتيجة الفعلية. ويتم ذلك في الوظيفة التالية:
أوصي اللعب مع القيم ضمن الوظائف المذكورة أعلاه لنرى كيف أداء ناقلات الدعم أداء في ظل ظروف مختلفة.
لماذا هو دعم ناقلات آلة مفيدة جدا؟
الاستفادة من استخدام آلة ناقلات الدعم لاستخراج نمط معقد من البيانات هو أنه ليس من الضروري فهم مسبق لسلوك البيانات. آلة ناقلات الدعم قادرة على تحليل البيانات واستخراج رؤى وعلاقات فقط. وبهذه الطريقة، فإنه يعمل على غرار مربع أسود تلقي المدخلات وتوليد الانتاج التي يمكن أن تكون مفيدة جدا في إيجاد أنماط في البيانات التي هي معقدة جدا وغير واضحة.
واحدة من أفضل ميزات آلات ناقلات الدعم هي أنها قادرة على التعامل مع الأخطاء والضوضاء في البيانات بشكل جيد للغاية. وغالبا ما تكون قادرة على رؤية النمط الأساسي داخل البيانات وتصفية القيم المتطرفة البيانات والتعقيدات الأخرى. النظر في السيناريو التالي، في إجراء البحوث الخاصة بك على سنيكس، كنت تأتي عبر العديد من الأبحاث التي تصف سنيكس مع خصائص مختلفة بشكل كبير (مثل سنيك الذي هو 200kg و 15000mm طويل القامة).
أخطاء مثل هذا يمكن أن يؤدي إلى تشوهات النموذج الخاص بك ما هو سنيك، والتي يمكن أن تسبب لك أن تجعل من الخطأ عند تصنيف اكتشافات سنيك جديدة. فائدة آلة ناقلات الدعم هي أنه سيتم تطوير نموذج يتفق مع النمط الأساسي المعارض لنموذج يناسب جميع نقاط بيانات التدريب. ويتم ذلك عن طريق السماح بمستوى معين من الخطأ في النموذج لتمكين آلة ناقل الدعم من التغاضي عن أي أخطاء في البيانات.
في حالة سنيك آلة ناقلات الدعم، إذا سمحنا تحمل الخطأ من 5٪، ثم التدريب سوف تحاول فقط لتطوير نموذج يتفق مع 95٪ من بيانات التدريب. وهذا يمكن أن يكون مفيدا لأنه يسمح للتدريب لتجاهل النسبة المئوية الصغيرة من القيم المتطرفة.
يمكننا التحقيق في هذه الخاصية من جهاز دعم ناقلات أخرى عن طريق تعديل السيناريو لدينا سنيك. وقد أضيفت الوظيفة أدناه لإدخال أخطاء عشوائية متعمدة في مجموعة بيانات التدريب لدينا. هذه الوظيفة سوف تختار نقاط التدريب عشوائيا واستبدال المدخلات والمخرجات المقابلة مع المتغيرات العشوائية.
هذه الوظيفة تسمح لنا لإدخال أخطاء متعمدة في بيانات التدريب لدينا. باستخدام هذا الخطأ شغل البيانات، يمكننا إنشاء وتدريب جديد ناقلات دعم الجهاز ومقارنة أدائها مع واحد الأصلي.
عند تشغيل البرنامج النصي، ينتج النتائج التالية في سجل الخبراء. ضمن مجموعة بيانات التدريب مع 5000 نقطة التدريب، كنا قادرين على إدخال 500 أخطاء عشوائية. عند مقارنة أداء هذا الخطأ شغل آلة ناقلات الدعم مع واحد الأصلي، يتم تقليل الأداء فقط من قبل & لوت؛ 1٪. وذلك لأن آلة ناقل الدعم قادرة على التغاضي عن القيم المتطرفة في مجموعة البيانات عند التدريب ولا تزال قادرة على إنتاج نموذج دقيق لافت للنظر من البيانات الحقيقية. ويشير هذا إلى أن آلات ناقلات الدعم يمكن أن تكون أداة أكثر فائدة في استخراج الأنماط المعقدة والأفكار من مجموعات البيانات الصاخبة.
الشكل 5. سجل الخبير الناتج بعد تشغيل السيناريو "سنيك" في ميتاتريدر 5.
يمكن تحميل النسخة الكاملة من التعليمات البرمجية أعلاه من قاعدة التعليمات البرمجية، ولكن لا يمكن تشغيل هذا البرنامج النصي إلا في المحطة الطرفية الخاصة بك إذا كنت قد اشتريت نسخة كاملة من أداة دعم آلة ناقلات الدعم من السوق. If you only have a demo version of this tool downloaded, you will be limited to using the tool via the strategy tester. To allow testing of the "Schnick" code using the demo version of the tool, I have rewritten a copy of the script into an Expert Advisor that can be deployed using the strategy tester. Both of these code versions can be downloaded by following the links below:
Full Version - Using a Script that is deployed in the MetaTrader 5 terminal (requires a purchased version of the Support Vector Machine Learning Tool)
Demo Version - Using an Expert Advisor that is deployed in the MetaTrader 5 strategy tester (requires only a demo version of the Support Vector Machine Learning Tool)
How Can Support Vector Machines be used in the Market?
Admittedly, the Schnick example discussed above is quite simple, however there are quite a few similarities that can be drawn between this example and using the support vector machines for technical market analysis.
Technical analysis is fundamentally about using historical market data to predict future price movements. In the same way within the schnick example, we were using the observations made by past scientists to predict whether a new animal is a schnick or not. Further, the market is plagued with noise, errors and statistical outliers that make the use of a support vector machine an interesting concept.
The basis for a significant number of technical analysis trading approaches involve the following steps:
Monitoring several indicators Identifying what conditions for each indicator correlates with a potentially successful trade Watch each of the indicators and assess when they all (or most) are signalling a trade.
It is possible to adopt a similar approach to use support vector machines to signal new trades in a similar way. The support vector machine learning tool was developed with this in mind. A full description of how to use this tool can be found in the Market, so I will only give a quick overview. The process for using this tool is as follows:
Figure 6. The block diagram showing the process for implementing the support vector machine tool in an Expert Advisor.
Before you can use the Support Vector Machine Learning Tool, it is important to first understand how the training inputs and outputs are generated.
How are Training Inputs Generated?
So, the indicators you want to use as inputs have been already been initialized as well as your new support vector machine. The next step is to pass the indicator handles to your new support vector machine and instruct it on how to generate the training data. This is done by calling the setIndicatorHandles() function. This function allows you to pass the handles of initialized indicators into the support vector machine. This is done by passing and integer array containing the handles. The two other inputs for this function is the offset value and the number of data points.
The offset value denotes the offset between the current bar and the starting bar to be used in generating the training inputs and the number of training points (denoted by N) sets the size your training data. The diagram below illustrates how to use these values. An offset value of 4 and an N value of 6 will tell the support vector machine to only use the bars captured in the white square to generate training inputs and outputs. Similarly, an offset value of 8 and an N value of 8 will tell the support vector machine to only use the bars captured in the blue square to generate training inputs and outputs.
Once the setIndicatorHandles() function has been called, it is possible to call the genInputs() function. This function will use the indicator handles to passed to generate an array of input data to be used for training.
Figure 7. Candle chart illustrating the values of Offset and N.
How are Training Outputs Generated?
Training outputs are generated by simulating hypothetical trades based on historical price data and determining whether such a trade would have been successful or unsuccessful. In order to do this, there are a few parameters that are used to instruct the support vector machine learning tool how to assess a hypothetical trade as either successful or unsuccessful.
The first variable is OP_TRADE. The value of this can either be BUY or SELL and will correspond to either hypothetical buy or sell trades. If the value of this is BUY, then when generating the outputs it will only look at the potential success of hypothetical buy trades. Alternatively, if the value of this is SELL, then when generating the outputs it will only look at the potential success of hypothetical sell trades.
The next values used is the Stop Loss and Take Profit for these hypothetical trades. The values are set in pips and will set the stop and limit levels for each of the hypothetical trades.
The final parameter is the trade duration. This variable is measured in hours and will ensure that only trades that are complete within this maximum duration will be deemed successful. The reason for including this variable is to avoid the support vector machine signalling trades in a slow moving sideways market.
Considerations to Make When Choosing Inputs.
It is important to put some thought into the input selection when implementing support vector machines in your trading. Similar the Schnick example, it is important to choose an input that would be expected to have similar across difference incidences. For example, you may be tempted to use a moving average as an input, however since the long term average price tends to change quite dramatically over time, a moving average in isolation may not be the best input to use. This is because there won't be any significant similarity between the moving average value today and the moving average values six months ago.
Assume we are trading EURUSD and using a support vector machine with a moving average input to signal 'buy' trades. Say the current price is 1.10, however it is generating training data from six months ago when the price was 0.55. When training the support vector machine, the pattern it finds may only lead to a trade being signaled when the price is around 0.55, since this is the only data it knows. Therefore, your support vector machine may never signal a trade until the price drops back down to 0.55.
Instead, a better input to use for the support vector machine may be a MACD or a similar oscillator because the value of the MACD is independent of the average price level and only signals relative movement. I recommend you experiment with this to see what produces the best results for you.
Another consideration to make when choosing inputs is ensuring that the support vector machine has an adequate snapshot of an indicator to signal a new trade. You may find in your own trading experience that a MACD is only useful when you have the past five bars to look at, as this will show a trend. A single bar of the MACD may be useless in isolation unless you can tell if it is heading up or down. Therefore, it may be necessary to pass the past few bars of the MACD indicator to the support vector machine. There are two possible ways you can do this:
You can create a new custom indicator that uses the past five bars of the MACD indicator to calculate a trend as a single value. This custom indicator can then be passed to the support vector machine as a single input, or.
You can use the previous five bars of the MACD indicator in the support vector machine as five separate inputs. The way to do this is to initialize five different instances of the MACD indicator. Each of the indicators can be initialized with a different offset from the current bar. Then the five handles from the separate indicators can be passed to the support vector machine. It should be noted, that option 2 will tend to cause longer execution times for your Expert Advisor. The more inputs you have, the longer it will take to successfully train.
Implementing Support Vector Machines in and Expert Advisor.
I have prepared an Expert Advisor that is an example of how someone could potentially use support vector machines in their own trading (a copy of this can be downloaded by following this link mql5/en/code/1229). Hopefully the Expert Advisor will allow you to experiment a little with support vector machines. I recommend you copy/change/modify the Expert Advisor to suit your own trading style. The EA works as follows:
Two new support vector machines are created using the svMachineTool library. One is set up to signal new 'Buy' trades and the other is set up to signal new 'Sell' trades.
Seven standard indicators are initialized with each of their handles stored to an integer array (Note: any combination of indicators can be used as inputs, they just need to be passed to the SVM in a single integer array).
The array of indicator handles is passed to the new support vector machines.
Using the array of indicator handles and other parameters, historical price data is used to generate accurate inputs and outputs to be used for training the support vector machines.
Once all of the inputs and outputs have been generated, both of the support vector machines are trained.
The trained support vector machines are used in the EA to signal new 'buy' and 'sell' trades. When a new 'buy' or 'sell' trade is signaled, the trade opens along with manual Stop Loss and Take Profit orders.
The initialization and training of the support vector machine are executed within the onInit() function. For your reference, this segment of the svTrader EA has been included below with notes.
Advanced Support Vector Machine Trading.
Additional capability was built into the support vector machine learning tool for the more advanced users out there. The tool allows users to pass in their own custom input data and output data (as in the Schnick example). This allows you to custom design your own criteria for support vector machine inputs and outputs, and manually pass in this data to train it. This opens up the opportunity to use support vector machines in any aspect of your trading.
It is not only possible to use support vector machines to signal new trades, but it can also be used to signal the closing of trades, money management, new advanced indicators etc. However to ensure you don’t receive errors, it is important to understand how these inputs and outputs are to be structured.
Inputs: Inputs are passed to SVM as a 1 dimensional array of double values. Please note that any input you create must be passed in as a double value. Boolean, integer, etc. must all be converted into a double value before being passed into the support vector machine. The inputs are required in the following form. For example, assume we are passing in inputs with 3 inputs x 5 training points. To achieve this, our double array must be 15 units long in the format:
| A 1 | B 1 | C 1 | A 2 | B 2 | C 2 | A 3 | B 3 | C 3 | A 4 | B 4 | C 4 | A 5 | B 5 | C 5 |
It is also necessary to pass in a value for the number of inputs. In the case, N_Inputs=3.
Outputs: outputs are passed in as an array of Boolean values. These boolean values are the desired output of the SVM corresponded to each of the sets of inputs passed in. Following the above example, say we have 5 training points. In this scenario, we will pass in a Boolean array of output values that is 5 units long.
When generating your own inputs and outputs, be sure that the length of your arrays matches the values you pass in. If they don’t match, an error will be generated notifying you of the discrepancy. For example, if we have passed in N_Inputs=3, and inputs is an array of length 16, an error will be thrown (since, a N_inputs value of 3 will mean that the length of any input array will need to be a multiple of 3). Similarly, ensure that the number of sets of inputs and the number of outputs that you pass in are equal. Again, if you have N_Inputs=3, length of inputs of 15 and a length of outputs of 6, another error will be thrown (as you have 5 sets of inputs and 6 outputs).
Try to ensure you have enough variation in your training outputs. For example, if you pass in 100 training points, which means an output array of length 100, and all of the values are false with only one true, then the differentiation between the true case and the false case is not sufficient enough. This will tend to lead to the SVM training very fast, but the final solution being very poor. A more diverse training set will often lead to a more affective SVM.
Trading with SVMs: Performance.
S&P 500 Trading Performance.
Very nice! Using the 5 lagged daily returns shows similar performance to the ARMA+GARCH strategy, which I found very promising. If you wonder why I am so excited about this fact, it’s because here we are in the area where ARMA+GARCH is best, and yet, SVMs show comparable performance.
The statistics are also impressive:
While writing this post, I found another effort to use SVMs in trading by Quantum Financier. His approach uses RSI of different length as input to the SVM, but it also uses classification (maps the returns to two values, short or long) instead of regression. Since I was planning to try classification anyways, his post inspired me to implement it and run an additional comparison, regression vs classification:
S&P 500 SVM Trading – Regression vs Classification.
What can I say – they both seem to work perfectly. As a reader suggested in the comments, the Classification does exhibit more consistent returns.
Looking at the table, the classification cut in half the maximum drawdown, but interestingly, it didn’t improve the Sharpe ratio significantly. Nothing conclusive here though, it was a quick run of the fastest (in terms of running time) strategies.
There is still a long list of topics to explore, just to give you an idea, in no particular order:
Add other features. Mostly thinking of adding some Fed-related series, this data goes back to 1960, so it’s coming soon.:) Try other svm parameters: other regressions, other classifications, other kerenls, etc. This is more like a stability test. Try other error functions. The default is to use the mean square error, but in the case of regression, why not use Sharpe Ratio (in-sample)? The regression case is simpler, since we have the actual returns – check the input of tune. control . Try longer periods instead of days. Weekly is a start, but ideally I’d like to implement two or three day periods. Vary the loopback period. Use more classes with classification: large days, medium days, etc.
This will take time. As always, feedback and comments are welcome.
التعليقات مغلقة.
المشاركات الشعبية الأخيرة.
أكثر المقالات التي تمت زيارتها في الأسبوع.
وظائف للمستخدمين R.
هو مدعوم من وورد باستخدام تصميم بافوتاسان.
كوبيرايت & كوبي؛ 2017 R-bloggers . كل الحقوق محفوظة. الشروط والأحكام لهذا الموقع.
Trading with Support Vector Machines (SVM)
Finally all the stars have aligned and I can confidently devote some time for back-testing of new trading systems, and Support Vector Machines (SVM) are the new “toy” which is going to keep me busy for a while.
SVMs are a well-known tool from the area of supervised Machine Learning, and they are used both for classification and regression. For more details refer to the literature.
It seems to me that the most intuitive application for trading is regression, so let’s start by building an SVM regression model.
Following our experience with ARMA+GARCH models, we will start by trying to forecast returns, instead of prices. Likewise, in our first tests, we will use only the returns of the previous 5 days as the features determining the return of a particular day. We will start with history of 500 days as the training set.
In more mathematical terms, for the training set we have N features, for each of them we have M samples. We also have M responses.
Given a row of feature values, the left matrix, the SVM is trained to produce the response value. In our specific example, we have five columns (features), each column corresponding to the returns with a different lag (from 1 to 5). We have 500 samples and the corresponding responses.
Once the SVM is trained on this set, we can start feeding it with sets of five features, corresponding to the returns for the five previous days, and the SVM will provide us with the response, which is the forecasted return. For example, after training the SVM on the previous 500 days, we will use the returns for days 500, 499, 498, 497 and 496 (these are ours as the input to obtain the forecasted return for day 501.
From all the packages available in R, I decided to choose the e1071 package. A close second choice was the kernlab package, which I am still planning to try in the future.
Then I tried a few strategies. First I tried something very similar to the ARMA+GARCH approach – the lagged returns from the five previous days. I was quite surprised to see this strategy performing better than the ARMA+GARCH (this is the home land of the ARMA+GARCH and I would have been quite happy just with comparable performance)!
Next, I tried to the same five features, but trying to select the best subset. The selection was done using a greedy approach, starting with 0 features, and interactively adding the feature which minimizes the error best. This approach improved things further.
Finally, I tried a different approach with about a dozen features. The features included returns over different period of time (1-day, 2-day, 5-day, etc), some statistics (mean, median, sd, etc) and volume. I used the same greedy approach to select features. This final system showed a very good performance as well, but it took a hell of a time to run.
Time to end this post, the back-testing results have to wait. Until then you can play with the full source code yourself. Here is an example of using it:
Trading Using Machine Learning In Python – SVM (Support Vector Machine)
In this blog, I will show you how to implement a trading strategy using the regime predictions made in the previous blog. Do read it, there is a special discount for you at the end of this.
There is one thing that you should keep in mind before you read this blog though: The algorithm is just for demonstration and should not be used for real trading without proper optimization.
Let me begin by explaining the agenda of the blog:
Create an unsupervised ML ( machine learning) algorithm to predict the regimes. Plot these regimes to visualize them. Train a Support Vector Classifier algorithm with the regime as one of the features. Use this Support Vector Classifier algorithm to predict the current day’s trend at the Opening of the market. Visualize the performance of this strategy on the test data. Downloadable code for your benefit.
Import the Libraries and the Data:
First, I imported the necessary libraries. Please note that I have imported fix_yahoo_finance package, so I am able to pull data from yahoo. If you do not have this package, I suggest you install it first or change your data source to google.
Next, I pulled the data of the same quote, ‘SPY’, which we used in the previous blog and saved it as a dataframe df. I chose the time period for this data to be from the year 2000.
After this, I created indicators that can be used as features for training the algorithm.
But, before doing that I decided on the look back time period for these indicators. I chose a look back period of 10 days. You may try any other number that suits you. I chose 10 to check for the past 2 weeks of trading data and to avoid noise inherent in smaller look back periods.
Apart from the look back period let us also decide the test train split of the data. I prefer to give 80% data for training and remaining 20% data for testing. You can change this as per your need.
Next, I shifted the High, Low and Close columns by 1, to access only the past data. After this, I created various technical indicators such as, RSI, SMA, ADX, Correlation, Parabolic SAR, and the Return of the past 1- day on an Open to Open basis.
Next, I printed the data frame.
And it looked like this:
As you can see, there are many NaN values. We need to either impute them or drop them. If you are new to the machine learning and want to learn about the imputer function, read this. I dropped the NaN values in this algorithm.
In the next part of the code, I instantiated a StandardScaler function and created an unsupervised learning algorithm to make the regime prediction. I have discussed this in my previous blog, so I will not be going into these details again.
Towards the end of the last blog, I printed the Mean and Covariance values for all the regimes and plotted the regimes. The new output with indicators as feature set would look like this:
Next, I scaled the Regimes data frame, excluding the Date and Regimes columns, created in the earlier piece of code and saved it back in the same columns. By doing so, I will not be losing any features but the data will be scaled and ready for training the support vector classifier algorithm. Next, I created a signal column which would act as the prediction values. The algorithm would train on the features’ set to predict this signal.
Next, I instantiated a support vector classifier. For this, I used the same SVC model used in the example by sklearn. I have not optimized this support vector classifier for best hyper parameters. In the machine learning course on Quantra™, we have extensively discussed how to use hyper parameters and optimize the algorithm to predict the daily Highs and Lows, in turn the volatility of the day.
Coming back to the blog, the code for support vector classifier is as below:
Next, I split the test data of the unsupervised regime algorithm into train and test data. We use this new train data to train our support vector classifier algorithm. To create the train data I dropped the columns that are not a part of the feature set:
Then I fit the X and y data sets to the algorithm to train it on.
Next, I calculated the test set size and indexed the predictions accordingly to the data frame df.
The reason for doing this is that the original return values of ‘SPY’ are stored in df, while those in Regimes is scaled hence, won’t be useful for taking a cumulative sum to check for the performance.
Next, I saved the predictions made by the SVC in a column named Pred_Signal.
Then, based on these signals I calculated the returns of the strategy by multiplying signal at the beginning of the day with the return at the opening ( because our returns are from open to open) of the next day.
Finally, I calculated the cumulative strategy returns and the cumulative market returns and saved them in df. Then, I calculated the sharpe ratio to measure the performance. To get a clear understanding of this metric I plotted the performance to measure it.
The final result looks like this.
After so much of code and effort, if the end result looks like this, then someone with no machine learning back ground would say that it is not worth it. I would agree for now. But, look at this line of code:
I just changed the data from SPY to IBM. Then the result looks like this:
I know what you are thinking: I am just fitting the data to get the results. Which is not entirely wrong. I will show you another stock then you decide.
I changed the stock to Freeport-McMoRan Inc and the result looks like this:
You can further change it to GE or something else and check for yourself. This strategy works on some stocks but doesn’t work on others, which is the case with most quant strategies. There are a few reasons why the algorithm did work consistently and I will list some of them here.
No autocorrelation of returns No Support Vector hyper parameter optimization No error propagation No feature selection.
We have not checked for autocorrelation of the returns, which would have increased the predictability of the algorithm. Try that on your own by shifting the returns column by 1 and passing it as feature set. The result would look like this:
Although the improvement from 3.4 to 3.49 is not much, it is still a good feature to have.
Please note that the code will best run with Python 2.7.
Hope you’ve had a good understanding of Support Vector Machine used in trading. We have covered this topic extensively in our latest machine learning course ‘Trading with Machine Learning: Classification and SVM‘ where you’ll get a good understanding of classification techniques used in Machine Learning. The course covers how to combine the hyper parameter search and an SVC to arrive at the best possible parameters for any given data set. Furthermore, the course also covers how to optimize your strategy to use it as an intraday trading algorithm. It also includes an extensive discussion on binary and multi classification problems and how to use them in trading.
Comments
Post a Comment