क्या आपको अपना बैकटेस्टर बनाना चाहिए?

लेखक:अच्छाई, बनाया गयाः 2019-03-19 14:03:46, अद्यतन किया गयाः 2019-03-19 14:08:48

इस पोस्ट के बारे में

यह पोस्ट उन लोगों के लिए उपयुक्त है जो मात्रात्मक व्यापार शुरू कर रहे हैं और साथ ही उन लोगों के लिए भी जो इस क्षेत्र के साथ कुछ अनुभव रखते हैं। यह पोस्ट बैकटेस्टिंग के सामान्य फसलों के साथ-साथ कुछ असामान्य लोगों पर चर्चा करती है!

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

अंत में, हम एक घटना-संचालित बैकटेस्टिंग प्रणाली के अंदर और बाहर चर्चा करते हैं, एक विषय जिसे मैंने पहले के पोस्ट में क्वांटस्टार्ट पर अक्सर कवर किया है।

बैकटेस्ट क्या है?

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

एक बार कहा गया था कि सभी मॉडल गलत हैं, लेकिन कुछ उपयोगी हैं। बैकटेस्ट के लिए भी यही सच है। तो वे किस उद्देश्य के लिए काम करते हैं?

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

बैकटेस्ट उत्पन्न करना आसान है. दुर्भाग्य से बैकटेस्ट परिणाम लाइव ट्रेडिंग परिणाम नहीं हैं. वे इसके बजाय वास्तविकता का एक मॉडल हैं. एक मॉडल जिसमें आमतौर पर कई धारणाएं होती हैं.

सॉफ्टवेयर बैकटेस्ट के दो मुख्य प्रकार हैं - for-loop और event-driven सिस्टम।

बैकटेस्टिंग सॉफ्टवेयर को डिजाइन करते समय हमेशा सटीकता और कार्यान्वयन जटिलता के बीच एक समझौता होता है। उपरोक्त दो बैकटेस्टिंग प्रकार इस समझौता के लिए स्पेक्ट्रम के किसी भी छोर का प्रतिनिधित्व करते हैं।

बैकटेस्टिंग के फंदे

बैकटेस्टिंग से जुड़ी कई खामियां हैं। वे सभी इस तथ्य से संबंधित हैं कि एक बैकटेस्ट केवल वास्तविकता का एक मॉडल है। कुछ अधिक आम खामियों में शामिल हैंः

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

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

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

बैकटेस्टिंग की समस्याओं के बारे में बहुत कुछ लिखा गया है। टकर बाल्च और एर्नी चैन दोनों ही इस मुद्दे पर विस्तार से विचार करते हैं।

फोर-लूप बैकटेस्ट सिस्टम

For-Loop Backtester सबसे सरल प्रकार का बैकटेस्टिंग सिस्टम है और यह संस्करण क्वांट ब्लॉग पोस्ट में सबसे अधिक देखा जाता है, केवल इसकी सादगी और पारदर्शिता के लिए।

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

यहाँ इस तरह के एक एल्गोरिथ्म के लिए छद्म कोड हैः

for each trading bar:
    do_something_with_prices();
    buy_sell_or_hold_something();
    next_bar();PythonCopy

जैसा कि आप देख सकते हैं कि इस तरह के सिस्टम का डिजाइन अविश्वसनीय रूप से सरल है। यह एक विशेष रणनीति नियम सेट के प्रदर्शन पर पहली नज़र पाने के लिए आकर्षक बनाता है।

लाभ

फोर-लूप बैकटेस्टर लगभग किसी भी प्रोग्रामिंग भाषा में लागू करने के लिए सरल हैं और निष्पादित करने के लिए बहुत तेज़ हैं। बाद के लाभ का मतलब है कि ट्रेडिंग सेटअप को अनुकूलित करने के लिए कई पैरामीटर संयोजनों का परीक्षण किया जा सकता है।

नुकसान

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

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

For-Loop backtesters को Look-Ahead Bias का खतरा है, उदाहरण के लिए, क्या आपको अपने पैनल इंडेक्सिंग में i, i+1 या i-1 का उपयोग करना चाहिए था?

For-Loop backtesters को वास्तव में केवल एक फिल्टरेशन तंत्र के रूप में उपयोग किया जाना चाहिए। आप उन्हें स्पष्ट रूप से बुरी रणनीतियों को खत्म करने के लिए उपयोग कर सकते हैं, लेकिन आपको मजबूत प्रदर्शन के बारे में संदेह करना चाहिए। आगे के शोध की आवश्यकता होती है। रणनीतियाँ शायद ही कभी लाइव ट्रेडिंग में बेहतर प्रदर्शन करती हैं!

घटना-संचालित बैकटेस्ट सिस्टम

इवेंट-ड्राइव बैकटेस्टर स्पेक्ट्रम के दूसरे छोर पर स्थित हैं। वे लाइव-ट्रेडिंग बुनियादी ढांचे के कार्यान्वयन के समान हैं। इस प्रकार, वे अक्सर बैकटेस्ट और लाइव ट्रेडिंग प्रदर्शन के बीच अंतर में अधिक यथार्थवादी होते हैं।

ऐसी प्रणालियाँ एक बड़े while लूप में चलती हैं जो लगातार event queue में विभिन्न प्रकार के events की तलाश करती हैं। संभावित घटनाओं में शामिल हैंः

  • Tick Events - नए बाजार डेटा के आगमन का संकेत
  • सिग्नल घटनाएँ - नए ट्रेडिंग सिग्नल उत्पन्न करना
  • ऑर्डर इवेंट्स - मार्केट ब्रोकर को भेजे जाने के लिए तैयार ऑर्डर
  • घटनाओं को भरें - बाजार ब्रोकर से जानकारी भरें

जब किसी विशेष घटना की पहचान की जाती है, तो इसे बुनियादी ढांचे में उपयुक्त मॉड्यूलों को रूट किया जाता है, जो घटना को संभालता है और फिर संभावित रूप से नई घटनाओं को उत्पन्न करता है जो कतार में वापस जाते हैं।

एक घटना संचालित बैकटेस्टिंग प्रणाली के लिए छद्म कोड इस प्रकार है:

while event_queue_isnt_empty():
    event = get_latest_event_from_queue();
    if event.type == "tick":
        strategy.calculate_trading_signals(event);
    else if event.type == "signal":
        portfolio.handle_signal(event);
    else if event.type == "order":
        portfolio.handle_order(event);
    else if event.type == "fill":
        portfolio.handle_fill(event)
    sleep(600);  # Sleep for, say, 10 minsPythonCopy

जैसा कि आप देख सकते हैं कि पोर्टफोलियो हैंडलर मॉड्यूल पर भारी निर्भरता है। ऐसा मॉड्यूल एक इवेंट-ड्राइव बैकटेस्टिंग सिस्टम का दिल है जैसा कि हम नीचे देखेंगे।

लाभ

एक इवेंट-ड्राइव बैकटेस्टर का उपयोग करने के कई फायदे हैंः

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

नुकसान

हालांकि ऐसे जटिल तंत्र का उपयोग करने के फायदे स्पष्ट हैं, लेकिन इसके कुछ गंभीर नुकसान भी हैंः

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

सॉफ्टवेयर परिदृश्य

इस अनुभाग में हम सॉफ्टवेयर (खुले स्रोत और वाणिज्यिक दोनों) पर विचार करेंगे जो फो-लूप और इवेंट-ड्राइव्ड सिस्टम दोनों के लिए मौजूद हैं।

For-Loop backtesters के लिए, उपयोग की जाने वाली मुख्य प्रोग्रामिंग भाषाओं / सॉफ्टवेयर में पायथन (पैंडस लाइब्रेरी के साथ), आर (और क्वांटमॉड लाइब्रेरी) और मैटलैब शामिल हैं। क्वांट ब्लॉग पर बहुत सारे कोड स्निपेट पाए जा सकते हैं। ऐसे ब्लॉगों की एक बड़ी सूची क्वांटोक्रेसी पर पाई जा सकती है।

इवेंट-ड्राइव्ड सिस्टम का बाजार बहुत बड़ा है, क्योंकि ग्राहक/उपयोगकर्ता अक्सर चाहते हैं कि सॉफ्टवेयर एक पैकेज में बैकटेस्टिंग और लाइव ट्रेडिंग दोनों के लिए सक्षम हो।

महंगी व्यावसायिक पेशकशों में डेल्टिक्स और क्वांटहाउस शामिल हैं। वे अक्सर क्वांट हेज फंड, फैमिली ऑफिस और प्रोप ट्रेडिंग फर्मों में पाए जाते हैं।

क्लाउड-आधारित बैकटेस्टिंग और लाइव ट्रेडिंग सिस्टम अपेक्षाकृत नए हैं। क्वांटोपियन बैकटेस्टिंग और लाइव ट्रेडिंग दोनों के लिए एक परिपक्व वेब-आधारित सेटअप का एक उदाहरण है।

संस्थागत क्वांट अक्सर अपने स्वयं के इन-हाउस सॉफ्टवेयर का निर्माण भी करते हैं। यह नियामक बाधाओं, निवेशक संबंधों/रिपोर्टिंग और ऑडिटेबिलिटी के मिश्रण के कारण है।

खुदरा क्वांटों के पास क्वांटोपियन के cloud+data दृष्टिकोण का उपयोग करने या अमेज़ॅन वेब सर्विसेज, रैकस्पेस क्लाउड या माइक्रोसॉफ्ट एज़्योर जैसे क्लाउड विक्रेता का उपयोग करके अपने स्वयं के रोलिंग के बीच विकल्प है, साथ ही एक उपयुक्त डेटा विक्रेता जैसे कि डीटीएन आईक्यूफीड या क्वांटक्यूट।

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

हालाँकि, सबसे महत्वपूर्ण पहलुओं में से एक यह है कि आप जो भी सॉफ़्टवेयर का उपयोग करते हैं, उसे वित्तीय डेटा के समान ठोस स्रोत के साथ जोड़ा जाना चाहिए। अन्यथा आप "गार्बेज इन, गार्बेज आउट" की स्थिति में होंगे और आपके लाइव ट्रेडिंग परिणाम आपके बैकटेस्ट से काफी भिन्न होंगे।

प्रोग्रामिंग भाषाएँ

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

एक मात्रात्मक सॉफ्टवेयर डेवलपर के रूप में एक पृष्ठभूमि होने के बावजूद मैं व्यक्तिगत रूप से भाषा युद्धों में रुचि नहीं है। वहाँ केवल एक दिन में कई घंटे हैं और, के रूप में quants, हम चीजों को पूरा करने की जरूरत है - इंटरनेट मंचों पर भाषा डिजाइन बहस करने में समय बर्बाद नहीं!

हमें केवल उन चीजों में दिलचस्पी होनी चाहिए जो काम करती हैं।

पायथन

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

इसमें NumPy, SciPy, Pandas, Scikit-Learn, Matplotlib, PyMC3 और Statsmodels में कुछ असाधारण क्वांटम/डेटा साइंस/मशीन लर्निंग (ML) लाइब्रेरी हैं। जबकि यह ML और सामान्य डेटा विज्ञान के लिए बहुत अच्छा है, यह अधिक व्यापक शास्त्रीय सांख्यिकीय तरीकों और समय श्रृंखला विश्लेषण के लिए थोड़ा पीड़ित है।

यह For-Loop और Event-Driven backtesting दोनों प्रणालियों के निर्माण के लिए बहुत अच्छा है। वास्तव में, यह शायद केवल भाषाओं में से एक है जो सीधे तौर पर अंत से अंत तक अनुसंधान, बैकटेस्टिंग, तैनाती, लाइव ट्रेडिंग, रिपोर्टिंग और निगरानी की अनुमति देता है।

शायद इसका सबसे बड़ा दोष यह है कि यह C++ जैसी अन्य भाषाओं की तुलना में निष्पादित करने में काफी धीमा है। हालांकि, इस समस्या को सुधारने के लिए काम किया जा रहा है और समय के साथ पायथन तेजी से हो रहा है।

आर

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

यह व्यापक रूप से फोर-लूप बैकटेस्टिंग के लिए उपयोग किया जाता है, अक्सर क्वांटमॉड लाइब्रेरी के माध्यम से, लेकिन इवेंट-ड्राइव्ड सिस्टम या लाइव ट्रेडिंग के लिए विशेष रूप से उपयुक्त नहीं है। हालांकि यह रणनीति अनुसंधान में उत्कृष्ट है।

सी++

C++ की प्रतिष्ठा बेहद तेज़ होने के लिए है। लगभग सभी वैज्ञानिक उच्च प्रदर्शन कंप्यूटिंग या तो Fortran या C++ में की जाती है। यह इसका प्राथमिक लाभ है। इसलिए यदि आप उच्च आवृत्ति व्यापार पर विचार कर रहे हैं, या बड़े संगठनों में विरासत प्रणालियों पर काम कर रहे हैं, तो C++ एक आवश्यकता होने की संभावना है।

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

अपनी सापेक्ष आयु के बावजूद, हाल ही में C++11/C++14 की शुरूआत और आगे के मानकों के परिष्करण के साथ इसका काफी आधुनिकीकरण किया गया है।

अन्य?

आप जावा, स्काला, सी #, जूलिया और कई कार्यात्मक भाषाओं पर भी एक नज़र डालना चाह सकते हैं। हालांकि, मेरी सिफारिश पायथन, आर और / या सी ++ के साथ रहना है, क्योंकि क्वांट ट्रेडिंग समुदाय बहुत बड़े हैं।

क्या आपको अपना स्वयं का (घटना-संचालित) बैकटेस्टर लिखना चाहिए?

उत्तर: हाँ!

यह एक महान सीखने का अनुभव है अपने स्वयं के घटना-संचालित बैकटेस्टिंग प्रणाली लिखने के लिए. सबसे पहले, यह आप अपने व्यापार बुनियादी ढांचे के सभी पहलुओं पर विचार करने के लिए मजबूर करता है, न कि सिर्फ एक विशेष रणनीति पर tinkering घंटे बिताने.

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

उदाहरण के लिएः कैसे अपने वर्तमान लाइव प्रणाली के संदर्भ में अपने बैकटेस्ट सिमुलेशन से अलग हैः

  • एल्गोरिथम निष्पादन और आदेश रूटिंग?
  • स्प्रेड, शुल्क, स्लिप और बाजार प्रभाव?
  • जोखिम प्रबंधन और स्थिति का आकार?

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

घटना-संचालित बैकटेस्ट डिजाइन 101

आप ऐसी प्रणाली कैसे लिखते हैं?

आरंभ करने का सबसे अच्छा तरीका यह है कि बस Zipline, QSTrader, PyAlgoTrade, PySystemTrade आदि को डाउनलोड करें और प्रलेखन और कोड के माध्यम से पढ़ने का प्रयास करें। वे सभी पायथन में लिखे गए हैं (उपरोक्त कारणों के कारण) और शुक्र है कि पायथन छद्म-कोड पढ़ने जैसा है। यानी, इसका पालन करना बहुत आसान है।

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

याद रखें कि आपको दिन # 1 पर एक विशेषज्ञ होने की आवश्यकता नहीं है। आप इसे धीरे-धीरे, दिन-प्रतिदिन, मॉड्यूल-दर-मॉड्यूल ले सकते हैं। यदि आपको मदद की आवश्यकता है, तो आप हमेशा मुझसे या अन्य इच्छुक क्वांट ब्लॉगर्स से संपर्क कर सकते हैं। मेरे संपर्क ईमेल के लिए लेख के अंत में देखें।

मैं अब मॉड्यूल पर चर्चा करूंगा जो अक्सर कई इवेंट-ड्राइव बैकटेस्टिंग सिस्टम में पाए जाते हैं। जबकि यह एक पूर्ण सूची नहीं है, यह आपको इस तरह के सिस्टम के डिजाइन के बारे में स्वाद देना चाहिए।

प्रतिभूतियाँ मास्टर डेटाबेस

यह है जहां सभी ऐतिहासिक मूल्य निर्धारण डेटा संग्रहीत किया जाता है, साथ ही अपने व्यापार इतिहास के साथ, एक बार लाइव. एक पेशेवर प्रणाली सिर्फ कुछ नहीं है CSV फ़ाइलें याहू वित्त से!

इसके बजाय, हम पहली श्रेणी डेटाबेस या फ़ाइल सिस्टम का उपयोग करते हैं, जैसे कि PostgreSQL, MySQL, SQL Server या HDF5।

आदर्श रूप से, हम टिक-लेवल डेटा प्राप्त करना और संग्रहीत करना चाहते हैं क्योंकि यह हमें ट्रेडिंग स्प्रेड का एक विचार देता है। इसका मतलब यह भी है कि हम अपने स्वयं के ओएचएलसी बार का निर्माण कर सकते हैं, यदि वांछित हो, तो कम आवृत्तियों पर।

हमें हमेशा कॉर्पोरेट कार्यों (जैसे स्टॉक स्प्लिट्स और लाभांश) को संभालने, जीवित रहने के पक्षपात (स्टॉक डी-लिस्टिंग) के साथ-साथ विभिन्न एक्सचेंजों के बीच समय क्षेत्र के अंतर को ट्रैक करने के बारे में पता होना चाहिए।

व्यक्तिगत / खुदरा क्वांट यहां प्रतिस्पर्धा कर सकते हैं क्योंकि कई उत्पादन-गुणवत्ता डेटाबेस प्रौद्योगिकियां परिपक्व, मुक्त और ओपन सोर्स हैं। डेटा स्वयं सस्ता और लोकतंत्रीकृत हो रहा है जैसे कि साइटों के माध्यम से Quandl।

अभी भी बहुत सारे बाजार और रणनीतियाँ हैं जो बड़े फंडों के लिए रुचि रखने के लिए बहुत छोटे हैं। यह खुदरा मात्रा व्यापारियों के लिए उपजाऊ भूमि है।

ट्रेडिंग रणनीतियाँ

एक इवेंट-ड्राइव सिस्टम में ट्रेडिंग रणनीति मॉड्यूल आम तौर पर नए बाजार डेटा पर किसी प्रकार की भविष्यवाणी या फ़िल्टरिंग तंत्र चलाता है।

यह बार या टिक डेटा प्राप्त करता है और फिर इन तंत्रों का उपयोग किसी परिसंपत्ति को लंबे या छोटे करने के लिए एक ट्रेडिंग सिग्नल उत्पन्न करने के लिए करता है। यह मॉड्यूल एक मात्रा का उत्पादन करने के लिए डिज़ाइन नहीं किया गया है, जो स्थिति-आकार मॉड्यूल के माध्यम से किया जाता है।

95% क्वांट ब्लॉग चर्चा आमतौर पर ट्रेडिंग रणनीतियों के इर्द-गिर्द घूमती है। व्यक्तिगत रूप से मेरा मानना है कि यह 20% की तरह अधिक होना चाहिए। ऐसा इसलिए है क्योंकि मुझे लगता है कि अधिक अल्फा के साथ रणनीतियों का पीछा करने के बजाय उचित जोखिम प्रबंधन और स्थिति आकार के माध्यम से लागत को कम करके अपेक्षित रिटर्न को बढ़ाना बहुत आसान है।

पोर्टफोलियो एवं ऑर्डर प्रबंधन

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

इस प्रणाली का उद्देश्य जोखिम को कम करते हुए और लेन-देन की लागत को कम करते हुए वर्तमान पोर्टफोलियो से वांछित पोर्टफोलियो में जाना है।

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

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

जोखिम एवं स्थिति प्रबंधन

जोखिम प्रबंधन को अपने स्वयं के मॉड्यूल में अलग करना बेहद फायदेमंद हो सकता है। मॉड्यूल पोर्टफोलियो से भेजे गए आदेशों को संशोधित, जोड़ या वीटो कर सकता है।

विशेष रूप से, जोखिम मॉड्यूल बाजार तटस्थता बनाए रखने के लिए हेज जोड़ सकता है। यह क्षेत्र के जोखिम या एडीवी सीमाओं के कारण ऑर्डर आकार को कम कर सकता है। यह पूरी तरह से एक व्यापार पर वीटो कर सकता है यदि स्प्रेड बहुत व्यापक है, या शुल्क व्यापार आकार के सापेक्ष बहुत बड़े हैं।

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

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

निष्पादन संभाल

वास्तविक जीवन में हम कभी भी मध्य बिंदु पर बाजार भरने की गारंटी नहीं देते हैं!

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

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

हम आसानी से inheritance की OOP अवधारणा का उपयोग करके कई दलालों को भी जोड़ सकते हैं। यह निश्चित रूप से मानता है कि कहा दलालों के पास एक सीधा अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस (API) है और हमें अपने सिस्टम के साथ बातचीत करने के लिए एक ग्राफिकल यूजर इंटरफेस (GUI) का उपयोग करने के लिए मजबूर नहीं करते हैं।

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

प्रदर्शन और रिपोर्टिंग

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

इस बुनियादी ढांचे में लगातार वृद्धिशील सुधार किए जाने चाहिए। यह केवल बग को खत्म करके और व्यापार विलंबता जैसे मुद्दों में सुधार करके, दीर्घकालिक रूप से रिटर्न को वास्तव में बढ़ा सकता है। world की सबसे बड़ी रणनीति (WGS) को बेहतर बनाने पर बस फिक्स्ड न हों।

डब्ल्यूजीएस अंततः अल्फा क्षय के कारण क्षय हो जाएगा। अन्य अंततः किनारे की खोज करेंगे और रिटर्न को दूर कर देंगे। हालांकि, एक मजबूत ट्रेडिंग बुनियादी ढांचा, एक ठोस रणनीति अनुसंधान पाइपलाइन और निरंतर सीखने इस भाग्य से बचने के महान तरीके हैं।

बुनियादी ढांचे का अनुकूलन रणनीति के विकास की तुलना में अधिक बोरिंग हो सकता है लेकिन जब आपके रिटर्न में सुधार होता है तो यह काफी कम उबाऊ हो जाता है!

तैनाती और निगरानी

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

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

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

मर्फी के नियम को याद रखें - यदि यह विफल हो सकता है तो यह विफल हो जाएगा।

कई विक्रेता हैं जो अपेक्षाकृत सरल क्लाउड तैनाती प्रदान करते हैं, जिनमें अमेज़ॅन वेब सर्विसेज, माइक्रोसॉफ्ट एज़्योर, गूगल और रैकस्पेस शामिल हैं। सॉफ्टवेयर इंजीनियरिंग कार्यों के लिए विक्रेताओं में गिथब, बिटबकेट, ट्रैविस, लॉगली और स्प्लंक, साथ ही कई अन्य शामिल हैं।

अंतिम विचार

दुर्भाग्यवश क्वांट ट्रेडिंग में कोई "त्वरित समाधान" नहीं है। इसमें सफल होने के लिए बहुत मेहनत और सीखने की आवश्यकता होती है।

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

यह भी अपने व्यापार बुनियादी ढांचे में बहुत समय निवेश करने के लायक है। तैनाती और निगरानी जैसे मुद्दों पर समय व्यतीत करें। हमेशा लेनदेन लागत को कम करने की कोशिश करें, क्योंकि लाभप्रदता लागत को कम करने के बारे में है क्योंकि यह व्यापार राजस्व प्राप्त करने के बारे में है।

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

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


अधिक