शुरुआत आँकड़ों से करते हैं, क्योंकि पूरा तर्क वही है। किसी बड़े perp वेन्यू पर एक राउंड-ट्रिप taker ट्रेड कमीशन में लगभग 0.10% of notional ले जाता है। भीड़ भरी लॉन्ग पोज़िशन पर फंडिंग आपके ख़िलाफ़ 10-30% annualized तक जा सकती है। टॉप-ऑफ-बुक डेप्थ के मुक़ाबले बड़ा मार्केट ऑर्डर स्प्रेड के ऊपर से स्क्वेयर-रूट-लॉ इम्पैक्ट चुकाता है। और जो बैकटेस्ट कल के डेटा का आज वाला संशोधित संस्करण पढ़ता है, उसे साल में कई प्रतिशत की ऐसी बढ़त मिल जाती है जो कभी अस्तित्व में ही नहीं थी।
चौंकाने वाला आँकड़ा पहला है। इसलिए नहीं कि वह बड़ा है — बल्कि इसलिए कि वह ट्रेड फ़्रीक्वेंसी के साथ क्या करता है। "फीस भी जोड़ो" पर सब सिर हिलाते हैं और फिर ऐसी रणनीति टेस्ट करते हैं जो दिन में चालीस बार ट्रेड करती है। एक राउंड ट्रिप पर 0.10% के हिसाब से चालीस ट्रेड यानी लागत में 4% of notional per day। किसी मिड-कैप perp पर ऐसा कोई सिग्नल नहीं है जो इस स्तर को पार कर सके। वह रणनीति व्यवहार्य होने के आसपास भी नहीं थी, और फीस-रहित बैकटेस्ट कह रहा था कि वह शानदार है।
फीस एक फ़िल्टर है, कटौती नहीं
ज़्यादातर लोगों के मन में यह मॉडल रहता है कि फीस कर्व को थोड़ा छील देती है: आकार वही, बस थोड़ा नीचे। यह ग़लत है। फीस दरअसल एक फ़्रीक्वेंसी फ़िल्टर है। यह किसी बढ़त के हाई-फ़्रीक्वेंसी रूपों को पूरी तरह मिटा देती है और धीमे रूपों को लगभग अछूता छोड़ देती है। जब हमारी पाइपलाइन ने प्रति वेन्यू असली maker/taker शेड्यूल लागू करना शुरू किया, तो जो रणनीतियाँ मरीं वे बुरे विचार नहीं थे — वे अच्छे विचार थे जो बहुत बार ट्रेड कर रहे थे। इलाज आमतौर पर बेहतर सिग्नल नहीं, बल्कि लंबा टाइमफ़्रेम निकला। अब हम हर उस चीज़ को छोड़ देते हैं जिसका औसत ट्रेड रिटर्न notional के 0.15% से कम है, क्योंकि दोतरफ़ा लागत के बाद कंपाउंड होने लायक कुछ बचता ही नहीं।
फंडिंग एक पोज़िशन-टैक्स है, और उसकी याददाश्त तेज़ है
परपेचुअल फ़्यूचर्स हर घंटे या हर आठ घंटे में फंडिंग चुकाते हैं, और यह शोर नहीं है: यह संरचनात्मक रूप से ठीक उन्हीं ट्रेड्स से जुड़ी है जो मोमेंटम सिस्टम करना चाहते हैं। जब सब लॉन्ग होते हैं, फंडिंग पॉज़िटिव होती है, और आपकी लॉन्ग मोमेंटम पोज़िशन उसे चुकाती है। फंडिंग एक्रुअल के बिना बैकटेस्ट perps पर ट्रेंड-फ़ॉलोइंग को व्यवस्थित रूप से ज़्यादा अच्छा दिखाता है। यह हमने शर्मिंदा होकर सीखा — फंडिंग-कैरी रणनीतियों का एक पूरा परिवार अपने-आप छोड़ दिया गया क्योंकि इंजन उसी फंडिंग को क्रेडिट नहीं कर रहा था जिसे बटोरने के लिए वे बनी थीं। सिग्नल ठीक था। हिसाब-किताब ग़ायब था।
इम्पैक्ट आपके साइज़ के वर्गमूल के हिसाब से बढ़ता है
बार-आधारित बैकटेस्टिंग की शिष्ट कल्पना यह है कि आपका ऑर्डर क्लोज़ पर भर जाता है। छोटे ऑर्डर के लिए यह मोटे तौर पर सही है। किसी भी सार्थक साइज़ के लिए स्वीकृत मॉडल यह है कि इम्पैक्ट वॉल्यूम के सापेक्ष ऑर्डर साइज़ के वर्गमूल के साथ बढ़ता है, और वह कभी वापस नहीं आता। हम हर फ़िल में और ख़ुद इक्विटी कर्व में एक sqrt-law इम्पैक्ट अनुमान जोड़ते हैं। यह ठीक वहाँ सबसे ज़्यादा मायने रखता है जहाँ सबसे असुविधाजनक होता है: कैपेसिटी। कोई रणनीति $50k पर सचमुच मुनाफ़े वाली और $5M पर संरचनात्मक रूप से घाटे वाली हो सकती है, और यह सीमा सिर्फ़ इम्पैक्ट-सजग कर्व ही दिखाता है।
लुक-अहेड कोड में नहीं, डेटा में छिपता है
कोई भी if tomorrow_close > today_close: buy() नहीं लिखता। लुक-अहेड डेटा की पाइपलाइन से चुपके से घुसता है: न्यूज़ सेंटिमेंट जिस पर इनजेशन समय की जगह प्रकाशन समय की मुहर लगी हो, फंडिंग रेट जो उस अवधि पर जोड़े गए हों जिसे वे कवर करते हैं, न कि उस समय पर जब वे ज्ञात हुए, "मौजूदा" सिंबल यूनिवर्स को इतिहास पर लागू करना (सर्वाइवरशिप), और संशोधित आर्थिक आँकड़े जो उस नंबर की जगह ले लेते हैं जो असल में टेप पर आया था। हमारा नियम है — हर जगह पॉइंट-इन-टाइम: हर पूरक सीरीज़ पर उसी समय की मुहर लगती है जब हम उसे जान सकते थे, और बैकटेस्ट सिर्फ़ वही पढ़ सकता है जो उस नैनोसेकंड पर मौजूद था।
बैकटेस्ट की कसौटी यह नहीं है कि कर्व ऊपर जाता है या नहीं। कसौटी यह है कि वही कोड, वही सिग्नल लाइव मिलने पर, वही ट्रेड करता है या नहीं — और यह आपको सिर्फ़ जाँच से पता चलता है, रोज़, हमेशा।
वह आख़िरी वाक्य एक असली प्रक्रिया है, नारा नहीं। हर दिन हम पेपर-ट्रेडेड हर रणनीति की विंडो को बैकटेस्ट इंजन से दोबारा चलाते हैं और ट्रेड एक-एक करके मिलाते हैं। जब पेपर और रीप्ले में फ़र्क़ आता है, तो दोनों में से एक झूठ बोल रहा होता है, और आमतौर पर वजह कोई लागत या कोई टाइमस्टैम्प होती है। ऊपर के चार लाइन आइटम बस वही हैं जिन्होंने हमसे सबसे पहले झूठ बोला।
← सभी पोस्ट