मंगलवार को 08:00 UTC पर, एक क्रिप्टो वेन्यू ने मिड-प्राइस्ड परपेचुअल कॉन्ट्रैक्ट का टिक साइज़ बदल दिया। हमारी बेसिस रणनीति को इसका पता नहीं चला। उसके सिग्नल को स्पॉट और फ़्यूचर्स के बीच वही स्प्रेड दिख रहा था, जोखिम सीमाएँ जस की तस थीं, और बैकटेस्ट में पहले जैसे ही नतीजे आते रहे।
पेपर ट्रेडिंग को इसका पता चल गया। ऑर्डर अडैप्टर ने बाय लिमिट को नीचे की ओर राउंड करके निकटतम मान्य कीमत पर रखा। इससे ऑर्डर उस स्तर से एक टिक नीचे चला गया जिसे बैकटेस्ट ने मॉडल किया था। बाज़ार पुरानी कीमत तक पहुँचा, सिम्युलेटेड ऑर्डर फ़िल हो गया, जबकि पेपर ऑर्डर बिना छुए पड़ा रहा। दोपहर के भोजन तक रणनीति की इन्वेंटरी एक तरफ़ झुक गई थी।
यह घटना देखने में राउंडिंग की एक छोटी-सी गड़बड़ी लगी। असल में यह मॉडल की सीमा की समस्या थी: रणनीति को कीमतों का पता था, लेकिन बैकटेस्ट को वेन्यू के प्राइस ग्रिड का नहीं।
हम एक सरल बेसिस सिग्नल पर ट्रेड कर रहे थे: जब फ़्यूचर्स प्रीमियम एक तय सीमा से आगे बढ़ता, तो स्पॉट खरीदते और परपेचुअल बेचते। ऑर्डर पैसिव रखे गए थे, क्योंकि अपेक्षित बेसिस लाभ छोटा था। कुछ टिक तय कर सकते थे कि एंट्री से फ़ीस और बाद का एग्ज़िट कवर करने जितना लाभ होगा या नहीं।
टिक साइज़ बदलने पर क्या बदला?
अपडेट से पहले परपेचुअल में 0.01 की बढ़त में कीमतें स्वीकार होती थीं। उसके बाद, संबंधित प्राइस बैंड में 0.05 की बढ़त वाली कीमतें स्वीकार होने लगीं। सिग्नल ने 42,318.03 पर बेचने का लक्ष्य निकाला, जो पुराने नियम के तहत मान्य कीमत थी। नए नियम में वह कीमत अमान्य थी।
एक्सचेंज अमान्य कीमतें अस्वीकार करता था, लेकिन हमारे अडैप्टर में एक फ़ॉलबैक था: वह सेल को नीचे की ओर राउंड करके 42,318.00 कर देता। वह भी अमान्य था। दूसरे फ़ॉलबैक ने फिर राउंड किया—इस बार 42,318.05 तक—जो मान्य थी, लेकिन विक्रेता के लिए कम आक्रामक थी। अब ऑर्डर उस कीमत पर नहीं बिक सकता था जिसे मॉडल किया गया था। कोड पाथ किसी दूसरे बाज़ार के लिए लिखा गया था और चुपचाप अस्वीकृति को बदली हुई कीमत वाले ऑर्डर में बदल देता था।
उस एक ऑर्डर ने दो अलग सवाल खड़े कर दिए। पहला, वेन्यू कौन-सी कीमत स्वीकार कर सकता है? दूसरा, जब रणनीति की मनचाही कीमत ग्रिड पर न हो, तो उसे कैसे प्रतिक्रिया देनी चाहिए? पहले सवाल का जवाब एक्सचेंज देता है। दूसरे का जवाब रणनीति या निष्पादन नीति को देना होता है।
| ऑर्डर का आशय | ग्रिड का नियम | आम तौर पर राउंडिंग की दिशा | इससे क्या बदल सकता है |
|---|---|---|---|
| बाय लिमिट | कीमत टिक का गुणज होनी चाहिए | सीमा से नीचे या बराबर रहने के लिए नीचे की ओर | फ़िल की संभावना कम |
| सेल लिमिट | कीमत टिक का गुणज होनी चाहिए | सीमा से ऊपर या बराबर रहने के लिए ऊपर की ओर | फ़िल की संभावना कम |
| मार्केटेबल लिमिट | कीमत की सीमाओं का भी पालन करना होगा | अधिकतम स्वीकार्य कीमत पर निर्भर | क्या ऑर्डर स्प्रेड पार करता है |
राउंडिंग का कोई एक नियम हर स्थिति में सही नहीं होता। बाय को नीचे की ओर राउंड करने से खरीदार की कीमत सीमा बनी रहती है, लेकिन फ़िल की संभावना घट सकती है। ऊपर की ओर राउंड करने से ऑर्डर मार्केटेबल बन सकता है, जिससे फ़ीस और बाज़ार पर असर बदलता है। हमारी पैसिव बेसिस एंट्री के लिए ऑर्डर को चुपचाप दूसरी कीमत पर ले जाना गलत था। रणनीति ने लक्ष्य चुना था; अडैप्टर ने उसकी अर्थव्यवस्था बदल दी।
बैकटेस्ट के नतीजे फिर भी अच्छे क्यों दिख रहे थे?
हमारा ऐतिहासिक ऑर्डर सिम्युलेटर लिमिट कीमतों को निरंतर संख्याएँ मानता था। अगर बार का न्यूनतम स्तर बाय कीमत तक पहुँचता, या अधिकतम स्तर सेल कीमत तक पहुँचता, तो वह फ़िल दर्ज कर देता। पैसिव ऑर्डर के लिए यह पहले से ही उदार अनुमान है, क्योंकि सीमा कीमत पर ट्रेड होने से कतार में आपकी जगह के बारे में कुछ पता नहीं चलता। लेकिन टिक अपडेट ने इससे भी बुनियादी अंतर उजागर किया: उस कीमत पर ऑर्डर मौजूद ही नहीं हो सकता था।
हमने प्रभावी समय से नया ग्रिड लागू करके वही फ़ैसले फिर से चलाए। कई फ़िल गायब हो गए। कुछ ऑर्डर ऐसी कीमतों पर राउंड हुए जिन्होंने स्प्रेड पार किया और maker फ़ीस की जगह taker फ़ीस ली। इससे पोज़िशन का क्रम अलग हो गया, इसलिए बाद के हेज और एग्ज़िट भी बदल गए। जो नियम मेटाडेटा जैसा दिखता था, उसने ट्रेडों का पूरा क्रम बदल दिया था।
और यह बदलाव किसी चार्ट में छिपा हुआ अचानक सामने नहीं आया था। वेन्यू ने प्रभावी टाइमस्टैम्प के साथ इंस्ट्रूमेंट नियम में बदलाव प्रकाशित किया था। हमने मार्केट डेटा को सावधानी से रखा, लेकिन इंस्ट्रूमेंट मेटाडेटा स्टार्टअप पर रिफ़्रेश होने वाले कैश में था। बैकटेस्ट हर ऐतिहासिक तारीख के लिए आज के नियम पढ़ता था; पेपर ट्रेडिंग में प्रक्रिया रीस्टार्ट होने तक पुराने नियम थे। किसी भी माहौल में यह नहीं दिखाया गया कि हर समय वेन्यू ने क्या अनुमति दी थी।
बैकटेस्ट में टिक-साइज़ के बदलाव कैसे मॉडल करने चाहिए?
इंस्ट्रूमेंट नियमों को वैधता के समयांतरालों के साथ संस्करणबद्ध करें, ठीक वैसे ही जैसे समय-विशिष्ट अन्य इनपुट को करते हैं। कम से कम, ऑर्डर की वैधता जाँचने के लिए प्रभावी समय और ज़रूरी नियम मान सहेजें: टिक साइज़, मात्रा का स्टेप, न्यूनतम मात्रा और कीमत की कोई भी सीमा। सिम्युलेटर को नियमों का वही सेट लोड करना चाहिए जो सिम्युलेट किए जा रहे फ़ैसले के समय उपलब्ध था।
इसके बाद ऑर्डर संभालने का तरीका स्पष्ट करें। अगर लक्ष्य कीमत अमान्य है, तो उसे अस्वीकार करें, लिखित नीति के मुताबिक राउंड करें, या ग्रिड पर लक्ष्य की फिर से गणना करें। दर्ज करें कि इनमें से क्या हुआ। हर ऑर्डर को अपने आप ठीक करने वाला बैकटेस्ट किसी खास निष्पादन नीति का अनुमान लगाने में उपयोगी हो सकता है, लेकिन उसे उस नीति को एक्सचेंज फ़िल के रूप में नहीं दिखाना चाहिए।
पैसिव ऑर्डर के लिए टिक-मान्य कीमत फ़िल की पहली शर्त भर है। आपको अब भी यह मॉडल करना होगा कि बाज़ार आपकी कीमत पर ट्रेड करके आगे निकला या नहीं, आपके आगे कतार में कौन था, ऑर्डर रद्द हुए या नहीं, और आपने कौन-सा फ़ीस टियर कमाया होता।
हमने दो जाँचें जोड़ीं। पहली, हर बनाए गए ऑर्डर को समय-विशिष्ट इंस्ट्रूमेंट नियमों के विरुद्ध चलाती है और अमान्य कीमत या आकार मिलने पर स्पष्ट रूप से विफल होती है। दूसरी, बैकटेस्ट और पेपर अडैप्टर के अंतिम नॉर्मलाइज़ किए गए ऑर्डर की तुलना करती है: साइड, कीमत, मात्रा, टाइम-इन-फ़ोर्स और फ़ीस का आशय। अगर वे मेल न खाएँ, तो रन को तुलनीय नहीं माना जाता।
इसके बाद हमने मंगलवार वाला बदलाव फिर से चलाया। ग्रिड अपडेट के बाद बैकटेस्ट ने 42,318.03 पर फ़िल का दावा करना बंद कर दिया। पेपर ट्रेडिंग और सिम्युलेशन हर अमान्य लक्ष्य पर एक जैसा फ़ैसला करने लगे, भले ही वह फ़ैसला ऑर्डर छोड़ देना हो।
सिग्नल में कोई खराबी नहीं आई थी। जिस चीज़ का वह ट्रेड कर सकता था, उसके बारे में उसकी धारणाएँ पुरानी पड़ गई थीं। रणनीति नए टिक साइज़ के बावजूद चल सकती है, बशर्ते रिसर्च सिस्टम वेन्यू के नियमों को उस बाज़ार का हिस्सा माने जिसे वह सिम्युलेट कर रहा है।
← सभी पोस्ट


