एल्गोरिथम ट्रेडिंग रणनीतियों का सफल बैकटेस्टिंग - भाग I

लेखक:अच्छाई, बनाया गयाः 2019-03-20 17:00:16, अद्यतन किया गयाः

यह लेख मात्रात्मक व्यापार पर श्रृंखला को जारी रखता है, जो शुरुआती गाइड और रणनीति पहचान के साथ शुरू हुआ था। ये दोनों लंबे, अधिक शामिल लेख बहुत लोकप्रिय रहे हैं इसलिए मैं इस नस में जारी रखूंगा और रणनीति बैकटेस्टिंग के विषय पर विस्तार प्रदान करूंगा।

एल्गोरिथमिक बैकटेस्टिंग के लिए मनोविज्ञान, गणित, सांख्यिकी, सॉफ्टवेयर विकास और बाजार/विनिमय सूक्ष्म संरचना सहित कई क्षेत्रों के ज्ञान की आवश्यकता होती है। मैं उन सभी विषयों को एक लेख में कवर करने की उम्मीद नहीं कर सकता, इसलिए मैं उन्हें दो या तीन छोटे टुकड़ों में विभाजित करने जा रहा हूं। हम इस खंड में क्या चर्चा करेंगे? मैं बैकटेस्टिंग की परिभाषा करके शुरू करूंगा और फिर मैं इसके संचालन की मूल बातें बताऊंगा। फिर मैं शुरुआती गाइड टू क्वांटिटेटिव ट्रेडिंग में हमने जिन पूर्वाग्रहों को छुआ है, उन पर प्रकाश डालूंगा। आगे मैं विभिन्न उपलब्ध बैकटेस्टिंग सॉफ्टवेयर विकल्पों की तुलना प्रस्तुत करूंगा।

बाद के लेखों में हम रणनीति कार्यान्वयन के विवरणों को देखेंगे जो अक्सर शायद ही कभी उल्लेख किए जाते हैं या अनदेखा किए जाते हैं। हम यह भी विचार करेंगे कि ट्रेडिंग एक्सचेंज की विशिष्टताओं को शामिल करके बैकटेस्टिंग प्रक्रिया को अधिक यथार्थवादी कैसे बनाया जाए। फिर हम लेनदेन लागतों पर चर्चा करेंगे और बैकटेस्ट सेटिंग में उन्हें सही ढंग से कैसे मॉडल किया जाए। हम अपने बैकटेस्ट के प्रदर्शन पर चर्चा के साथ समाप्त करेंगे और अंत में एक सामान्य मात्रा रणनीति का एक उदाहरण प्रदान करेंगे, जिसे एक औसत-रिवर्टिंग जोड़े व्यापार के रूप में जाना जाता है।

चलिए शुरू करते हैं कि बैकटेस्टिंग क्या है और हमें इसे अपने एल्गोरिथम ट्रेडिंग में क्यों करना चाहिए।

बैकटेस्टिंग क्या है?

एल्गोरिथम ट्रेडिंग अन्य प्रकार के निवेश वर्गों से अलग है क्योंकि हम अतीत के प्रदर्शन से भविष्य के प्रदर्शन के बारे में अपेक्षाओं को अधिक विश्वसनीय रूप से प्रदान कर सकते हैं, क्योंकि प्रचुर मात्रा में डेटा उपलब्ध है। जिस प्रक्रिया से यह किया जाता है उसे बैकटेस्टिंग के रूप में जाना जाता है।

सरल शब्दों में, बैकटेस्टिंग आपके विशेष रणनीति एल्गोरिथ्म को ऐतिहासिक वित्तीय डेटा की धारा के संपर्क में लाकर किया जाता है, जिससे ट्रेडिंग सिग्नल का एक सेट होता है। प्रत्येक व्यापार (जिसका हम यहाँ दो संकेतों की राउंड-ट्रिप होने का मतलब होगा) का एक संबंधित लाभ या हानि होगी। आपकी रणनीति बैकटेस्ट की अवधि के दौरान इस लाभ / हानि का संचय कुल लाभ और हानि (जिसे P&L या PnL के रूप में भी जाना जाता है) का कारण बनेगा। यह विचार का सार है, हालांकि निश्चित रूप से शैतान हमेशा विवरण में होता है!

एल्गोरिथम रणनीति के बैकटेस्ट के लिए मुख्य कारण क्या हैं?

  • फ़िल्टरिंग - यदि आप रणनीति पहचान पर लेख से याद करते हैं, तो प्रारंभिक शोध चरण में हमारा लक्ष्य एक रणनीति पाइपलाइन स्थापित करना था और फिर किसी भी रणनीति को फ़िल्टर करना था जो कुछ मानदंडों को पूरा नहीं करता था। बैकटेस्टिंग हमें एक और फ़िल्टरिंग तंत्र प्रदान करता है, क्योंकि हम उन रणनीतियों को समाप्त कर सकते हैं जो हमारी प्रदर्शन आवश्यकताओं को पूरा नहीं करते हैं।
  • मॉडलिंग - बैकटेस्टिंग हमें (सुरक्षित रूप से) कुछ बाजार घटनाओं के नए मॉडल का परीक्षण करने की अनुमति देता है, जैसे कि लेनदेन लागत, ऑर्डर रूटिंग, विलंबता, तरलता या अन्य बाजार सूक्ष्म संरचना के मुद्दे।
  • अनुकूलन - यद्यपि रणनीति अनुकूलन पूर्वाग्रहों से भरा होता है, बैकटेस्टिंग हमें उस रणनीति से जुड़े मापदंडों की मात्रा या मूल्यों को संशोधित करके और इसके प्रदर्शन की पुनः गणना करके रणनीति के प्रदर्शन को बढ़ाने की अनुमति देता है।
  • सत्यापन - हमारी रणनीतियों को अक्सर हमारी रणनीति पाइपलाइन के माध्यम से बाहरी स्रोतों से प्राप्त किया जाता है। एक रणनीति का बैकटेस्टिंग यह सुनिश्चित करता है कि इसे गलत तरीके से लागू नहीं किया गया है। हालांकि हमारे पास शायद ही कभी बाहरी रणनीतियों द्वारा उत्पन्न संकेतों तक पहुंच होगी, हमारे पास अक्सर शार्प अनुपात और ड्रॉडाउन विशेषताओं जैसे प्रदर्शन मीट्रिक तक पहुंच होगी। इस प्रकार हम उन्हें अपने स्वयं के कार्यान्वयन के साथ तुलना कर सकते हैं।

बैकटेस्टिंग एल्गोरिदमिक ट्रेडिंग के लिए कई फायदे प्रदान करता है। हालांकि, किसी रणनीति को सीधे तौर पर बैकटेस्ट करना हमेशा संभव नहीं होता है। सामान्य तौर पर, रणनीति की आवृत्ति बढ़ने के साथ, बाजार और एक्सचेंजों के सूक्ष्म संरचना प्रभावों को सही ढंग से मॉडल करना मुश्किल हो जाता है। इससे कम विश्वसनीय बैकटेस्ट होते हैं और इस प्रकार चुनी गई रणनीति का अधिक मुश्किल मूल्यांकन होता है। यह एक विशेष समस्या है जहां निष्पादन प्रणाली रणनीति प्रदर्शन की कुंजी है, जैसे कि अल्ट्रा-हाई-फ्रीक्वेंसी एल्गोरिदम।

दुर्भाग्य से, बैकटेस्टिंग में सभी प्रकार के पूर्वाग्रह होते हैं। हमने इन मुद्दों में से कुछ को पिछले लेखों में छुआ है, लेकिन अब हम उन पर गहराई से चर्चा करेंगे।

रणनीति बैकटेस्ट को प्रभावित करने वाले पूर्वाग्रह

कई पूर्वाग्रह हैं जो एक बैकटेस्ट की गई रणनीति के प्रदर्शन को प्रभावित कर सकते हैं। दुर्भाग्य से, इन पूर्वाग्रहों में प्रदर्शन को कम करने के बजाय प्रदर्शन को फुला देने की प्रवृत्ति होती है। इस प्रकार आपको हमेशा बैकटेस्ट को रणनीति के वास्तविक प्रदर्शन पर एक आदर्श ऊपरी सीमा माननी चाहिए। एल्गोरिदमिक ट्रेडिंग से पूर्वाग्रहों को समाप्त करना लगभग असंभव है इसलिए हमारे एल्गोरिदमिक रणनीतियों के बारे में सूचित निर्णय लेने के लिए उन्हें यथासंभव कम करना हमारा काम है।

चार प्रमुख पूर्वाग्रह हैं जिन पर मैं चर्चा करना चाहूंगा: अनुकूलन पूर्वाग्रह, आगे देखने का पूर्वाग्रह, उत्तरजीविता पूर्वाग्रह और मनोवैज्ञानिक सहिष्णुता पूर्वाग्रह।

अनुकूलन पूर्वाग्रह

यह संभवतः सभी बैकटेस्ट पूर्वाग्रहों में सबसे घातक है। इसमें बैकटेस्ट डेटा सेट पर रणनीति प्रदर्शन बहुत आकर्षक होने तक अतिरिक्त ट्रेडिंग मापदंडों को समायोजित या पेश करना शामिल है। हालांकि, एक बार लाइव होने के बाद रणनीति का प्रदर्शन काफी अलग हो सकता है। इस पूर्वाग्रह के लिए एक और नाम है वक्र फिटिंग या डेटा-स्नूपिंग पूर्वाग्रह

अनुकूलन पूर्वाग्रह को समाप्त करना मुश्किल है क्योंकि एल्गोरिथम रणनीतियों में अक्सर कई मापदंड शामिल होते हैं। पैरामीटर इस मामले में प्रवेश / निकास मानदंड, लुक-बैक अवधि, औसत अवधि (यानी चलती औसत चिकनाई मापदंड) या अस्थिरता माप आवृत्ति हो सकती है। अनुकूलन पूर्वाग्रह को मापदंडों की संख्या को न्यूनतम रखने और प्रशिक्षण सेट में डेटा बिंदुओं की मात्रा को बढ़ाने से कम किया जा सकता है। वास्तव में, एक को बाद में भी सावधान रहना चाहिए क्योंकि पुराने प्रशिक्षण बिंदु एक पूर्व शासन (जैसे नियामक वातावरण) के अधीन हो सकते हैं और इसलिए आपकी वर्तमान रणनीति के लिए प्रासंगिक नहीं हो सकते हैं।

इस पूर्वाग्रह को कम करने में मदद करने के लिए एक विधि संवेदनशीलता विश्लेषण करना है। इसका मतलब है कि मापदंडों को क्रमिक रूप से बदलना और प्रदर्शन की सतह को प्लॉट करना। पैरामीटर विकल्पों के लिए ध्वनि, मौलिक तर्क, अन्य सभी कारकों को ध्यान में रखते हुए, एक चिकनी पैरामीटर सतह की ओर ले जाना चाहिए। यदि आपके पास एक बहुत ही उग्र प्रदर्शन सतह है, तो इसका मतलब अक्सर यह होता है कि एक पैरामीटर एक घटना को प्रतिबिंबित नहीं कर रहा है और परीक्षण डेटा का एक कलाकृत है। बहु-आयामी अनुकूलन एल्गोरिदम पर एक विशाल साहित्य है और यह अनुसंधान का एक अत्यधिक सक्रिय क्षेत्र है। मैं यहां इस पर नहीं रहूंगा, लेकिन जब आप एक शानदार बैकटेस्ट के साथ एक रणनीति पाते हैं तो इसे अपने दिमाग के पीछे रखें!

भविष्य के प्रति पूर्वाग्रह

यदि हम बैकटेस्ट को कालानुक्रमिक रूप से चला रहे हैं और हम समय बिंदु N तक पहुंचते हैं, तो अगर किसी भी बिंदु N + k के लिए डेटा शामिल किया जाता है, जहां k>0। बैकटेस्टिंग सिस्टम में बैकटेस्टिंग पूर्वाग्रह तब पेश किया जाता है जब भविष्य के डेटा को गलती से सिमुलेशन के उस बिंदु पर शामिल किया जाता है जहां यह डेटा वास्तव में उपलब्ध नहीं होता था। यहां तीन उदाहरण दिए गए हैं कि कैसे बैकटेस्टिंग पूर्वाग्रह पेश किया जा सकता हैः

  • तकनीकी बग्स - कोड में सरणी / वेक्टर में अक्सर पुनरावृत्ति या सूचकांक चर होते हैं। इन सूचकांक के गलत ऑफसेट से गैर-शून्य के लिए एन + के पर डेटा को शामिल करके आगे देखने के पूर्वाग्रह का कारण बन सकता है।
  • पैरामीटर गणना - आगे देखने के पक्षपात का एक और आम उदाहरण इष्टतम रणनीति मापदंडों की गणना करते समय होता है, जैसे कि दो समय श्रृंखलाओं के बीच रैखिक प्रतिगमन के साथ। यदि पूरे डेटा सेट (भविष्य के डेटा सहित) का उपयोग प्रतिगमन गुणांक की गणना करने के लिए किया जाता है, और इस प्रकार अनुकूलन उद्देश्यों के लिए ट्रेडिंग रणनीति पर पूर्ववत रूप से लागू होता है, तो भविष्य के डेटा को शामिल किया जा रहा है और आगे देखने का पक्षपात मौजूद है।
  • अधिकतम/न्यूनतम - कुछ ट्रेडिंग रणनीतियाँ किसी भी समय अवधि में चरम मूल्यों का उपयोग करती हैं, जैसे कि ओएचएलसी डेटा में उच्च या निम्न कीमतों को शामिल करना। हालांकि, चूंकि इन अधिकतम/न्यूनतम मूल्यों की गणना केवल एक समय अवधि के अंत में ही की जा सकती है, इसलिए यदि इन मूल्यों का उपयोग वर्तमान अवधि के दौरान किया जाता है तो आगे की ओर देखने का पूर्वाग्रह पेश किया जाता है। किसी भी ट्रेडिंग रणनीति में कम से कम एक अवधि में उच्च/निम्न मूल्यों के पीछे रहना हमेशा आवश्यक होता है।

अनुकूलन पूर्वाग्रह की तरह, इसकी शुरूआत से बचने के लिए अत्यंत सावधान रहना चाहिए। यह अक्सर मुख्य कारण है कि व्यापारिक रणनीतियाँ लाइव ट्रेडिंग में अपने बैकटेस्ट से काफी कम प्रदर्शन करती हैं।

जीवित रहने की पूर्वाग्रह

उत्तरजीविता पूर्वाग्रह एक विशेष रूप से खतरनाक घटना है और कुछ रणनीति प्रकारों के लिए महत्वपूर्ण रूप से फुलाए गए प्रदर्शन का कारण बन सकती है। यह तब होता है जब रणनीतियों का डेटासेट पर परीक्षण किया जाता है जिसमें पूर्व परिसंपत्तियों का पूरा ब्रह्मांड शामिल नहीं होता है जो समय के एक विशेष बिंदु पर चुने गए हो सकते हैं, लेकिन केवल उन पर विचार किया जाता है जो वर्तमान समय तक बचे हैं।

उदाहरण के लिए, 2001 के बाजार दुर्घटना से पहले और बाद में इक्विटी के यादृच्छिक चयन पर एक रणनीति का परीक्षण करने पर विचार करें। कुछ प्रौद्योगिकी स्टॉक दिवालिया हो गए, जबकि अन्य तैरने में कामयाब रहे और यहां तक कि समृद्ध भी हुए। यदि हमने इस रणनीति को केवल उन शेयरों तक सीमित कर दिया था जिन्होंने बाजार ड्रॉडाउन अवधि के माध्यम से इसे बनाया था, तो हम एक उत्तरजीविता पूर्वाग्रह पेश कर रहे होंगे क्योंकि उन्होंने पहले ही हमें अपनी सफलता का प्रदर्शन कर दिया है। वास्तव में, यह केवल आगे देखने के पूर्वाग्रह का एक और विशिष्ट मामला है, क्योंकि भविष्य की जानकारी को पिछले विश्लेषण में शामिल किया जा रहा है।

अपनी रणनीति बैकटेस्ट में उत्तरजीविता पूर्वाग्रह को कम करने के दो मुख्य तरीके हैंः

  • उत्तरजीविता पूर्वाग्रह मुक्त डेटासेट - इक्विटी डेटा के मामले में डेटासेट खरीदना संभव है जिसमें सूचीबद्ध संस्थाएं शामिल हैं, हालांकि वे सस्ते नहीं हैं और केवल संस्थागत फर्मों द्वारा उपयोग किए जाते हैं। विशेष रूप से, याहू फाइनेंस डेटा उत्तरजीविता पूर्वाग्रह मुक्त नहीं है, और यह आमतौर पर कई खुदरा एल्गो व्यापारियों द्वारा उपयोग किया जाता है। कोई भी ऐसे परिसंपत्ति वर्गों पर भी व्यापार कर सकता है जो उत्तरजीविता पूर्वाग्रह के लिए प्रवण नहीं हैं, जैसे कि कुछ वस्तुएं (और उनके भविष्य के डेरिवेटिव) ।
  • अधिक हालिया डेटा का उपयोग करें - इक्विटी के मामले में, एक अधिक हालिया डेटा सेट का उपयोग करने से यह संभावना कम हो जाती है कि चुने गए स्टॉक चयन को बचे हुए लोगों के लिए भारित किया जाता है, क्योंकि कम समय की अवधि में समग्र स्टॉक के डिलिस्ट होने की संभावना कम होती है। वर्तमान बिंदु से डेटा एकत्र करके एक व्यक्तिगत बचे हुए पूर्वाग्रह मुक्त डेटासेट बनाना भी शुरू किया जा सकता है। 3-4 वर्षों के बाद, आपके पास आगे की रणनीतियों का बैकटेस्ट करने के लिए इक्विटी डेटा का एक ठोस बचे हुए पूर्वाग्रह मुक्त सेट होगा।

अब हम कुछ मनोवैज्ञानिक घटनाओं पर विचार करेंगे जो आपके ट्रेडिंग प्रदर्शन को प्रभावित कर सकते हैं।

मनोवैज्ञानिक सहिष्णुता पूर्वाग्रह

यह विशेष घटना मात्रात्मक ट्रेडिंग के संदर्भ में अक्सर चर्चा नहीं की जाती है। हालांकि, अधिक विवेकाधीन ट्रेडिंग विधियों के संबंध में व्यापक रूप से चर्चा की जाती है। इसके विभिन्न नाम हैं, लेकिन मैंने इसे "मनोवैज्ञानिक सहिष्णुता पूर्वाग्रह" कहने का फैसला किया है क्योंकि यह समस्या के सार को पकड़ता है। जब 5 साल या उससे अधिक की अवधि में बैकटेस्ट बनाते हैं, तो एक ऊपर की ओर बढ़ते इक्विटी वक्र को देखना, समग्र वार्षिक रिटर्न, शार्प अनुपात और यहां तक कि ड्रॉडाउन विशेषताओं की गणना करना आसान होता है और परिणामों से संतुष्ट हो जाता है। उदाहरण के लिए, रणनीति में 25% का अधिकतम सापेक्ष ड्रॉडाउन और 4 महीने की अधिकतम ड्रॉडाउन अवधि हो सकती है। यह गति रणनीति के लिए असामान्य नहीं होगा। हालांकि, खुद को यह समझाना आसान है कि इस तरह के नुकसान की अवधि को सहन करना आसान है क्योंकि समग्र तस्वीर गुलाबी है। अभ्यास में, यह बहुत कठिन है!

यदि बैकटेस्ट में 25% या उससे अधिक के ऐतिहासिक ड्रॉडाउन होते हैं, तो सभी संभावना है कि आप लाइव ट्रेडिंग में इसी तरह के ड्रॉडाउन की अवधि देखेंगे। ड्रॉडाउन की ये अवधि मनोवैज्ञानिक रूप से सहन करना मुश्किल है। मैंने पहले हाथ से देखा है कि एक संस्थागत सेटिंग में एक विस्तारित ड्रॉडाउन कैसा हो सकता है, और यह सुखद नहीं है - भले ही बैकटेस्ट्स का सुझाव है कि ऐसी अवधि होगी। मैंने इसे bias कहा है क्योंकि अक्सर एक रणनीति जो अन्यथा सफल होगी, लंबी ड्रॉडाउन के समय व्यापार से रोक दी जाती है और इस प्रकार बैकटेस्ट की तुलना में कम प्रदर्शन का कारण बनती है। इस प्रकार, भले ही रणनीति प्रकृति में एल्गोरिथम है, मनोवैज्ञानिक कारक अभी भी लाभप्रदता पर भारी प्रभाव डाल सकते हैं। ले जाने के लिए यह सुनिश्चित करना है कि यदि आप बैकटॉप में एक निश्चित प्रतिशत और अवधि के ड्रॉडाउन देखते हैं, तो आपको उन्हें रहने की उम्मीद करनी चाहिए।

बैकटेस्टिंग के लिए सॉफ्टवेयर पैकेज

रणनीति बैकटेस्टिंग के लिए सॉफ्टवेयर परिदृश्य विशाल है। समाधान पूरी तरह से एकीकृत संस्थागत ग्रेड परिष्कृत सॉफ्टवेयर से लेकर सी ++, पायथन और आर जैसी प्रोग्रामिंग भाषाओं तक होते हैं जहां लगभग सब कुछ खरोंच से लिखा जाना चाहिए (या उपयुक्त प्लगइन्स प्राप्त करना चाहिए) । क्वांट ट्रेडर के रूप में हम अपने ट्रेडिंग प्रौद्योगिकी स्टैक बनाम हमारी विकास पद्धति की गति और विश्वसनीयता के बीच संतुलन में रुचि रखते हैं। यहां सॉफ्टवेयर विकल्प के लिए प्रमुख विचार दिए गए हैंः

  • प्रोग्रामिंग कौशल - वातावरण की पसंद काफी हद तक आपके सॉफ्टवेयर को प्रोग्राम करने की क्षमता पर निर्भर करेगी। मैं तर्क दूंगा कि कुल स्टैक पर नियंत्रण रखने से आपके दीर्घकालिक पीएंडएल पर अधिक प्रभाव पड़ेगा, जितना संभव हो उतना विक्रेता सॉफ्टवेयर को आउटसोर्स करने से। यह विक्रेता सॉफ्टवेयर में बाहरी बग या विशिष्टताओं के नकारात्मक जोखिम के कारण है जिन्हें आप ठीक करने में असमर्थ हैं, जो अन्यथा आसानी से ठीक हो सकते हैं यदि आपके पास अपने टेक स्टैक पर अधिक नियंत्रण था। आप एक ऐसा वातावरण भी चाहते हैं जो उत्पादकता, पुस्तकालय उपलब्धता और निष्पादन की गति के बीच सही संतुलन को प्राप्त करता है। मैं नीचे अपनी व्यक्तिगत सिफारिश करता हूं।
  • निष्पादन क्षमता / ब्रोकर इंटरैक्शन - कुछ बैकटेस्टिंग सॉफ्टवेयर, जैसे ट्रेडस्ट्रेशन, सीधे ब्रोकर के साथ संबंध रखते हैं। मैं इस दृष्टिकोण का प्रशंसक नहीं हूं क्योंकि लेनदेन लागत को कम करना अक्सर एक उच्च शार्प अनुपात प्राप्त करने का एक बड़ा घटक होता है। यदि आप किसी विशेष ब्रोकर से बंधे हैं (और ट्रेडस्ट्रेशन आपको ऐसा करने के लिए मजबूर करता है), तो यदि आवश्यकता होती है तो आपको नए सॉफ़्टवेयर (या नए ब्रोकर) पर संक्रमण करने में अधिक कठिनाई होगी। इंटरैक्टिव ब्रोकर एक एपीआई प्रदान करते हैं जो मजबूत है, हालांकि थोड़ा अस्पष्ट इंटरफ़ेस के साथ।
  • अनुकूलन - MATLAB या पायथन जैसे वातावरण आपको एल्गो रणनीतियों के निर्माण में बहुत अधिक लचीलापन प्रदान करते हैं क्योंकि वे लगभग किसी भी गणितीय ऑपरेशन के लिए शानदार पुस्तकालय प्रदान करते हैं, लेकिन आवश्यक होने पर व्यापक अनुकूलन की अनुमति देते हैं।
  • रणनीति जटिलता - कुछ सॉफ्टवेयर भारी संख्या क्रंचिंग या गणितीय जटिलता के लिए नहीं है। एक्सेल एक ऐसा सॉफ्टवेयर है। जबकि यह सरल रणनीतियों के लिए अच्छा है, यह वास्तव में कई संपत्ति या अधिक जटिल एल्गोरिदम का सामना नहीं कर सकता है, गति में।
  • पूर्वाग्रह को कम करना - क्या सॉफ्टवेयर या डेटा का एक विशेष टुकड़ा खुद को व्यापार पूर्वाग्रहों के लिए अधिक उपयुक्त बनाता है? आपको यह सुनिश्चित करने की आवश्यकता है कि यदि आप सभी कार्यक्षमताओं को स्वयं बनाना चाहते हैं, तो आप बग नहीं पेश करते हैं जो पूर्वाग्रहों का कारण बन सकते हैं।
  • विकास की गति - किसी को बैकटेस्ट इंजन को लागू करने में महीनों और महीनों का समय नहीं बिताना चाहिए। प्रोटोटाइपिंग में केवल कुछ सप्ताह लगने चाहिए। सुनिश्चित करें कि आपका सॉफ्टवेयर आपकी प्रगति को किसी भी हद तक बाधित नहीं कर रहा है, बस निष्पादन गति के कुछ अतिरिक्त प्रतिशत अंक पकड़ने के लिए। सी ++ यहाँ छोटे में हाथी है!
  • निष्पादन की गति - यदि आपकी रणनीति निष्पादन समय पर पूरी तरह से निर्भर है (जैसे एचएफटी / यूएचएफटी में) तो सी या सी ++ जैसी भाषा आवश्यक होगी। हालांकि, आप इन डोमेन के लिए लिनक्स कर्नेल अनुकूलन और एफपीजीए उपयोग पर सीमांकन करेंगे, जो इस लेख के दायरे से बाहर है!
  • लागत - कई सॉफ्टवेयर वातावरण जिनके साथ आप एल्गोरिथम ट्रेडिंग रणनीतियों को प्रोग्राम कर सकते हैं वे पूरी तरह से मुफ्त और ओपन सोर्स हैं। वास्तव में, कई हेज फंड अपने पूरे एल्गो ट्रेडिंग स्टैक के लिए ओपन सोर्स सॉफ्टवेयर का उपयोग करते हैं। इसके अलावा, एक्सेल और मैटलैब दोनों अपेक्षाकृत सस्ते हैं और प्रत्येक के लिए मुफ्त विकल्प भी हैं।

अब जब हमने उन मानदंडों को सूचीबद्ध किया है जिनके साथ हमें अपने सॉफ्टवेयर बुनियादी ढांचे का चयन करने की आवश्यकता है, मैं कुछ अधिक लोकप्रिय पैकेजों के माध्यम से चलना चाहता हूं और वे कैसे तुलना करते हैंः

नोट: मैं केवल सॉफ्टवेयर को शामिल करने जा रहा हूं जो अधिकांश खुदरा व्यवसायियों और सॉफ्टवेयर डेवलपर्स के लिए उपलब्ध है, क्योंकि यह साइट का पाठक है। जबकि अन्य सॉफ्टवेयर उपलब्ध हैं जैसे कि अधिक संस्थागत ग्रेड उपकरण, मुझे लगता है कि ये खुदरा सेटिंग में प्रभावी ढंग से उपयोग करने के लिए बहुत महंगे हैं और मेरे पास व्यक्तिगत रूप से कोई अनुभव नहीं है।

बैकटेस्टिंग सॉफ्टवेयर तुलना

एमएस एक्सेल

विवरण: WYSIWYG (what-you-see-is-what-you-get) स्प्रेडशीट सॉफ्टवेयर। वित्तीय उद्योग में बेहद व्यापक है। डेटा और एल्गोरिथ्म कसकर जुड़े हुए हैं।

निष्पादन: हाँ, एक्सेल को अधिकांश ब्रोकरेज से जोड़ा जा सकता है।

अनुकूलन: वीबीए मैक्रो छिपाने के खर्च पर अधिक उन्नत कार्यक्षमता की अनुमति देते हैं।

रणनीतिक जटिलताः अधिक उन्नत सांख्यिकीय उपकरण लागू करना कठिन है क्योंकि कई सैकड़ों संपत्ति वाली रणनीतियाँ हैं।

पूर्वाग्रह को कम करना: सेल हाइलाइटिंग कार्यक्षमता के माध्यम से आगे देखने वाले पूर्वाग्रह का पता लगाना आसान है (कोई वीबीए नहीं होने पर) ।

विकास की गति: बुनियादी रणनीतियों को लागू करने के लिए त्वरित।

निष्पादन गति: धीमी निष्पादन गति - केवल कम आवृत्ति रणनीतियों के लिए उपयुक्त है।

लागत: सस्ती या मुफ्त (लाइसेंस के आधार पर) ।

विकल्पः ओपनऑफिस

MATLAB

विवरण: प्रोग्रामिंग वातावरण मूल रूप से कम्प्यूटेशनल गणित, भौतिकी और इंजीनियरिंग के लिए डिज़ाइन किया गया है। वेक्टर ऑपरेशन और संख्यात्मक रैखिक बीजगणित से जुड़े लोगों के लिए बहुत उपयुक्त है। क्वांट ट्रेडिंग के लिए प्लगइन्स की एक विस्तृत श्रृंखला प्रदान करता है। मात्रात्मक हेज फंड में व्यापक उपयोग में।

निष्पादन: कोई मूल निष्पादन क्षमता नहीं, MATLAB को एक अलग निष्पादन प्रणाली की आवश्यकता होती है।

अनुकूलन: कम्प्यूटेशनल गणित के लगभग सभी क्षेत्रों के लिए सामुदायिक प्लगइन्स की विशाल सरणी।

रणनीतिक जटिलता: कई उन्नत सांख्यिकीय विधियां पहले से उपलब्ध और अच्छी तरह से परीक्षण की गई हैं।

पूर्वाग्रह को कम करना: पूर्वाग्रह का पता लगाना कठिन है, व्यापक परीक्षण की आवश्यकता है।

विकास की गति: छोटी स्क्रिप्ट आसानी से परिष्कृत बैकटेस्ट बना सकती हैं।

निष्पादन गति: एक वेक्टर/समानांतर एल्गोरिथ्म मानकर, मैटलाब अत्यधिक अनुकूलित है। पारंपरिक पुनरावृत्त लूप के लिए खराब।

लागतः एक लाइसेंस के लिए ~ 1,000 अमरीकी डालर।

विकल्प: ऑक्टेव, साइलैब

पायथन

विवरण: विकास की गति के लिए डिज़ाइन की गई उच्च स्तरीय भाषा। लगभग किसी भी प्रोग्रामेटिक कार्य के लिए पुस्तकालयों की विस्तृत श्रृंखला। हेज फंड और निवेश बैंक समुदाय में व्यापक स्वीकृति प्राप्त करना। निष्पादन गति के लिए सी / सी ++ के रूप में काफी तेज़ नहीं।

निष्पादनः पायथन प्लगइन्स बड़े ब्रोकरों के लिए मौजूद हैं, जैसे इंटरएक्टिव ब्रोकर। इसलिए बैकटेस्ट और निष्पादन प्रणाली सभी एक ही टेक स्टैक का हिस्सा हो सकती है।

अनुकूलन: पायथन में एक बहुत ही स्वस्थ विकास समुदाय है और यह एक परिपक्व भाषा है। NumPy/SciPy क्वांट ट्रेडिंग के लिए प्रासंगिक तेज़ वैज्ञानिक कंप्यूटिंग और सांख्यिकीय विश्लेषण उपकरण प्रदान करता है।

रणनीति जटिलताः मुख्य एल्गोरिदम के लिए कई प्लगइन्स मौजूद हैं, लेकिन MATLAB के लिए जितना बड़ा क्वांटम समुदाय नहीं है।

Bias Minimisation: किसी भी उच्च स्तरीय भाषा के लिए समान पूर्वाग्रह कम करने की समस्याएं मौजूद हैं। परीक्षण के बारे में बेहद सावधान रहने की आवश्यकता है।

विकास की गति: पायथन का मुख्य लाभ विकास की गति है, जिसमें परीक्षण क्षमताओं में मजबूत अंतर्निहित है।

निष्पादन गति: C++ के समान तेज़ नहीं है, लेकिन वैज्ञानिक कंप्यूटिंग घटकों को अनुकूलित किया गया है और पायथन कुछ प्लगइन्स के साथ देशी C कोड से बात कर सकता है।

लागत: निःशुल्क/खुला स्रोत

विकल्पः रूबी, एरलैंग, हैस्केल

आर

विवरण: उन्नत सांख्यिकीय विधियों और समय श्रृंखला विश्लेषण के लिए डिज़ाइन किया गया वातावरण। विशिष्ट सांख्यिकीय, अर्थमिति और देशी ग्राफिंग टूलसेट की विस्तृत श्रृंखला। बड़ा डेवलपर समुदाय।

निष्पादन: आर में कुछ ब्रोकरों के प्लगइन्स हैं, विशेष रूप से इंटरएक्टिव ब्रोकर। इस प्रकार एक एंड-टू-एंड सिस्टम पूरी तरह से आर में लिखा जा सकता है।

अनुकूलन: आर को किसी भी पैकेज के साथ अनुकूलित किया जा सकता है, लेकिन इसकी ताकत सांख्यिकीय/इकोनोमेट्रिक डोमेन में निहित है।

रणनीति जटिलताः उपलब्ध प्लगइन्स के कारण अर्थमाप, सांख्यिकीय या मशीन-लर्निंग रणनीतियों को निष्पादित करने में अधिकतर उपयोगी।

पूर्वाग्रह को कम करना: किसी भी उच्च स्तरीय भाषा जैसे पायथन या सी++ के लिए पूर्वाग्रह की संभावना का समान स्तर। इस प्रकार परीक्षण किया जाना चाहिए।

विकास की गति: सांख्यिकीय तरीकों पर आधारित रणनीतियों को लिखने के लिए आर तेज है।

निष्पादन गतिः R C++ से धीमा है, लेकिन वेक्टर ऑपरेशन के लिए अपेक्षाकृत अनुकूलित है (जैसे कि MATLAB के साथ) ।

लागत: निःशुल्क/खुला स्रोत

विकल्प: एसपीएसएस, स्टेटा

सी++

विवरण: परिपक्व, उच्च स्तरीय भाषा निष्पादन की गति के लिए डिज़ाइन की गई है। मात्रात्मक वित्त और संख्यात्मक पुस्तकालयों की विस्तृत श्रृंखला। डिबग करने के लिए कठिन और अक्सर पायथन या मैटलाब की तुलना में लागू करने में अधिक समय लगता है। खरीद और बिक्री दोनों पक्षों में बेहद प्रचलित है।

निष्पादनः अधिकांश ब्रोकरेज एपीआई सी++ और जावा में लिखे गए हैं। इस प्रकार कई प्लगइन्स मौजूद हैं।

अनुकूलन: सी/सी++ अंतर्निहित मेमोरी तक सीधी पहुंच की अनुमति देता है, इसलिए अति-उच्च आवृत्ति रणनीतियों को लागू किया जा सकता है।

रणनीति जटिलताः सी++ एसटीएल अनुकूलित एल्गोरिदम की एक विस्तृत श्रृंखला प्रदान करता है। लगभग किसी भी विशेष गणितीय एल्गोरिदम में वेब पर एक मुफ्त, ओपन-सोर्स सी/सी++ कार्यान्वयन है।

Bias Minimisation: आगे देखने वाले पूर्वाग्रह को खत्म करना मुश्किल हो सकता है, लेकिन अन्य उच्च स्तरीय भाषाओं की तुलना में कठिन नहीं। अच्छे डिबगिंग उपकरण, लेकिन अंतर्निहित स्मृति से निपटने में सावधान रहना चाहिए।

विकास की गति: समान एल्गोरिथ्म के लिए पायथन या मैटलैब की तुलना में सी++ काफी बहुमुखी है। अधिक लाइन-ऑफ-कोड (एलओसी) अक्सर बग की अधिक संभावना की ओर जाता है।

निष्पादन गति: सी/सी++ में निष्पादन की गति बेहद तेज है और इसे विशिष्ट कम्प्यूटेशनल आर्किटेक्चर के लिए अच्छी तरह से अनुकूलित किया जा सकता है। इसका उपयोग करने का यह मुख्य कारण है।

लागत: विभिन्न संकलकः लिनक्स/जीसीसी मुफ़्त है, एमएस विजुअल स्टूडियो के अलग-अलग लाइसेंस हैं।

विकल्पः सी#, जावा, स्काला

विभिन्न रणनीतियों के लिए अलग-अलग सॉफ्टवेयर पैकेजों की आवश्यकता होगी। एचएफटी और यूएचएफटी रणनीतियों को सी / सी ++ में लिखा जाएगा (इन दिनों वे अक्सर जीपीयू और एफपीजीए पर किए जाते हैं), जबकि कम आवृत्ति वाले दिशात्मक इक्विटी रणनीतियों को ट्रेडस्टेशन में लागू करना आसान है, क्योंकि सॉफ्टवेयर / ब्रोकरेज की प्रकृति में सभी में।

मेरी व्यक्तिगत प्राथमिकता पायथन के लिए है क्योंकि यह मेरी आवश्यकताओं और रणनीतियों के लिए अनुकूलन, विकास की गति, परीक्षण क्षमता और निष्पादन गति की सही डिग्री प्रदान करता है। यदि मुझे कुछ भी तेज़ की आवश्यकता है, तो मैं अपने पायथन कार्यक्रमों से सीधे सी ++ में ड्रॉप इन कर सकता हूं। कई क्वांट ट्रेडरों द्वारा पसंद की जाने वाली एक विधि पायथन में अपनी रणनीतियों का प्रोटोटाइप करना है और फिर धीमी निष्पादन अनुभागों को सी ++ में एक पुनरावृत्ति तरीके से परिवर्तित करना है। अंततः पूरा एल्गो सी ++ में लिखा जाता है और इसे व्यापार के लिए अकेला छोड़ दिया जा सकता है!

बैकटेस्टिंग पर अगले कुछ लेखों में हम एक एल्गोरिथम ट्रेडिंग बैकटेस्टिंग प्रणाली के कार्यान्वयन के आसपास कुछ विशेष मुद्दों पर एक नज़र डालेंगे, साथ ही साथ ट्रेडिंग एक्सचेंजों के प्रभावों को कैसे शामिल किया जाए। हम रणनीति प्रदर्शन माप पर चर्चा करेंगे और अंत में एक उदाहरण रणनीति के साथ निष्कर्ष निकालेंगे।


अधिक