BJF TRADING GROUP · SHARPTRADER OPTIMIZER
अधिकांश प्रकाशित लेटेंसी आर्बिट्राज बैकटेस्ट कागज़ पर शानदार दिखते हैं और लाइव होते ही ढह जाते हैं। इसका कारण खराब रणनीति लॉजिक नहीं है — बल्कि यह है कि सामान्य रिटेल बैकटेस्टर चुपचाप ज़ीरो-लेटेंसी फ़िल मान लेते हैं। यह गाइड विस्तार से बताती है कि मिलीसेकंड-स्तर का एक्ज़िक्यूशन टाइम गणित को कैसे बदलता है, और आपके बैकटेस्ट को क्या मॉडल करना चाहिए ताकि ऐसे परिणाम मिलें जिन पर आप वास्तव में ट्रेड कर सकें।
लेटेंसी आर्बिट्राज की लाभप्रदता 50–200 मिलीसेकंड की विंडो के भीतर रहती है। फ़ास्ट फ़ीड और स्लो ब्रोकर के बीच कीमत का अंतर आमतौर पर इतनी ही देर खुला रहता है, जब तक स्लो ब्रोकर का कोट अपडेट नहीं हो जाता। यदि आपका वास्तविक राउंड-ट्रिप एक्ज़िक्यूशन टाइम — सिग्नल डिटेक्शन से लेकर कन्फ़र्म फ़िल तक — उस विंडो का अधिकांश हिस्सा खा जाता है, तो आपके पास लगभग कोई मार्जिन नहीं बचता। सामान्य रिटेल बैकटेस्टर मान लेते हैं कि ऑर्डर दिखाई गई कीमत पर तुरंत फ़िल हो जाते हैं, जिससे यह पूरी समस्या सिमुलेशन से ही गायब हो जाती है। परिणाम: एक बैकटेस्ट जो पैसे छापने की मशीन जैसा दिखता है, और एक लाइव डिप्लॉयमेंट जो स्प्रेड के बाद हर ट्रेड में नुकसान करता है।
यह लेख इस गैप को मापता है, बताता है कि मिलीसेकंड वास्तव में कहाँ खर्च होते हैं, और समझाता है कि बैकटेस्ट के भीतर एक्ज़िक्यूशन टाइम को कैसे मॉडल करें ताकि आपके द्वारा प्रस्तुत आँकड़े लाइव अकाउंट पर दिखने वाले आँकड़ों से मेल खाएँ।
देखें: एक्ज़िक्यूशन टाइम लेटेंसी आर्बिट्राज बैकटेस्ट को कैसे बदलता है — वही रणनीति 0 ms, 50 ms और 150 ms एक्ज़िक्यूशन लेटेंसी पर, टिक-दर-टिक समझाई गई।
लेटेंसी आर्बिट्राज सिस्टम में, रणनीति दो प्राइस फ़ीड की तुलना करती है — एक फ़ास्ट फ़ीड (आमतौर पर टियर-1 एग्रीगेटर या LP फ़ीड) और एक स्लो फ़ीड (वह ब्रोकर जिसके विरुद्ध आप ट्रेड कर रहे हैं)। जब फ़ास्ट फ़ीड स्लो फ़ीड से स्प्रेड और एक कॉन्फ़िगर किए गए थ्रेशोल्ड से अधिक आगे निकल जाती है, तो रणनीति स्लो साइड पर ऑर्डर भेजती है, इस उम्मीद में कि स्लो कीमत भी उसी स्तर पर आ जाएगी।
अवसर केवल तब तक मौजूद रहता है जब तक दोनों कीमतें असंतुलित हैं। जैसे ही ब्रोकर का कोट इंजन बराबरी पर आता है — आमतौर पर 50 से 200 मिलीसेकंड के भीतर — एज गायब हो जाता है। उससे पहले आपका ऑर्डर मार्केट में पहुँच जाना चाहिए।
इस संदर्भ में “एक्ज़िक्यूशन टाइम” कोई एक संख्या नहीं है। यह कई लेटेंसी का एक स्टैक है, जिनमें से हर एक कुछ मिलीसेकंड जोड़ती है:
ब्रोकर से अलग डेटा सेंटर में सामान्य VPS पर चल रही रणनीति के लिए, वास्तविक राउंड-ट्रिप शायद ही कभी 80–100ms से कम होता है। क्रॉस-कनेक्ट के माध्यम से ब्रोकर के साथ को-लोकेटेड चल रही रणनीति के लिए, यह 1–5ms तक गिर सकता है। परिमाण के क्रम का यही अंतर पूरे खेल का फ़ैसला करता है।
एक साफ़ सिग्नल की कल्पना करें: फ़ास्ट फ़ीड 1.5 पिप उछलती है। स्लो ब्रोकर अभी अपडेट नहीं हुआ है। स्लो ब्रोकर का कोट इंजन नई कीमत दिखाए, उससे पहले आपके पास औसतन 80 से 150 मिलीसेकंड होते हैं। उस विंडो के भीतर, दो चीज़ें एक साथ होती हैं:
यदि आपका राउंड-ट्रिप 50ms लेता है, तो आप तब पहुँचते हैं जब अंतर अभी भी ~70% बचा होता है और आप उसका अधिकांश हिस्सा पकड़ लेते हैं। यदि आपका राउंड-ट्रिप 150ms लेता है, तो आप तब पहुँचते हैं जब अंतर पहले ही ~10% तक सिमट चुका होता है — और स्प्रेड + स्लिपेज के बाद आप संभवतः नुकसान में होते हैं।
राउंड-ट्रिप लेटेंसी और आर्बिट्राज PnL के बीच संबंध रैखिक नहीं है। एक्ज़िक्यूशन विंडो से नीचे, लाभप्रदता ऊँची और स्थिर रहती है। उसके ऊपर, लाभप्रदता शून्य या नकारात्मक हो जाती है। अधिकांश रिटेल ट्रेडर्स इस खाई के गलत तरफ़ होते हैं और उन्हें पता भी नहीं चलता, क्योंकि उनका बैकटेस्ट इसे छिपा देता है।
यहाँ वही सैद्धांतिक 1.5-पिप-एज वाला लेटेंसी आर्बिट्राज सिग्नल है, जिसे चार अलग-अलग राउंड-ट्रिप एक्ज़िक्यूशन लेटेंसी पर सिम्युलेट किया गया है। नीचे दिए गए आँकड़े सामान्य लिक्विडिटी और 0.6–0.9 पिप स्प्रेड वाले लंदन सेशन के दौरान EUR/USD पर आमतौर पर दिखने वाले आँकड़ों जैसे हैं।
| राउंड-ट्रिप एक्ज़िक्यूशन | पकड़ा गया एज | एंट्री पर स्लिपेज | प्रति ट्रेड नेट PnL | निष्कर्ष |
|---|---|---|---|---|
| ~5ms (को-लोकेटेड) | सिग्नल का ~95% | 0.0–0.2 पिप | +0.6 से +1.0 पिप | लाभदायक |
| ~50ms (नज़दीकी VPS) | सिग्नल का ~70% | 0.2–0.5 पिप | +0.2 से +0.6 पिप | लाभदायक, कम मार्जिन |
| ~120ms (मध्यम दूरी) | सिग्नल का ~30% | 0.5–1.0 पिप | −0.3 से +0.1 पिप | सीमांत / नुकसान |
| ~200ms (लंबी दूरी) | सिग्नल का ~10% | 1.0–1.8 पिप | −1.0 से −0.5 पिप | हर ट्रेड में नुकसान |
पैटर्न पर ध्यान दें: 5ms से 50ms तक, लाभप्रदता थोड़ी घटती है। 50ms से 120ms तक, यह खाई में गिर जाती है। 150ms से ऊपर, लागत के बाद रणनीति नकारात्मक अपेक्षा वाला सिक्का उछालने जैसा खेल बन जाती है। तुरंत फ़िल मानने वाले बैकटेस्टर को यह खाई दिखाई ही नहीं देती।
सामान्य रिटेल बैकटेस्टर ट्रेंड-फ़ॉलोइंग और इंडिकेटर-आधारित सिस्टम के लिए बनाए गए थे — ऐसी रणनीतियाँ जिनमें होल्डिंग अवधि मिनटों से दिनों तक होती है, और कुछ सेकंड का एक्ज़िक्यूशन स्लिपेज नगण्य होता है। उनकी आर्किटेक्चर यही दर्शाती है:
घंटों तक पोज़िशन होल्ड करने वाली रणनीति के लिए यह ठीक है — इन सरलीकरणों की लागत PnL के 1% से भी काफ़ी कम होती है। लेकिन ऐसी लेटेंसी आर्बिट्राज रणनीति के लिए जो प्रति ट्रेड 1–3 पिप कमाती है और जिसका भाग्य 100ms की विंडो में तय होता है, इनमें से हर सरलीकरण घातक है:
100ms का कीमत अंतर M1 बार के भीतर दिखाई ही नहीं देता — बार OHLC दिखाता है, बार के भीतर की टिक स्ट्रीम नहीं। बार-रीप्ले बैकटेस्टर लेटेंसी आर्बिट्राज सिग्नल को सही ढंग से पहचान भी नहीं सकते।
यदि ऑर्डर भेजते ही दिखाई गई कीमत पर फ़िल हो जाते हैं, तो पूरी 50–200ms एक्ज़िक्यूशन विंडो शून्य हो जाती है। बैकटेस्ट हर बार हर सिग्नल का 100% पकड़ लेता है। वास्तविकता में, इन्फ्रास्ट्रक्चर के आधार पर केवल 30%–95% ही पकड़ा जाता है।
वास्तविक आर्बिट्राज अवसर न्यूज़, रोलओवर और कम लिक्विडिटी वाली विंडो के आसपास केंद्रित होते हैं — ठीक तब जब स्प्रेड 3–5x तक बढ़ जाता है। निश्चित-स्प्रेड बैकटेस्ट ऐसे लाभ गिनते हैं जो वास्तविक परिस्थितियों में मौजूद ही नहीं होते।
लेटेंसी आर्बिट्राज पोज़िशन उतनी ही तेज़ी से बंद करता है जितनी तेज़ी से खोलता है। सामान्य बैकटेस्टर या तो क्लोज़-साइड स्लिपेज को पूरी तरह अनदेखा करते हैं या वही निश्चित स्प्रेड लागू करते हैं, जिससे अवास्तविक आशावाद दोगुना हो जाता है।
लाइव ब्रोकर के संपर्क में टिक सकने वाला बैकटेस्ट बनाने के लिए, सिम्युलेटर को राउंड-ट्रिप के हर लेग को स्पष्ट रूप से मॉडल करना होता है। एक गंभीर लेटेंसी आर्बिट्राज बैकटेस्ट को इस विवरण की आवश्यकता होती है:
| घटक | सामान्य सीमा | यह क्या दर्शाता है |
|---|---|---|
| 1. सिग्नल-से-सेंड लेटेंसी | 0.5–20 ms | ट्रिगर टिक प्राप्त होने से ऑर्डर जारी होने तक का समय। भाषा, कोड पाथ और CPU पर निर्भर करता है। कम्पाइल्ड C++ <1ms; हाई-लेवल स्क्रिप्ट 5–20ms। |
| 2. नेटवर्क राउंड-ट्रिप (जाना) | 1–80 ms | आपके ट्रेडिंग होस्ट से ब्रोकर तक वायर टाइम। को-लोकेटेड = 1–3ms; एक ही महानगर = 5–15ms; क्रॉस-रीजन = 30–80ms। |
| 3. ब्रोकर मैचिंग लेटेंसी | 3–100 ms | ब्रोकर के ऑर्डर-मैनेजमेंट और मैचिंग इंजन के भीतर लगने वाला समय। टियर-1 ECN ब्रोकर: 3–15ms। सामान्य रिटेल ब्रोकर: 30–100ms। मैनुअल हैंडलिंग वाले STP ब्रोकर: 100ms+। |
| 4. कन्फ़र्मेशन राउंड-ट्रिप (वापसी) | 1–80 ms | आउटबाउंड नेटवर्क लेग जैसा ही। जब तक आपको फ़िल कन्फ़र्मेशन नहीं मिलता, आपको अपनी फ़िल कीमत का पता नहीं होता — यह जोखिम प्रबंधन और क्लोज़-साइड टाइमिंग के लिए महत्वपूर्ण है। |
किसी सामान्य VPS से सामान्य रिटेल ब्रोकर के माध्यम से एक आम रिटेल लेटेंसी आर्बिट्राज डिप्लॉयमेंट में, ये चार घटक मिलकर लगभग 80–180ms हो जाते हैं — ठीक उस खतरे के क्षेत्र में जहाँ सिग्नल कैप्चर 50% से नीचे गिर जाता है। किसी तेज़ ECN ब्रोकर के माध्यम से को-लोकेटेड डिप्लॉयमेंट में, वही घटक मिलकर 5–20ms होते हैं — खाई से काफ़ी नीचे।
लेटेंसी आर्बिट्राज रणनीति के हर ईमानदार बैकटेस्ट को ट्रेडर को ये लेटेंसी कॉन्फ़िगर करने और उनका प्रभाव देखने देना चाहिए। SharpTrader Optimizer एक्ज़िक्यूशन लेटेंसी को एक कॉन्फ़िगर करने योग्य पैरामीटर (मिलीसेकंड में) के रूप में मॉडल करता है, जो वास्तविक ऐतिहासिक टिक डेटा के ऊपर, सिमुलेशन के समय हर ऑर्डर पर लागू होता है।
तीन चीज़ें मौजूद होनी चाहिए। हर एक आवश्यक है; कोई भी अकेले पर्याप्त नहीं है।
सामान्य रिटेल बैकटेस्टर बार के OHLC मानों के बीच इंटरपोलेशन करके “टिक” डेटा भरते हैं। वे जो सिंथेटिक टिक बनाते हैं, वे बार में यादृच्छिक बिंदुओं पर बार के हाई और लो को छूते हैं, ओपन और क्लोज़ के बीच सहजता से। वास्तविक बाज़ार इस तरह नहीं चलते — वे छलांग लगाते हैं। जिस 1.5-पिप लेटेंसी आर्बिट्राज सिग्नल को आप पकड़ना चाहते हैं, वह ठीक ऐसी ही छलांग है जिसे इंटरपोलेटेड टिक डेटा इतना समतल कर देता है कि वह गायब हो जाती है।
एक गंभीर बैकटेस्ट ब्रोकर के मैचिंग इंजन (या लंदन-स्रोत संस्थागत डेटा जैसी किसी साफ़ रेफ़रेंस फ़ीड) से रिकॉर्ड किए गए वास्तविक bid/ask टिक रीप्ले करता है। हर टिक में एक टाइमस्टैम्प, एक bid और एक ask होता है। रणनीति उन्हें उसी क्रम में, उसी टाइमिंग के साथ देखती है, जैसे लाइव डिप्लॉयमेंट देखता।
ट्रेडर वह राउंड-ट्रिप एक्ज़िक्यूशन टाइम T (मिलीसेकंड में) कॉन्फ़िगर करता है जिसकी उसे लाइव में उम्मीद है। जब रणनीति ऑर्डर जारी करती है, तो सिम्युलेटर घड़ी को रिक्वेस्ट-लेग वाले हिस्से जितना आगे बढ़ाता है — आमतौर पर T/2, क्योंकि केवल सिग्नल और ब्रोकर-साइड मैचिंग के बीच का समय ही फ़िल कीमत को प्रभावित करता है (रिस्पॉन्स लेग केवल रणनीति को बताता है कि क्या हो चुका है)। यदि T = 80ms है, तो सिम्युलेटर सिग्नल के 40ms बाद की टिक स्ट्रीम देखता है और उसी टिक के bid/ask को फ़िल कीमत के रूप में उपयोग करता है — सिग्नल ट्रिगर करने वाले टिक को नहीं।
यह एक बदलाव — सिग्नल और फ़िल के बीच घड़ी को आगे बढ़ाना — वास्तविक लेटेंसी पर खाई को दोबारा दिखा देता है। यह बैकटेस्ट को डिटर्मिनिस्टिक भी बनाता है: उसी टिक स्ट्रीम पर वही रणनीति T = 50ms बनाम T = 150ms पर स्पष्ट रूप से अलग परिणाम देती है, और ट्रेडर ठीक-ठीक देख सकता है कि रणनीति कहाँ काम करना बंद कर देती है।
हर फ़िल पर वास्तविक स्लिपेज वही होता है जो टिक वॉक ने उत्पन्न किया — यह सिमुलेशन का आउटपुट है, कोई संख्या नहीं जिसका ट्रेडर को अनुमान लगाना पड़े। कुछ फ़िल अनुकूल होते हैं (पॉज़िटिव स्लिपेज), कुछ खराब (नेगेटिव), और उनका परिमाण उन मिलीसेकंड के दौरान वास्तविक टिक अस्थिरता के अनुसार होता है। यही वह यथार्थवादी वितरण है जो हर सामान्य रिटेल बैकटेस्टर में गायब है।
लेटेंसी आर्बिट्राज उतनी ही तेज़ी से बंद होता है जितनी तेज़ी से खुलता है। एग्ज़िट एंट्री के 200–800ms बाद, एक अभिसरित होती कीमत पर होता है। यदि सिम्युलेटर एंट्री और एग्ज़िट पर वही निश्चित स्प्रेड लागू करता है, तो वह दो चीज़ें चूक जाता है: (1) लेटेंसी विंडो से एंट्री स्लिपेज, और (2) क्लोज़-साइड राउंड-ट्रिप के दौरान कीमत के वापस खिसकने से एग्ज़िट स्लिपेज। एक वास्तविक मॉडल आपको ओपन और क्लोज़ पर एक्ज़िक्यूशन टाइम स्वतंत्र रूप से कॉन्फ़िगर करने देता है — जो वास्तविक ब्रोकर व्यवहार को दर्शाता है, जहाँ एग्ज़िट अक्सर धीमे रूटिंग पाथ से गुज़रते हैं — और टिक स्ट्रीम से हर लेग का स्लिपेज स्वचालित रूप से निर्धारित करता है।
यहाँ एक SharpTrader लेटेंसी आर्बिट्राज रणनीति का प्रतिनिधि परिणाम है, जिसे EUR/USD के 30 दिनों के टिक डेटा पर समान पैरामीटर लेकिन तीन अलग-अलग एक्ज़िक्यूशन-लेटेंसी कॉन्फ़िगरेशन के साथ बैकटेस्ट किया गया। ये आँकड़े BJF Feed (लंदन / टोक्यो / NY) बैकटेस्ट में हमें आमतौर पर दिखने वाले आँकड़ों जैसे हैं।
| मेट्रिक | 0ms (काल्पनिक) | 50ms (नज़दीकी VPS) | 150ms (लंबी दूरी) |
|---|---|---|---|
| जारी किए गए सिग्नल | 2,847 | 2,847 | 2,847 |
| एज पर फ़िल हुए सिग्नल | 2,847 (100%) | 1,983 (70%) | 854 (30%) |
| औसत पकड़े गए पिप | 1.42 | 0.98 | 0.21 |
| एंट्री पर वास्तविक स्लिपेज (टिक-वॉक आउटपुट) | 0.0 पिप | 0.3 पिप | 0.9 पिप |
| प्रति ट्रेड नेट PnL | +0.82 पिप | +0.48 पिप | −0.31 पिप |
| मासिक रिटर्न (1 लॉट) | +233% | +137% | −88% |
0ms कॉलम वह “बैकटेस्ट फ़ैंटेसी” है जो सामान्य टूल बनाते हैं। 50ms कॉलम दिखाता है कि अच्छी तरह डिप्लॉय की गई लेटेंसी आर्बिट्राज रणनीति वास्तव में कैसी दिखती है। 150ms कॉलम वह है जो अधिकांश रिटेल ट्रेडर्स अनजाने में चलाते हैं, जब वे किसी सामान्य VPS पर रणनीति शुरू करते हैं और किसी सामान्य ब्रोकर के माध्यम से ट्रेड करते हैं, बिना यह समझे कि उनका राउंड-ट्रिप खाई पर कहाँ पड़ता है।
वही रणनीति बेहद लाभदायक, मामूली लाभदायक या निश्चित नुकसान वाली हो सकती है — केवल एक ऐसी संख्या पर निर्भर करते हुए जिसे कोई भी सामान्य बैकटेस्टर मॉडल नहीं करता।
रिटेल लेटेंसी आर्बिट्राज बैकटेस्ट में एक्ज़िक्यूशन लेटेंसी सबसे कम मॉडल किया जाने वाला वेरिएबल है, लेकिन यह अकेला नहीं है। एक भरोसेमंद बैकटेस्ट तीन चीज़ों को जोड़ता है, और हर एक दूसरों के प्रभाव को बढ़ाता है:
खाई को उजागर करती है। बताती है कि रणनीति को लाभदायक होने के लिए वास्तव में किस इन्फ्रास्ट्रक्चर की आवश्यकता है, और किस बिंदु पर आपका एज गायब हो जाता है।
इस तथ्य को पकड़ता है कि आर्बिट्राज अवसर ठीक तब केंद्रित होते हैं जब स्प्रेड बढ़ता है। निश्चित-स्प्रेड बैकटेस्ट ऐसे लाभ गिनता है जो उन क्षणों में भौतिक रूप से मौजूद ही नहीं हो सकते।
उन रणनीतियों को पकड़ता है जो इन-सैंपल में अच्छी दिखती हैं क्योंकि ऑप्टिमाइज़र ने ऐसा पैरामीटर सेट ढूँढ लिया जो इन-सैंपल अवधि के शोर में फ़िट बैठता है। वॉक-फ़ॉरवर्ड के बिना, आपका बैकटेस्ट केवल अतीत का एक रिज़्यूमे है।
एक लेटेंसी आर्बिट्राज ट्रेड में दो स्लिपेज इवेंट होते हैं — ओपन और क्लोज़। अधिकांश बैकटेस्ट एक (या शून्य) को मॉडल करते हैं और आशावाद को दोगुना कर देते हैं।
जब ये चारों मौजूद होते हैं, तो बैकटेस्ट मार्केटिंग टूल नहीं रहता और पूर्वानुमान का टूल बन जाता है। इससे मिलने वाले आँकड़े लाइव परिणामों से 50–200% भटकने के बजाय 10–20% के भीतर आने लगते हैं — इतने करीब कि पोज़िशन साइज़िंग, पूँजी आवंटन और ब्रोकर चयन के निर्णय वास्तव में बैकटेस्ट के आधार पर लिए जा सकें।
इंडस्ट्री का सामान्य नियम: लाइव ड्रॉडाउन बैकटेस्टेड ड्रॉडाउन का 1.5x से 2x होने की उम्मीद करें। सामान्य बैकटेस्टर पर चलने वाली लेटेंसी आर्बिट्राज रणनीतियों के लिए यह अनुपात 5x से 10x के करीब होता है — क्योंकि बैकटेस्ट ने एक्ज़िक्यूशन लेटेंसी, वेरिएबल स्प्रेड या दोनों-लेग स्लिपेज को मॉडल नहीं किया है। इन्हें शामिल करने के बाद 1.5–2x नियम लागू होता है; उससे पहले बैकटेस्ट का कोई पूर्वानुमान मूल्य नहीं होता।
ऑप्टिमाइज़ेशन को कम से कम तीन लेटेंसी कॉन्फ़िगरेशन पर चलाएँ: 10ms (सबसे अच्छी स्थिति, को-लोकेटेड), 50ms (नज़दीकी VPS), और 150ms (सामान्य VPS, दूर का ब्रोकर)। यदि रणनीति केवल 10ms पर लाभदायक है, तो आपके सामने डिप्लॉयमेंट की समस्या है — इसे ट्रेड करने से पहले आपको को-लोकेशन योजना चाहिए। यदि यह 50ms पर लाभदायक है लेकिन 150ms पर नहीं, तो आपका VPS चुनाव और ब्रोकर चयन ही पूरा खेल बन जाते हैं।
तीन स्तर: (1) अपने ट्रेडिंग होस्ट से ब्रोकर के ऑर्डर एंट्री एंडपॉइंट को पिंग करें — इससे आपको कच्चा नेटवर्क राउंड-ट्रिप मिलता है; (2) शांत अवधि में एक छोटा टेस्ट ऑर्डर भेजें और सिग्नल-जारी होने बनाम फ़िल-कन्फ़र्मेशन का टाइमस्टैम्प लें — इस अंतर में ब्रोकर मैचिंग लेटेंसी शामिल होती है; (3) कई सेशनों में दोहराएँ — लेटेंसी ब्रोकर लोड, दिन के समय और रूट के साथ बदलती है। आपके डिप्लॉयमेंट के लिए वास्तविक आँकड़ा कई मापों का मीडियन है, सबसे अच्छा पिंग नहीं।
हाँ — और भी तंग विंडो के साथ। न्यूज़ ट्रेडिंग विंडो 10–50ms चौड़ी हो सकती हैं। एक्ज़िक्यूशन-टाइम गैप की समस्या वही है, बस छोटी विंडो में सिमटी हुई। वही बैकटेस्ट इन्फ्रास्ट्रक्चर (वास्तविक टिक, कॉन्फ़िगर करने योग्य एक्ज़िक्यूशन लेटेंसी, वेरिएबल स्प्रेड) आवश्यक है, और लेटेंसी सहनशीलता और भी कम होती है।
दोनों घटनाओं का कारण एक ही है: लिक्विडिटी प्रोवाइडर कीमत को लेकर अनिश्चित हो जाते हैं और कोट वापस ले लेते हैं। जब फ़ास्ट फ़ीड उछलती है, तो स्लो ब्रोकर को लिक्विडिटी देने वाले LP खुद को पिक-ऑफ़ होने से बचाने के लिए थोड़ी देर के लिए अपने कोट चौड़े कर देते हैं। इसलिए जिस क्षण अंतर खुलता है, उसी क्षण उसे पकड़ने के लिए स्प्रेड भी चौड़ा हो जाता है। निश्चित-स्प्रेड बैकटेस्ट इसे नहीं देखता और नेट एज को 30–50% अधिक आँकता है।
टियर-1 ECN ब्रोकरों के विरुद्ध संस्थागत-शैली के लेटेंसी आर्बिट्राज के लिए, हाँ — खेल का मैदान 5ms से कम राउंड-ट्रिप पर पहुँच गया है और इसके लिए क्रॉस-कनेक्ट या प्रॉक्सिमिटी होस्टिंग चाहिए। धीमे रिटेल ब्रोकरों के विरुद्ध रिटेल-शैली के लेटेंसी आर्बिट्राज के लिए, नहीं — 30–80ms के राउंड-ट्रिप अब भी एज दे सकते हैं, क्योंकि स्लो ब्रोकर की विंडो चौड़ी होती है। सही प्रश्न “क्या को-लोकेशन आवश्यक है” नहीं, बल्कि “क्या मेरा राउंड-ट्रिप उस ब्रोकर की विंडो में फ़िट बैठता है जिसके विरुद्ध मैं ट्रेड कर रहा हूँ” है। एक्ज़िक्यूशन-लेटेंसी को ध्यान में रखने वाला बैकटेस्टिंग ठीक इसी प्रश्न का उत्तर देता है।
घंटों या दिनों तक पोज़िशन होल्ड करने वाली ट्रेंड-फ़ॉलोइंग रणनीतियों के लिए, कुछ सौ मिलीसेकंड की एक्ज़िक्यूशन लेटेंसी नगण्य होती है। लेटेंसी आर्बिट्राज के लिए, वही मिलीसेकंड ही पूरा सिग्नल होते हैं। सामान्य फ़ॉरेक्स बैकटेस्टिंग इन्फ्रास्ट्रक्चर पहली स्थिति के लिए बना है और दूसरी स्थिति के लिए चुपचाप बेकार परिणाम देगा। इसीलिए समर्पित आर्बिट्राज बैकटेस्टिंग टूल एक अलग श्रेणी के रूप में मौजूद हैं।
वे इष्टतम रणनीति को बदलते हैं, विश्लेषण को नहीं। एंटी-आर्बिट्राज प्लगइन्स चलाने वाले ब्रोकर (विलंबित एक्ज़िक्यूशन, last-look, लाभ पर रीकोट, hold-then-fill) प्रभावी रूप से प्राकृतिक लेटेंसी के ऊपर कृत्रिम एक्ज़िक्यूशन लेटेंसी जोड़ देते हैं। कॉन्फ़िगर करने योग्य एक्ज़िक्यूशन लेटेंसी वाला बैकटेस्ट आपको ब्रोकर के एंटी-आर्बिट्राज व्यवहार को सिम्युलेट करने और यह तय करने देता है कि उस ब्रोकर के विरुद्ध रणनीति अब भी व्यवहार्य है या आपको वेन्यू बदलना होगा।
5–8 पैरामीटर वाली लेटेंसी आर्बिट्राज रणनीति के लिए, सामान्य ग्रिड 30,000–100,000 संयोजनों का होता है — जिसमें 3–5 एक्ज़िक्यूशन-टाइम सेटिंग्स स्वीप किए गए आयामों में से एक के रूप में शामिल हैं। उद्देश्य लाभप्रदता क्लस्टर खोजना है — ऐसी रेंज जहाँ रणनीति कई पैरामीटर मानों पर लाभदायक हो, न कि अकेले “भाग्यशाली” स्पाइक। अकेली चोटियाँ कर्व-फ़िटिंग हैं; क्लस्टर मज़बूती हैं। एक सामान्य रिटेल वर्कस्टेशन पर यथार्थवादी आधार के रूप में, 4-कोर CPU पर XAUUSD के 1 सप्ताह के टिक डेटा के विरुद्ध 30,000-संयोजन ग्रिड लगभग 12 घंटे में पूरा होता है; वही ग्रिड 16 कोर पर लगभग 3 घंटे लेता है। SharpTrader Optimizer मल्टी-कोर हार्डवेयर पर प्रति रन 100,000+ संयोजन संभालता है।
यह संस्थागत एल्गोरिदमिक ट्रेडिंग में एक अनुभवजन्य अवलोकन है: अच्छी तरह मॉडल किया गया बैकटेस्ट भी लाइव ड्रॉडाउन को लगभग 50–100% कम आँकता है, क्योंकि कुछ वास्तविक घर्षण (ब्रोकर रिजेक्शन, वीकेंड गैप, रेजीम परिवर्तन) को साफ़ तरीके से मॉडल नहीं किया जा सकता। यह नियम मानता है कि बैकटेस्ट में पहले से ही यथार्थवादी एक्ज़िक्यूशन लेटेंसी, वेरिएबल स्प्रेड और दोनों लेग पर स्लिपेज शामिल हैं। यदि ये गायब हैं, तो गुणक कहीं अधिक होता है — विशेष रूप से लेटेंसी आर्बिट्राज के लिए 5x से 10x।
अवधारणा के रूप में बिल्कुल समान। क्रिप्टो क्रॉस-एक्सचेंज आर्बिट्राज में एक्ज़िक्यूशन-टाइम विंडो आमतौर पर 200ms–2s होती है (फ़ॉरेक्स से धीमी, क्योंकि एक्सचेंज एक-दूसरे से अधिक दूर हैं और ऑर्डरबुक गहरी लेकिन अपडेट होने में धीमी होती हैं)। वही तीन तत्व — टिक रीप्ले, कॉन्फ़िगर करने योग्य एक्ज़िक्यूशन लेटेंसी, वेरिएबल स्प्रेड — ईमानदार बैकटेस्ट देते हैं। BJF का क्रिप्टो आर्बिट्राज टूलिंग एक्सचेंज API और ऑर्डरबुक डेप्थ के लिए अनुकूलित उसी आर्किटेक्चर का उपयोग करता है।
SharpTrader Optimizer एकमात्र रिटेल-सुलभ बैकटेस्टर है जो कॉन्फ़िगर करने योग्य एक्ज़िक्यूशन टाइम, वास्तविक टिक रीप्ले, प्रति टिक वेरिएबल स्प्रेड और दोनों लेग पर टिक-आधारित स्लिपेज को मॉडल करता है — वे चार वेरिएबल जो तय करते हैं कि लेटेंसी आर्बिट्राज रणनीति वास्तविक है या काल्पनिक। 100,000+ पैरामीटर संयोजनों पर मल्टी-कोर ग्रिड ऑप्टिमाइज़ेशन दिनों में नहीं, घंटों में पूरा होता है।