यह लेख मात्रात्मक व्यापार पर श्रृंखला को जारी रखता है, जो शुरुआती गाइड और रणनीति पहचान के साथ शुरू हुआ था। ये दोनों लंबे, अधिक शामिल लेख बहुत लोकप्रिय रहे हैं इसलिए मैं इस नस में जारी रखूंगा और रणनीति बैकटेस्टिंग के विषय पर विस्तार प्रदान करूंगा।
एल्गोरिथमिक बैकटेस्टिंग के लिए मनोविज्ञान, गणित, सांख्यिकी, सॉफ्टवेयर विकास और बाजार/विनिमय सूक्ष्म संरचना सहित कई क्षेत्रों के ज्ञान की आवश्यकता होती है। मैं उन सभी विषयों को एक लेख में कवर करने की उम्मीद नहीं कर सकता, इसलिए मैं उन्हें दो या तीन छोटे टुकड़ों में विभाजित करने जा रहा हूं। हम इस खंड में क्या चर्चा करेंगे? मैं बैकटेस्टिंग की परिभाषा करके शुरू करूंगा और फिर मैं इसके संचालन की मूल बातें बताऊंगा। फिर मैं शुरुआती गाइड टू क्वांटिटेटिव ट्रेडिंग में हमने जिन पूर्वाग्रहों को छुआ है, उन पर प्रकाश डालूंगा। आगे मैं विभिन्न उपलब्ध बैकटेस्टिंग सॉफ्टवेयर विकल्पों की तुलना प्रस्तुत करूंगा।
बाद के लेखों में हम रणनीति कार्यान्वयन के विवरणों को देखेंगे जो अक्सर शायद ही कभी उल्लेख किए जाते हैं या अनदेखा किए जाते हैं। हम यह भी विचार करेंगे कि ट्रेडिंग एक्सचेंज की विशिष्टताओं को शामिल करके बैकटेस्टिंग प्रक्रिया को अधिक यथार्थवादी कैसे बनाया जाए। फिर हम लेनदेन लागतों पर चर्चा करेंगे और बैकटेस्ट सेटिंग में उन्हें सही ढंग से कैसे मॉडल किया जाए। हम अपने बैकटेस्ट के प्रदर्शन पर चर्चा के साथ समाप्त करेंगे और अंत में एक सामान्य मात्रा रणनीति का एक उदाहरण प्रदान करेंगे, जिसे एक औसत-रिवर्टिंग जोड़े व्यापार के रूप में जाना जाता है।
चलिए शुरू करते हैं कि बैकटेस्टिंग क्या है और हमें इसे अपने एल्गोरिथम ट्रेडिंग में क्यों करना चाहिए।
एल्गोरिथम ट्रेडिंग अन्य प्रकार के निवेश वर्गों से अलग है क्योंकि हम अतीत के प्रदर्शन से भविष्य के प्रदर्शन के बारे में अपेक्षाओं को अधिक विश्वसनीय रूप से प्रदान कर सकते हैं, क्योंकि प्रचुर मात्रा में डेटा उपलब्ध है। जिस प्रक्रिया से यह किया जाता है उसे बैकटेस्टिंग के रूप में जाना जाता है।
सरल शब्दों में, बैकटेस्टिंग आपके विशेष रणनीति एल्गोरिथ्म को ऐतिहासिक वित्तीय डेटा की धारा के संपर्क में लाकर किया जाता है, जिससे ट्रेडिंग सिग्नल का एक सेट होता है। प्रत्येक व्यापार (जिसका हम यहाँ दो संकेतों की
एल्गोरिथम रणनीति के बैकटेस्ट के लिए मुख्य कारण क्या हैं?
बैकटेस्टिंग एल्गोरिदमिक ट्रेडिंग के लिए कई फायदे प्रदान करता है। हालांकि, किसी रणनीति को सीधे तौर पर बैकटेस्ट करना हमेशा संभव नहीं होता है। सामान्य तौर पर, रणनीति की आवृत्ति बढ़ने के साथ, बाजार और एक्सचेंजों के सूक्ष्म संरचना प्रभावों को सही ढंग से मॉडल करना मुश्किल हो जाता है। इससे कम विश्वसनीय बैकटेस्ट होते हैं और इस प्रकार चुनी गई रणनीति का अधिक मुश्किल मूल्यांकन होता है। यह एक विशेष समस्या है जहां निष्पादन प्रणाली रणनीति प्रदर्शन की कुंजी है, जैसे कि अल्ट्रा-हाई-फ्रीक्वेंसी एल्गोरिदम।
दुर्भाग्य से, बैकटेस्टिंग में सभी प्रकार के पूर्वाग्रह होते हैं। हमने इन मुद्दों में से कुछ को पिछले लेखों में छुआ है, लेकिन अब हम उन पर गहराई से चर्चा करेंगे।
कई पूर्वाग्रह हैं जो एक बैकटेस्ट की गई रणनीति के प्रदर्शन को प्रभावित कर सकते हैं। दुर्भाग्य से, इन पूर्वाग्रहों में प्रदर्शन को कम करने के बजाय प्रदर्शन को फुला देने की प्रवृत्ति होती है। इस प्रकार आपको हमेशा बैकटेस्ट को रणनीति के वास्तविक प्रदर्शन पर एक आदर्श ऊपरी सीमा माननी चाहिए। एल्गोरिदमिक ट्रेडिंग से पूर्वाग्रहों को समाप्त करना लगभग असंभव है इसलिए हमारे एल्गोरिदमिक रणनीतियों के बारे में सूचित निर्णय लेने के लिए उन्हें यथासंभव कम करना हमारा काम है।
चार प्रमुख पूर्वाग्रह हैं जिन पर मैं चर्चा करना चाहूंगा: अनुकूलन पूर्वाग्रह, आगे देखने का पूर्वाग्रह, उत्तरजीविता पूर्वाग्रह और मनोवैज्ञानिक सहिष्णुता पूर्वाग्रह।
यह संभवतः सभी बैकटेस्ट पूर्वाग्रहों में सबसे घातक है। इसमें बैकटेस्ट डेटा सेट पर रणनीति प्रदर्शन बहुत आकर्षक होने तक अतिरिक्त ट्रेडिंग मापदंडों को समायोजित या पेश करना शामिल है। हालांकि, एक बार लाइव होने के बाद रणनीति का प्रदर्शन काफी अलग हो सकता है। इस पूर्वाग्रह के लिए एक और नाम है
अनुकूलन पूर्वाग्रह को समाप्त करना मुश्किल है क्योंकि एल्गोरिथम रणनीतियों में अक्सर कई मापदंड शामिल होते हैं।
इस पूर्वाग्रह को कम करने में मदद करने के लिए एक विधि संवेदनशीलता विश्लेषण करना है। इसका मतलब है कि मापदंडों को क्रमिक रूप से बदलना और प्रदर्शन की
यदि हम बैकटेस्ट को कालानुक्रमिक रूप से चला रहे हैं और हम समय बिंदु N तक पहुंचते हैं, तो अगर किसी भी बिंदु N + k के लिए डेटा शामिल किया जाता है, जहां k>0। बैकटेस्टिंग सिस्टम में बैकटेस्टिंग पूर्वाग्रह तब पेश किया जाता है जब भविष्य के डेटा को गलती से सिमुलेशन के उस बिंदु पर शामिल किया जाता है जहां यह डेटा वास्तव में उपलब्ध नहीं होता था। यहां तीन उदाहरण दिए गए हैं कि कैसे बैकटेस्टिंग पूर्वाग्रह पेश किया जा सकता हैः
अनुकूलन पूर्वाग्रह की तरह, इसकी शुरूआत से बचने के लिए अत्यंत सावधान रहना चाहिए। यह अक्सर मुख्य कारण है कि व्यापारिक रणनीतियाँ
उत्तरजीविता पूर्वाग्रह एक विशेष रूप से खतरनाक घटना है और कुछ रणनीति प्रकारों के लिए महत्वपूर्ण रूप से फुलाए गए प्रदर्शन का कारण बन सकती है। यह तब होता है जब रणनीतियों का डेटासेट पर परीक्षण किया जाता है जिसमें पूर्व परिसंपत्तियों का पूरा ब्रह्मांड शामिल नहीं होता है जो समय के एक विशेष बिंदु पर चुने गए हो सकते हैं, लेकिन केवल उन पर विचार किया जाता है जो वर्तमान समय तक
उदाहरण के लिए, 2001 के बाजार दुर्घटना से पहले और बाद में इक्विटी के यादृच्छिक चयन पर एक रणनीति का परीक्षण करने पर विचार करें। कुछ प्रौद्योगिकी स्टॉक दिवालिया हो गए, जबकि अन्य तैरने में कामयाब रहे और यहां तक कि समृद्ध भी हुए। यदि हमने इस रणनीति को केवल उन शेयरों तक सीमित कर दिया था जिन्होंने बाजार ड्रॉडाउन अवधि के माध्यम से इसे बनाया था, तो हम एक उत्तरजीविता पूर्वाग्रह पेश कर रहे होंगे क्योंकि उन्होंने पहले ही हमें अपनी सफलता का प्रदर्शन कर दिया है। वास्तव में, यह केवल आगे देखने के पूर्वाग्रह का एक और विशिष्ट मामला है, क्योंकि भविष्य की जानकारी को पिछले विश्लेषण में शामिल किया जा रहा है।
अपनी रणनीति बैकटेस्ट में उत्तरजीविता पूर्वाग्रह को कम करने के दो मुख्य तरीके हैंः
अब हम कुछ मनोवैज्ञानिक घटनाओं पर विचार करेंगे जो आपके ट्रेडिंग प्रदर्शन को प्रभावित कर सकते हैं।
यह विशेष घटना मात्रात्मक ट्रेडिंग के संदर्भ में अक्सर चर्चा नहीं की जाती है। हालांकि, अधिक विवेकाधीन ट्रेडिंग विधियों के संबंध में व्यापक रूप से चर्चा की जाती है। इसके विभिन्न नाम हैं, लेकिन मैंने इसे "मनोवैज्ञानिक सहिष्णुता पूर्वाग्रह" कहने का फैसला किया है क्योंकि यह समस्या के सार को पकड़ता है। जब 5 साल या उससे अधिक की अवधि में बैकटेस्ट बनाते हैं, तो एक ऊपर की ओर बढ़ते इक्विटी वक्र को देखना, समग्र वार्षिक रिटर्न, शार्प अनुपात और यहां तक कि ड्रॉडाउन विशेषताओं की गणना करना आसान होता है और परिणामों से संतुष्ट हो जाता है। उदाहरण के लिए, रणनीति में 25% का अधिकतम सापेक्ष ड्रॉडाउन और 4 महीने की अधिकतम ड्रॉडाउन अवधि हो सकती है। यह गति रणनीति के लिए असामान्य नहीं होगा। हालांकि, खुद को यह समझाना आसान है कि इस तरह के नुकसान की अवधि को सहन करना आसान है क्योंकि समग्र तस्वीर गुलाबी है। अभ्यास में, यह बहुत कठिन है!
यदि बैकटेस्ट में 25% या उससे अधिक के ऐतिहासिक ड्रॉडाउन होते हैं, तो सभी संभावना है कि आप लाइव ट्रेडिंग में इसी तरह के ड्रॉडाउन की अवधि देखेंगे। ड्रॉडाउन की ये अवधि मनोवैज्ञानिक रूप से सहन करना मुश्किल है। मैंने पहले हाथ से देखा है कि एक संस्थागत सेटिंग में एक विस्तारित ड्रॉडाउन कैसा हो सकता है, और यह सुखद नहीं है - भले ही बैकटेस्ट्स का सुझाव है कि ऐसी अवधि होगी। मैंने इसे
रणनीति बैकटेस्टिंग के लिए सॉफ्टवेयर परिदृश्य विशाल है। समाधान पूरी तरह से एकीकृत संस्थागत ग्रेड परिष्कृत सॉफ्टवेयर से लेकर सी ++, पायथन और आर जैसी प्रोग्रामिंग भाषाओं तक होते हैं जहां लगभग सब कुछ खरोंच से लिखा जाना चाहिए (या उपयुक्त
अब जब हमने उन मानदंडों को सूचीबद्ध किया है जिनके साथ हमें अपने सॉफ्टवेयर बुनियादी ढांचे का चयन करने की आवश्यकता है, मैं कुछ अधिक लोकप्रिय पैकेजों के माध्यम से चलना चाहता हूं और वे कैसे तुलना करते हैंः
नोट: मैं केवल सॉफ्टवेयर को शामिल करने जा रहा हूं जो अधिकांश खुदरा व्यवसायियों और सॉफ्टवेयर डेवलपर्स के लिए उपलब्ध है, क्योंकि यह साइट का पाठक है। जबकि अन्य सॉफ्टवेयर उपलब्ध हैं जैसे कि अधिक संस्थागत ग्रेड उपकरण, मुझे लगता है कि ये खुदरा सेटिंग में प्रभावी ढंग से उपयोग करने के लिए बहुत महंगे हैं और मेरे पास व्यक्तिगत रूप से कोई अनुभव नहीं है।
बैकटेस्टिंग सॉफ्टवेयर तुलना
विवरण: WYSIWYG (what-you-see-is-what-you-get) स्प्रेडशीट सॉफ्टवेयर। वित्तीय उद्योग में बेहद व्यापक है। डेटा और एल्गोरिथ्म कसकर जुड़े हुए हैं।
निष्पादन: हाँ, एक्सेल को अधिकांश ब्रोकरेज से जोड़ा जा सकता है।
अनुकूलन: वीबीए मैक्रो छिपाने के खर्च पर अधिक उन्नत कार्यक्षमता की अनुमति देते हैं।
रणनीतिक जटिलताः अधिक उन्नत सांख्यिकीय उपकरण लागू करना कठिन है क्योंकि कई सैकड़ों संपत्ति वाली रणनीतियाँ हैं।
पूर्वाग्रह को कम करना: सेल हाइलाइटिंग कार्यक्षमता के माध्यम से आगे देखने वाले पूर्वाग्रह का पता लगाना आसान है (कोई वीबीए नहीं होने पर) ।
विकास की गति: बुनियादी रणनीतियों को लागू करने के लिए त्वरित।
निष्पादन गति: धीमी निष्पादन गति - केवल कम आवृत्ति रणनीतियों के लिए उपयुक्त है।
लागत: सस्ती या मुफ्त (लाइसेंस के आधार पर) ।
विकल्पः ओपनऑफिस
विवरण: प्रोग्रामिंग वातावरण मूल रूप से कम्प्यूटेशनल गणित, भौतिकी और इंजीनियरिंग के लिए डिज़ाइन किया गया है। वेक्टर ऑपरेशन और संख्यात्मक रैखिक बीजगणित से जुड़े लोगों के लिए बहुत उपयुक्त है। क्वांट ट्रेडिंग के लिए प्लगइन्स की एक विस्तृत श्रृंखला प्रदान करता है। मात्रात्मक हेज फंड में व्यापक उपयोग में।
निष्पादन: कोई मूल निष्पादन क्षमता नहीं, MATLAB को एक अलग निष्पादन प्रणाली की आवश्यकता होती है।
अनुकूलन: कम्प्यूटेशनल गणित के लगभग सभी क्षेत्रों के लिए सामुदायिक प्लगइन्स की विशाल सरणी।
रणनीतिक जटिलता: कई उन्नत सांख्यिकीय विधियां पहले से उपलब्ध और अच्छी तरह से परीक्षण की गई हैं।
पूर्वाग्रह को कम करना: पूर्वाग्रह का पता लगाना कठिन है, व्यापक परीक्षण की आवश्यकता है।
विकास की गति: छोटी स्क्रिप्ट आसानी से परिष्कृत बैकटेस्ट बना सकती हैं।
निष्पादन गति: एक वेक्टर/समानांतर एल्गोरिथ्म मानकर, मैटलाब अत्यधिक अनुकूलित है। पारंपरिक पुनरावृत्त लूप के लिए खराब।
लागतः एक लाइसेंस के लिए ~ 1,000 अमरीकी डालर।
विकल्प: ऑक्टेव, साइलैब
विवरण: विकास की गति के लिए डिज़ाइन की गई उच्च स्तरीय भाषा। लगभग किसी भी प्रोग्रामेटिक कार्य के लिए पुस्तकालयों की विस्तृत श्रृंखला। हेज फंड और निवेश बैंक समुदाय में व्यापक स्वीकृति प्राप्त करना। निष्पादन गति के लिए सी / सी ++ के रूप में काफी तेज़ नहीं।
निष्पादनः पायथन प्लगइन्स बड़े ब्रोकरों के लिए मौजूद हैं, जैसे इंटरएक्टिव ब्रोकर। इसलिए बैकटेस्ट और निष्पादन प्रणाली सभी एक ही
अनुकूलन: पायथन में एक बहुत ही स्वस्थ विकास समुदाय है और यह एक परिपक्व भाषा है। NumPy/SciPy क्वांट ट्रेडिंग के लिए प्रासंगिक तेज़ वैज्ञानिक कंप्यूटिंग और सांख्यिकीय विश्लेषण उपकरण प्रदान करता है।
रणनीति जटिलताः मुख्य एल्गोरिदम के लिए कई प्लगइन्स मौजूद हैं, लेकिन MATLAB के लिए जितना बड़ा क्वांटम समुदाय नहीं है।
Bias Minimisation: किसी भी उच्च स्तरीय भाषा के लिए समान पूर्वाग्रह कम करने की समस्याएं मौजूद हैं। परीक्षण के बारे में बेहद सावधान रहने की आवश्यकता है।
विकास की गति: पायथन का मुख्य लाभ विकास की गति है, जिसमें परीक्षण क्षमताओं में मजबूत अंतर्निहित है।
निष्पादन गति: C++ के समान तेज़ नहीं है, लेकिन वैज्ञानिक कंप्यूटिंग घटकों को अनुकूलित किया गया है और पायथन कुछ प्लगइन्स के साथ देशी C कोड से बात कर सकता है।
लागत: निःशुल्क/खुला स्रोत
विकल्पः रूबी, एरलैंग, हैस्केल
विवरण: उन्नत सांख्यिकीय विधियों और समय श्रृंखला विश्लेषण के लिए डिज़ाइन किया गया वातावरण। विशिष्ट सांख्यिकीय, अर्थमिति और देशी ग्राफिंग टूलसेट की विस्तृत श्रृंखला। बड़ा डेवलपर समुदाय।
निष्पादन: आर में कुछ ब्रोकरों के प्लगइन्स हैं, विशेष रूप से इंटरएक्टिव ब्रोकर। इस प्रकार एक एंड-टू-एंड सिस्टम पूरी तरह से आर में लिखा जा सकता है।
अनुकूलन: आर को किसी भी पैकेज के साथ अनुकूलित किया जा सकता है, लेकिन इसकी ताकत सांख्यिकीय/इकोनोमेट्रिक डोमेन में निहित है।
रणनीति जटिलताः उपलब्ध प्लगइन्स के कारण अर्थमाप, सांख्यिकीय या मशीन-लर्निंग रणनीतियों को निष्पादित करने में अधिकतर उपयोगी।
पूर्वाग्रह को कम करना: किसी भी उच्च स्तरीय भाषा जैसे पायथन या सी++ के लिए पूर्वाग्रह की संभावना का समान स्तर। इस प्रकार परीक्षण किया जाना चाहिए।
विकास की गति: सांख्यिकीय तरीकों पर आधारित रणनीतियों को लिखने के लिए आर तेज है।
निष्पादन गतिः R C++ से धीमा है, लेकिन वेक्टर ऑपरेशन के लिए अपेक्षाकृत अनुकूलित है (जैसे कि MATLAB के साथ) ।
लागत: निःशुल्क/खुला स्रोत
विकल्प: एसपीएसएस, स्टेटा
विवरण: परिपक्व, उच्च स्तरीय भाषा निष्पादन की गति के लिए डिज़ाइन की गई है। मात्रात्मक वित्त और संख्यात्मक पुस्तकालयों की विस्तृत श्रृंखला। डिबग करने के लिए कठिन और अक्सर पायथन या मैटलाब की तुलना में लागू करने में अधिक समय लगता है। खरीद और बिक्री दोनों पक्षों में बेहद प्रचलित है।
निष्पादनः अधिकांश ब्रोकरेज एपीआई सी++ और जावा में लिखे गए हैं। इस प्रकार कई प्लगइन्स मौजूद हैं।
अनुकूलन: सी/सी++ अंतर्निहित मेमोरी तक सीधी पहुंच की अनुमति देता है, इसलिए अति-उच्च आवृत्ति रणनीतियों को लागू किया जा सकता है।
रणनीति जटिलताः सी++ एसटीएल अनुकूलित एल्गोरिदम की एक विस्तृत श्रृंखला प्रदान करता है। लगभग किसी भी विशेष गणितीय एल्गोरिदम में वेब पर एक मुफ्त, ओपन-सोर्स सी/सी++ कार्यान्वयन है।
Bias Minimisation: आगे देखने वाले पूर्वाग्रह को खत्म करना मुश्किल हो सकता है, लेकिन अन्य उच्च स्तरीय भाषाओं की तुलना में कठिन नहीं। अच्छे डिबगिंग उपकरण, लेकिन अंतर्निहित स्मृति से निपटने में सावधान रहना चाहिए।
विकास की गति: समान एल्गोरिथ्म के लिए पायथन या मैटलैब की तुलना में सी++ काफी बहुमुखी है। अधिक लाइन-ऑफ-कोड (एलओसी) अक्सर बग की अधिक संभावना की ओर जाता है।
निष्पादन गति: सी/सी++ में निष्पादन की गति बेहद तेज है और इसे विशिष्ट कम्प्यूटेशनल आर्किटेक्चर के लिए अच्छी तरह से अनुकूलित किया जा सकता है। इसका उपयोग करने का यह मुख्य कारण है।
लागत: विभिन्न संकलकः लिनक्स/जीसीसी मुफ़्त है, एमएस विजुअल स्टूडियो के अलग-अलग लाइसेंस हैं।
विकल्पः सी#, जावा, स्काला
विभिन्न रणनीतियों के लिए अलग-अलग सॉफ्टवेयर पैकेजों की आवश्यकता होगी। एचएफटी और यूएचएफटी रणनीतियों को सी / सी ++ में लिखा जाएगा (इन दिनों वे अक्सर जीपीयू और एफपीजीए पर किए जाते हैं), जबकि कम आवृत्ति वाले दिशात्मक इक्विटी रणनीतियों को ट्रेडस्टेशन में लागू करना आसान है, क्योंकि सॉफ्टवेयर / ब्रोकरेज की प्रकृति में सभी में।
मेरी व्यक्तिगत प्राथमिकता पायथन के लिए है क्योंकि यह मेरी आवश्यकताओं और रणनीतियों के लिए अनुकूलन, विकास की गति, परीक्षण क्षमता और निष्पादन गति की सही डिग्री प्रदान करता है। यदि मुझे कुछ भी तेज़ की आवश्यकता है, तो मैं अपने पायथन कार्यक्रमों से सीधे सी ++ में
बैकटेस्टिंग पर अगले कुछ लेखों में हम एक एल्गोरिथम ट्रेडिंग बैकटेस्टिंग प्रणाली के कार्यान्वयन के आसपास कुछ विशेष मुद्दों पर एक नज़र डालेंगे, साथ ही साथ ट्रेडिंग एक्सचेंजों के प्रभावों को कैसे शामिल किया जाए। हम रणनीति प्रदर्शन माप पर चर्चा करेंगे और अंत में एक उदाहरण रणनीति के साथ निष्कर्ष निकालेंगे।