चार संख्याएँ, सभी हमारे अपने पेपर-ट्रेडिंग स्टैक से मापी गईं, एक रणनीति, 1-मिनट BTCUSDT परपेचुअल सिग्नल, 31 दिन और 1,418 ऑर्डर। बार क्लोज से एक्सचेंज द्वारा ऑर्डर स्वीकार किए जाने तक का मीडियन समय: 195 ms। 99वाँ पर्सेंटाइल: 2,970 ms। सबसे अधिक रियलाइज्ड वोलैटिलिटी वाले 1% मिनटों पर मीडियन: 840 ms। और पिछले साल के अधिकांश समय बैकटेस्ट कॉन्फिग में बैठी लेटेंसी कॉन्स्टेंट: 0।
उनमें से तीन संख्याएँ उबाऊ हैं। सब जानते हैं कि शून्य गलत है, सब अंततः उसे किसी चीज़ से बदल देते हैं, और वह चीज़ लगभग हमेशा कोई कॉन्स्टेंट होती है जिसे किसी ने अंदाज़े से चुन लिया। 100 ms, 250 ms, "चलो कंज़र्वेटिव रहें, 500." जो संख्या सच में मायने रखती है वह 840 है, क्योंकि यह कहती है कि आपकी लेटेंसी मार्केट स्टेट का फंक्शन है, और जिन मार्केट स्टेट्स में यह फट पड़ती है वही वे स्टेट्स हैं जहाँ आपका सिग्नल सोचता है कि उसे कुछ मिल गया है।
ये 195 मिलीसेकंड कहाँ जाते हैं
यहाँ पूरा बजट है, हर हॉप पर लिखे monotonic-clock टाइमस्टैम्प के साथ चरण-दर-चरण मापा गया। बॉक्स ap-northeast-1 में एक AWS इंस्टेंस है, वेन्यू के एंडपॉइंट्स के उसी रीजन में, जो एक नॉन-कोलोकेटेड रिटेल-शैली सेटअप के लिए जितना अच्छा हो सकता है लगभग उतना ही है।
| चरण | p50 | p95 | p99 |
|---|---|---|---|
| बार क्लोज → WS kline-closed इवेंट प्राप्त | 128 ms | 402 ms | 1,940 ms |
| पार्स + फीचर स्टेट अपडेट | 3 ms | 9 ms | 28 ms |
| निर्णय: मॉडल eval + रिस्क चेक | 11 ms | 22 ms | 60 ms |
| ऑर्डर सबमिट → एक्सचेंज ack | 47 ms | 180 ms | 1,100 ms |
| एंड-टू-एंड (मापा गया, जोड़ा नहीं) | 195 ms | 690 ms | 2,970 ms |
दिलचस्प हिस्से से पहले दो बातें। पहला, मीडियन जुड़ते नहीं: 128 + 3 + 11 + 47 = 189, और मापा गया एंड-टू-एंड मीडियन 195 है। पर्सेंटाइल एडिटिव नहीं होते, और अगर आप प्रति-चरण p99 जोड़कर लेटेंसी का अनुमान लगाएँगे तो 3,128 ms मिलेगा जबकि असली p99 2,970 है। यहाँ काफ़ी करीब, उल्टी दिशा में चरण सहसंबद्ध हों तो बेतहाशा गलत। पूरा पथ नापें।
दूसरा, ऊपरी पंक्ति देखें। मीडियन बजट का दो-तिहाई एक्सचेंज के यह बताने के इंतज़ार में खर्च होता है कि बार क्लोज हो गया। नेटवर्क नहीं, आपका कोड नहीं, ऑर्डर राउटिंग नहीं। वेन्यू ट्रेड्स को kline में एग्रीगेट करता है, तय करता है कि मिनट खत्म हो गया, और पुश करता है। उस पुश के आगे एक क्यू होती है, और वह क्यू उस स्ट्रीम के हर दूसरे सब्सक्राइबर के साथ साझा है।
वह 840
उन 1,418 ऑर्डर में से हर एक को उस मिनट की रियलाइज्ड वोलैटिलिटी के अनुसार बकेट करें जिसने सिग्नल पैदा किया, और डिस्ट्रीब्यूशन बिखर जाती है।
| सिग्नल-बार वोलैटिलिटी बकेट | ऑर्डर | p50 एंड-टू-एंड | p99 एंड-टू-एंड |
|---|---|---|---|
| निचला क्वार्टाइल | 201 | 141 ms | 488 ms |
| मध्य के दो क्वार्टाइल | 796 | 183 ms | 1,210 ms |
| ऊपरी क्वार्टाइल | 407 | 312 ms | 2,880 ms |
| सभी मिनटों का टॉप 1% | 14 | 840 ms | 4,100 ms |
हर चरण एक साथ खराब होता है, इसीलिए यह कंपाउंड होता है। वेन्यू की एग्रीगेशन और ब्रॉडकास्ट क्यू मैचिंग-इंजन लोड से भरती है, इसलिए 11,000 ट्रेड वाले मिनट का पुश 600 वाले मिनट से देर से आता है। आपकी अपनी प्रोसेस उसी विंडो में ज़्यादा डेप्थ अपडेट और ज़्यादा ट्रेड प्रिंट हैंडल कर रही होती है, इसलिए फीचर अपडेट जो आमतौर पर 3 ms लेता है, 28 ले लेता है। REST ऑर्डर पथ बाकी सबकी घबराहट से होड़ कर रहा होता है, और कभी-कभार 503-और-रिट्राई दिखने लगते हैं जो अकेले में पूरा एक सेकंड खा जाते हैं। हमारे सैंपल में सिग्नल-बार ट्रेड काउंट और एंड-टू-एंड लेटेंसी के बीच सहसंबंध गुणांक 0.41 था। बहुत बड़ा नहीं। एक कॉन्स्टेंट बर्बाद करने के लिए काफ़ी।
और जो रणनीतियाँ फर्स्ट-पास स्क्रीन पार कर जाती हैं, भारी बहुमत से वे हैं जो ब्रेकआउट, रिवर्सल, डिस्लोकेशन, लिक्विडेशन कैस्केड ट्रेड करती हैं। वे ठीक उसी बकेट में फायर होती हैं जहाँ लेटेंसी सबसे खराब है। एक मोमेंटम सिग्नल जो तभी ट्रिप करता है जब मिनट 40 bps चला हो, वह सिग्नल संरचनात्मक रूप से हमेशा आपके स्टैक के सबसे धीमे संस्करण से सर्व होने का इंतज़ाम कर चुका होता है।
हमने एक बार पूरा दिन एक 3.6-सेकंड आउटलायर का पीछा किया जो हर रात लगभग उसी समय आता था। वह logrotate था, उसी EBS वॉल्यूम पर 2 GB फ़ाइल को copy-truncate कर रहा था जिस पर प्रोसेस लिख रही थी, इवेंट लूप अटक गया। मार्केट निर्दोष था। पहले नापें, फिर माइक्रोस्ट्रक्चर पर दोष मढ़ें।
इसका फिल पर क्या असर पड़ता है
इंतज़ार करते कीमत ड्रिफ्ट करती है। एक रैंडम मिनट पर, हमारे 195 ms मीडियन में औसत प्रतिकूल मूव सिग्नल की दिशा के विरुद्ध लगभग 1.1 bps था। ऊपरी-क्वार्टाइल मिनटों पर 312 ms पर, 5.8 bps। टॉप-1% मिनटों पर 840 ms पर, ऑर्डर के बुक तक पहुँचने से पहले ही लगभग 14 bps का प्रतिकूल ड्रिफ्ट।
BTC परप्स पर स्प्रेड इसमें मुश्किल से शामिल होता है: 84,000 के कोट पर एक टिक 0.012 bps है, इसलिए नुकसान क्रॉसिंग कॉस्ट नहीं बल्कि प्रतिकूल ड्रिफ्ट है। वही रणनीति मिड-कैप परप पर ले जाएँ और दूसरा पद जाग उठता है — हमारे सैंपल में टॉप-ऑफ-बुक स्प्रेड शांत मिनटों में 1.4 bps से ऊपरी क्वार्टाइल में 6.2 bps हो गया, और उस टच पर डेप्थ आधे से ज़्यादा पतली पड़ गई। आप ड्रिफ्ट चुकाते हैं, चौड़ा स्प्रेड चुकाते हैं और खराब डेप्थ चुकाते हैं, सब एक साथ, सब इसलिए क्योंकि उनका कारण एक ही है।
जब हमने उन्हीं 31 दिनों को फ्लैट 200 ms की जगह प्रति-बार कंडीशनल लेटेंसी के साथ रीप्ले किया, बैकटेस्ट की औसत एंट्री कीमत 3.1 bps खराब हो गई, लगभग पूरी तरह 9% ट्रेड्स में सिमटी हुई। बैकटेस्ट-बनाम-पेपर एंट्री-कीमत का अंतर 4.2 bps से गिरकर 0.9 bps रह गया। उस रणनीति का इन-सैंपल Sharpe 1.7 से 1.1 हो गया, जो ईमानदार संख्या है और हमेशा से थी।
तो कॉन्फिग में वास्तव में क्या डालें
कोई स्केलर नहीं। हम अब यह चलाते हैं:
- सैंपल करें, सेट न करें। प्रत्येक सिम्युलेटेड ऑर्डर की लेटेंसी उस बार की अपनी एक्टिविटी पर कंडीशंड एक एम्पिरिकल डिस्ट्रीब्यूशन से निकालें — ट्रेड काउंट और एब्सोल्यूट रिटर्न काफ़ी हैं, और दोनों पहले से एक स्टैंडर्ड kline में होते हैं। प्रति वेन्यू प्रति ऑर्डर टाइप एक बार फिट करें, हर महीने रीफिट करें।
- टेल बनाए रखें। लॉगनॉर्मल फिट करके काम खत्म न मानें; p99 रिट्राई स्टॉर्म और GC पॉज़ में रहता है जिन्हें कोई स्मूद डिस्ट्रीब्यूशन दोहरा नहीं पाती। हम p95 से ऊपर रीसैंपल की गई टेल के साथ एम्पिरिकल क्वांटाइल इस्तेमाल करते हैं।
- लेटेंसी कैंसल पर भी लागू होती है। स्टॉप-रिप्लेसमेंट या हेज कैंसल उसी देरी के अधीन है, और तेज़ मार्केट में आपका कैंसल एक फिल से रेस कर रहा होता है। अगर आपका सिम्युलेटर तुरंत कैंसल कर दे, तो आपका रिस्क मॉडल कपोल-कल्पना है।
- स्टेलनेस गार्ड जोड़ें और उसका सिम्युलेशन करें। हमारा कोई भी सिग्नल ड्रॉप कर देता है जिसका बार पहुँचने पर 1.5 सेकंड से ज़्यादा पुराना हो। यह असली व्यवहार है असली लागत के साथ — यह चुपचाप ट्रेड हटा देता है, और बैकटेस्ट में भी वही ट्रेड हटाने होंगे।
- पेपर के मुकाबले रिकैलिब्रेट करें। पेपर ट्रेडिंग वह जगह है जहाँ ग्राउंड ट्रूथ मिलती है। हर ऑर्डर पर चार हॉप टाइमस्टैम्प लॉग करें और सिम्युलेटर ने जो माना उसके मुकाबले डिस्ट्रीब्यूशन डिफ करें, साप्ताहिक।
दूसरी एसेट क्लास, वही बीमारी। US इक्विटीज़: कंसोलीडेटेड टेप आपके ब्रोकर की देरी के ऊपर अपनी एग्रीगेशन देरी जोड़ती है, और मैसेज-रेट दबाव में उसी संरचनात्मक कारण से चौड़ी हो जाती है। प्रेडिक्शन मार्केट्स: ज़्यादातर वेन्यू पर केवल-REST ऑर्डर एंट्री, और हमने सब-100 ms मीडियन मापे हैं जो रेज़ोल्यूशन इवेंट आने और सबके एक साथ पहुँचने पर कई सेकंड तक चले जाते हैं। क्रिप्टो ऑप्शंस: जिस कोट से आप प्राइस कर रहे हैं वह ठीक उसी मिनट दो सेकंड स्टेल हो सकता है जब अंडरलाइंग चला हो।
गलती का सामान्य रूप यह है कि एक एक्ज़ीक्यूशन पैरामीटर को स्वतंत्र कॉन्स्टेंट मान लेना जब वह उसी स्टेट वेरिएबल का फंक्शन हो जो आपके सिग्नल को चला रहा है। फीस व्यवहार करती है; फंडिंग व्यवहार करती है; लेटेंसी नहीं करती। अगर इस सब से एक संख्या दिमाग में रखनी हो, तो अनुपात रखें: हमारा p99 हमारे मीडियन का पंद्रह गुना है, और हमारा सिग्नल असमान रूप से p99 छोर के पास आता है।
जाकर चारों हॉप इंस्ट्रूमेंट करें। यह एक दोपहर का काम है और पैरामीटर सर्च के एक और हफ्ते से ज़्यादा आपकी रणनीति के बारे में बताएगा।
← सभी पोस्ट


