13 ستمبر، 2026 · ایگزیکیوشن

بیک ٹیسٹ میں کتنی لیٹنسی شامل کرنی چاہیے؟ ہم نے اپنی ہر ملی سیکنڈ ناپ لی

بیک ٹیسٹ میں کتنی لیٹنسی شامل کرنی چاہیے؟ ہم نے اپنی ہر ملی سیکنڈ ناپ لی

4 اعداد، سب ہمارے اپنے پیپر-ٹریڈنگ اسٹیک سے ناپے گئے، ایک سٹریٹجی، 1-منٹ BTCUSDT پرپیچوئل سگنلز، 31 دن اور 1,418 آرڈرز۔ بار کلوز سے ایکسچینج کی جانب آرڈر ack ہونے تک میڈین وقت: 195 ms۔ 99واں پرسنٹائل: 2,970 ms۔ سب سے زیادہ حقیقی وولٹیلیٹی والے 1% منٹوں کا میڈین: 840 ms۔ اور وہ لیٹنسی کانسٹنٹ جو پچھلے سال کے زیادہ تر حصے بیک ٹیسٹ config میں پڑا رہا: 0۔

195 msمیڈین بار-کلوز → آرڈر ack
2,970 msp99، وہی پاتھ
840 msٹاپ-1% وولٹیلیٹی منٹوں میں میڈین

ان میں سے 3 اعداد غیر دلچسپ ہیں۔ سب جانتے ہیں کہ صفر غلط ہے، سب آخرکار اسے کسی چیز سے بدل دیتے ہیں، اور وہ چیز تقریباً ہمیشہ ایک کانسٹنٹ ہوتی ہے جو کسی نے اندازے سے چن لی۔ 100 ms، 250 ms، "محفوظ رہتے ہیں، 500۔" جو عدد حقیقت میں اہم ہے وہ 840 ہے، کیونکہ یہ کہتا ہے کہ آپ کی لیٹنسی مارکیٹ سٹیٹ کا فنکشن ہے، اور جن مارکیٹ سٹیٹس میں یہ پھٹ جاتی ہے وہی سٹیٹس ہیں جہاں آپ کا سگنل سمجھتا ہے کہ اسے کچھ مل گیا ہے۔

195 ملی سیکنڈ کہاں جاتی ہیں

یہ پوری بجٹ ہے، ہر ہوپ پر monotonic-clock ٹائم سٹیمپس لکھ کر مرحلہ بہ مرحلہ ناپی گئی۔ باکس ap-northeast-1 میں ایک AWS انسٹنس ہے، وینیو کے اینڈ پوائنٹس کے اسی ریجن میں، جو نان-کولوکیٹڈ ریٹیل نما سیٹ اپ کے لیے جتنا اچھا ہو سکتا ہے تقریباً اتنا ہی ہے۔

مرحلہp50p95p99
بار کلوز → WS kline-closed ایونٹ موصول128 ms402 ms1,940 ms
پارس + فیچر سٹیٹ اپڈیٹ3 ms9 ms28 ms
فیصلہ: ماڈل eval + رسک چیکس11 ms22 ms60 ms
آرڈر سبمٹ → ایکسچینج ack47 ms180 ms1,100 ms
اینڈ-ٹو-اینڈ (ناپا گیا، جوڑا نہیں)195 ms690 ms2,970 ms

دلچسپ حصے سے پہلے 2 باتیں نوٹ کریں۔ پہلی، میڈینز جوڑ نہیں کھاتے۔ 128 + 3 + 11 + 47 = 189، اور ناپا گیا اینڈ-ٹو-اینڈ میڈین 195 ہے۔ پرسنٹائلز جمع نہیں ہوتے، اور اگر آپ ہر مرحلے کے p99 جوڑ کر لیٹنسی کا تخمینہ بنائیں گے تو 3,128 ms نکلے گا جبکہ حقیقی p99 2,970 ہے۔ یہاں کافی قریب، مگر جب مراحل دوسری سمت مربوط ہوں تو بری طرح غلط۔ پورا پاتھ ناپیں۔

دوسری، سب سے اوپر والی قطار دیکھیں۔ میڈین بجٹ کا 2/3 اس انتظار میں خرچ ہوتا ہے کہ ایکسچینج بتائے بار بند ہوئی۔ نیٹ ورک نہیں، آپ کا کوڈ نہیں، آرڈر روٹنگ نہیں۔ وینیو ٹریڈز کو kline میں جمع کرتا ہے، فیصلہ کرتا ہے کہ منٹ ختم ہو گیا، اور پش کر دیتا ہے۔ اس پش کے آگے ایک قطار ہے، اور وہ قطار اس سٹریم کے ہر دوسرے سبسکرائبر کے ساتھ مشترک ہے۔

وہ 840

ان 1,418 آرڈرز میں سے ہر ایک کو اس منٹ کی حقیقی وولٹیلیٹی کے بکٹ میں ڈالیں جس نے سگنل پیدا کیا، اور ڈسٹریبیوشن بکھر جاتی ہے۔

سگنل-بار وولٹیلیٹی بکٹآرڈرزp50 اینڈ-ٹو-اینڈp99 اینڈ-ٹو-اینڈ
نچلی چوتھائی201141 ms488 ms
درمیانی 2 چوتھائیاں796183 ms1,210 ms
اوپری چوتھائی407312 ms2,880 ms
تمام منٹوں کا ٹاپ 1%14840 ms4,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 میں حقیقت میں کیا رکھیں

سکلر نہیں۔ اب ہم یہ چلاتے ہیں:

  1. سیمپل کریں، سیٹ نہ کریں۔ ہر simulated آرڈر کی لیٹنسی اس بار کی اپنی سرگرمی پر مشروط empirical ڈسٹریبیوشن سے نکالیں — ٹریڈ کاؤنٹ اور مطلق ریٹرن کافی ہیں، اور دونوں پہلے سے standard kline میں موجود ہیں۔ ہر وینیو، ہر آرڈر ٹائپ کے لیے ایک بار فٹ کریں، ماہانہ ریفٹ کریں۔
  2. ٹیل رکھیں۔ lognormal فٹ کر کے فارغ نہ ہو جائیں؛ p99 ریٹرائی سٹورمز اور GC پازز میں رہتا ہے جنہیں کوئی ہموار ڈسٹریبیوشن دوبارہ پیدا نہیں کرتی۔ ہم p95 سے اوپر resampled ٹیل کے ساتھ empirical کوانٹائلز استعمال کرتے ہیں۔
  3. لیٹنسی کینسلز پر بھی لاگو ہوتی ہے۔ stop-replacement یا hedge cancel اسی تاخیر کا شکار ہے، اور تیز مارکیٹوں میں آپ کا cancel فل سے دوڑ رہا ہوتا ہے۔ اگر آپ کا simulator فوراً cancel کر دے تو آپ کا رسک ماڈل فکشن ہے۔
  4. staleness گارڈ لگائیں اور اسے simulate کریں۔ ہمارا کوئی بھی سگنل گرا دیتا ہے جس کی بار آمد پر 1.5 سیکنڈ سے زیادہ پرانی ہو۔ یہ حقیقی رویہ ہے حقیقی لاگت کے ساتھ — یہ خاموشی سے ٹریڈز ہٹا دیتا ہے، اور بیک ٹیسٹ میں بھی وہی ٹریڈز ہٹانی ہوں گی۔
  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 کے ایک اور ہفتے سے زیادہ بتا دے گا۔

لیٹنسیبیک ٹیسٹنگپیپر ٹریڈنگایگزیکیوشنکرپٹو فیوچرز
شیئر کریںXLinkedInFacebookRedditHacker NewsWhatsAppTelegramEmail
← تمام پوسٹس