4 اعداد، سب ہمارے اپنے پیپر-ٹریڈنگ اسٹیک سے ناپے گئے، ایک سٹریٹجی، 1-منٹ BTCUSDT پرپیچوئل سگنلز، 31 دن اور 1,418 آرڈرز۔ بار کلوز سے ایکسچینج کی جانب آرڈر ack ہونے تک میڈین وقت: 195 ms۔ 99واں پرسنٹائل: 2,970 ms۔ سب سے زیادہ حقیقی وولٹیلیٹی والے 1% منٹوں کا میڈین: 840 ms۔ اور وہ لیٹنسی کانسٹنٹ جو پچھلے سال کے زیادہ تر حصے بیک ٹیسٹ config میں پڑا رہا: 0۔
ان میں سے 3 اعداد غیر دلچسپ ہیں۔ سب جانتے ہیں کہ صفر غلط ہے، سب آخرکار اسے کسی چیز سے بدل دیتے ہیں، اور وہ چیز تقریباً ہمیشہ ایک کانسٹنٹ ہوتی ہے جو کسی نے اندازے سے چن لی۔ 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 |
دلچسپ حصے سے پہلے 2 باتیں نوٹ کریں۔ پہلی، میڈینز جوڑ نہیں کھاتے۔ 128 + 3 + 11 + 47 = 189، اور ناپا گیا اینڈ-ٹو-اینڈ میڈین 195 ہے۔ پرسنٹائلز جمع نہیں ہوتے، اور اگر آپ ہر مرحلے کے p99 جوڑ کر لیٹنسی کا تخمینہ بنائیں گے تو 3,128 ms نکلے گا جبکہ حقیقی p99 2,970 ہے۔ یہاں کافی قریب، مگر جب مراحل دوسری سمت مربوط ہوں تو بری طرح غلط۔ پورا پاتھ ناپیں۔
دوسری، سب سے اوپر والی قطار دیکھیں۔ میڈین بجٹ کا 2/3 اس انتظار میں خرچ ہوتا ہے کہ ایکسچینج بتائے بار بند ہوئی۔ نیٹ ورک نہیں، آپ کا کوڈ نہیں، آرڈر روٹنگ نہیں۔ وینیو ٹریڈز کو kline میں جمع کرتا ہے، فیصلہ کرتا ہے کہ منٹ ختم ہو گیا، اور پش کر دیتا ہے۔ اس پش کے آگے ایک قطار ہے، اور وہ قطار اس سٹریم کے ہر دوسرے سبسکرائبر کے ساتھ مشترک ہے۔
وہ 840
ان 1,418 آرڈرز میں سے ہر ایک کو اس منٹ کی حقیقی وولٹیلیٹی کے بکٹ میں ڈالیں جس نے سگنل پیدا کیا، اور ڈسٹریبیوشن بکھر جاتی ہے۔
| سگنل-بار وولٹیلیٹی بکٹ | آرڈرز | p50 اینڈ-ٹو-اینڈ | p99 اینڈ-ٹو-اینڈ |
|---|---|---|---|
| نچلی چوتھائی | 201 | 141 ms | 488 ms |
| درمیانی 2 چوتھائیاں | 796 | 183 ms | 1,210 ms |
| اوپری چوتھائی | 407 | 312 ms | 2,880 ms |
| تمام منٹوں کا ٹاپ 1% | 14 | 840 ms | 4,100 ms |
ہر مرحلہ ساتھ ساتھ خراب ہوتا ہے، اسی لیے یہ مرکب ہو جاتا ہے۔ وینیو کی aggregation اور براڈکاسٹ قطار matching-engine کے لوڈ سے بھرتی ہے، اس لیے 11,000 ٹریڈز والی منٹ 600 والی منٹ سے دیر سے پش ہوتی ہے۔ آپ کا اپنا پراسیس اسی ونڈو میں زیادہ ڈیپتھ اپڈیٹس اور زیادہ ٹریڈ پرنٹس سنبھال رہا ہوتا ہے، اس لیے وہ فیچر اپڈیٹ جو عام طور پر 3 ms لیتی ہے 28 لے لیتی ہے۔ REST آرڈر پاتھ باقی سب کی گھبراہٹ سے مقابلہ کر رہا ہوتا ہے، اور کبھی کبھار وہ 503-and-retry نظر آنے لگتا ہے جو اکیلے ایک پورا سیکنڈ چٹ کر جاتا ہے۔ ہمارے سیمپل میں سگنل-بار ٹریڈ کاؤنٹ اور اینڈ-ٹو-اینڈ لیٹنسی کا correlation coefficient 0.41 تھا۔ بہت بڑا نہیں۔ ایک کانسٹنٹ برباد کرنے کے لیے کافی۔
اور جو سٹریٹجیز فرسٹ-پاس اسکرین سے بچ نکلتی ہیں، وہ غالب اکثریت میں وہی ہیں جو بریک آؤٹس، ریورسلز، ڈس لوکیشنز، لیکویڈیشن کیسکیڈز ٹریڈ کرتی ہیں۔ وہ ٹھیک اسی بکٹ میں فائر ہوتی ہیں جہاں لیٹنسی بدترین ہے۔ مومینٹم سگنل جو صرف تب چلتا ہے جب منٹ 40 bps ہل چکی ہو، ساختی طور پر یہ بندوبست کر چکا ہوتا ہے کہ اسے ہمیشہ آپ کے اسٹیک کا سب سے سست ورژن ہی ملے۔
ہم نے ایک بار پورا دن ایک 3.6-سیکنڈ آؤٹ لائر کے پیچھے گزارا جو تقریباً ہر رات ایک ہی وقت پر نمودار ہوتا تھا۔ وہ logrotate تھا، اسی EBS والیوم پر 2 GB فائل کو copy-truncate کر رہا تھا جس پر پراسیس لکھ رہا تھا، اور ایونٹ لوپ اٹک جاتا تھا۔ مارکیٹ بے قصور تھی۔ پہلے ناپیں، پھر مائیکرو سٹرکچر کو الزام دیں۔
اس کا فل پر کیا اثر پڑتا ہے
انتظار کرتے ہوئے قیمت ڈرفٹ کرتی ہے۔ ایک تصادفی منٹ پر ہمارے 195 ms میڈین کے دوران اوسط مخالف حرکت سگنل کی سمت کے خلاف تقریباً 1.1 bps تھی۔ 312 ms والے اوپری چوتھائی منٹوں پر 5.8 bps۔ 840 ms والے ٹاپ-1% منٹوں پر آرڈر کے بک تک پہنچنے سے پہلے تقریباً 14 bps مخالف ڈرفٹ۔
BTC perps پر اسپریڈ اس میں بمشکل حصہ لیتا ہے: 84,000 کے کوٹ پر 1 ٹک 0.012 bps ہے، اس لیے نقصان کراسنگ لاگت نہیں بلکہ مخالف ڈرفٹ ہے۔ وہی سٹریٹجی mid-cap perp پر لے جائیں تو دوسری اصطلاح جاگ اٹھتی ہے — ہمارے سیمپل میں top-of-book اسپریڈ پرسکون منٹوں میں 1.4 bps سے اوپری چوتھائی میں 6.2 bps ہو گیا، اور اس ٹچ پر ڈیپتھ آدھے سے زیادہ گھٹ گئی۔ آپ ڈرفٹ بھی ادا کرتے ہیں، چوڑا اسپریڈ بھی، اور خراب ڈیپتھ بھی، سب ایک ساتھ، سب اس لیے کہ سبب مشترک ہے۔
جب ہم نے فلیٹ 200 ms کی بجائے per-bar مشروط لیٹنسی کے ساتھ وہی 31 دن ریپلے کیے تو بیک ٹیسٹ کی اوسط انٹری قیمت 3.1 bps خراب ہو گئی، تقریباً پوری کی پوری 9% ٹریڈز میں مرکوز۔ بیک ٹیسٹ-بمقابلہ-پیپر انٹری-قیمت کا فرق 4.2 bps سے 0.9 bps رہ گیا۔ اس سٹریٹجی کا In-sample Sharpe 1.7 سے 1.1 ہو گیا، جو ایماندار عدد ہے اور ہمیشہ سے تھا۔
تو config میں حقیقت میں کیا رکھیں
سکلر نہیں۔ اب ہم یہ چلاتے ہیں:
- سیمپل کریں، سیٹ نہ کریں۔ ہر simulated آرڈر کی لیٹنسی اس بار کی اپنی سرگرمی پر مشروط empirical ڈسٹریبیوشن سے نکالیں — ٹریڈ کاؤنٹ اور مطلق ریٹرن کافی ہیں، اور دونوں پہلے سے standard kline میں موجود ہیں۔ ہر وینیو، ہر آرڈر ٹائپ کے لیے ایک بار فٹ کریں، ماہانہ ریفٹ کریں۔
- ٹیل رکھیں۔ lognormal فٹ کر کے فارغ نہ ہو جائیں؛ p99 ریٹرائی سٹورمز اور GC پازز میں رہتا ہے جنہیں کوئی ہموار ڈسٹریبیوشن دوبارہ پیدا نہیں کرتی۔ ہم p95 سے اوپر resampled ٹیل کے ساتھ empirical کوانٹائلز استعمال کرتے ہیں۔
- لیٹنسی کینسلز پر بھی لاگو ہوتی ہے۔ stop-replacement یا hedge cancel اسی تاخیر کا شکار ہے، اور تیز مارکیٹوں میں آپ کا cancel فل سے دوڑ رہا ہوتا ہے۔ اگر آپ کا simulator فوراً cancel کر دے تو آپ کا رسک ماڈل فکشن ہے۔
- staleness گارڈ لگائیں اور اسے simulate کریں۔ ہمارا کوئی بھی سگنل گرا دیتا ہے جس کی بار آمد پر 1.5 سیکنڈ سے زیادہ پرانی ہو۔ یہ حقیقی رویہ ہے حقیقی لاگت کے ساتھ — یہ خاموشی سے ٹریڈز ہٹا دیتا ہے، اور بیک ٹیسٹ میں بھی وہی ٹریڈز ہٹانی ہوں گی۔
- پیپر کے خلاف recalibrate کریں۔ پیپر ٹریڈنگ وہ جگہ ہے جہاں ground truth ملتی ہے۔ ہر آرڈر پر 4 ہوپ ٹائم سٹیمپس لاگ کریں اور ہفتہ وار simulator کی فرض کردہ ڈسٹریبیوشنز سے diff کریں۔
دوسری اثاثہ کلاسز، وہی بیماری۔ US ایکوئٹیز: consolidated tape آپ کے بروکر کی تاخیر کے اوپر اپنی aggregation delay جوڑتی ہے، اور اسی ساختی وجہ سے میسج-ریٹ دباؤ پر چوڑی ہو جاتی ہے۔ Prediction markets: زیادہ تر venues پر صرف REST آرڈر انٹری، اور ہم نے sub-100 ms میڈینز ناپے ہیں جو resolution ایونٹ آنے اور سب کے بیک وقت پہنچنے پر کئی سیکنڈز تک جا نکلتے ہیں۔ Crypto options: جس کوٹ سے آپ پرائس کر رہے ہوں وہ اس عین منٹ میں 2 سیکنڈ stale ہو سکتا ہے جب underlying ہلا ہو۔
غلطی کی عمومی شکل یہ ہے کہ execution پیرامیٹر کو آزاد کانسٹنٹ سمجھ لیا جائے جبکہ وہ اسی سٹیٹ ویری ایبل کا فنکشن ہے جو آپ کے سگنل کو چلا رہا ہے۔ فیسز سیدھی رہتی ہیں؛ فنڈنگ سیدھی رہتی ہے؛ لیٹنسی نہیں۔ اگر اس سب سے ایک عدد دماغ میں رکھنا ہے تو ratio رکھیں: ہمارا p99 ہمارے میڈین سے 15 گنا ہے، اور ہمارا سگنل غیر متناسب طور پر p99 والے سرے کے قریب آتا ہے۔
جا کر 4 ہوپس کو instrument کریں۔ ایک دوپہر کا کام ہے اور یہ آپ کی سٹریٹجی کے بارے میں parameter search کے ایک اور ہفتے سے زیادہ بتا دے گا۔
← تمام پوسٹس


