ایک سوال ہے جس سے ہر بیک ٹیسٹ کتراتا ہے: کیا یہی کوڈ، اگر اسے وہی مارکیٹ لائیو کھلائی جاتی، تو کیا وہی کرتا؟ اس کا جواب مزید بیک ٹیسٹنگ سے نہیں مل سکتا۔ جواب صرف اسی طرح ملتا ہے کہ حکمتِ عملی کو حقیقی ایگزیکیوشن سیمانٹکس کے ساتھ لائیو ڈیٹا پر چلایا جائے، اور پھر — ٹریڈ بہ ٹریڈ — یہ جانچا جائے کہ دونوں دنیائیں متفق ہیں۔ ہم یہ جانچ روزانہ، خودکار طور پر کرتے ہیں، اور یہی پورے پلیٹ فارم میں بگ ڈھونڈنے کا سب سے زرخیز ذریعہ ثابت ہوئی ہے۔
پہلا دن: آئینہ بنائیں
ہر پروموٹ شدہ حکمتِ عملی اپنے الگ تھلگ لائیو نوڈ میں چلتی ہے اور حقیقی ایکسچینج اسٹریمز استعمال کرتی ہے: فِلز کے لیے لائیو کوٹس، حقیقی اسپریڈز، حقیقی سیشن اوقات۔ حکمتِ عملیوں کے درمیان کوئی مشترکہ اسٹیٹ نہیں (یہ سبق ہم نے مشکل راستے سے سیکھا — ایک مشترکہ نوڈ کی وجہ سے ایک حکمتِ عملی کی پوزیشن کوئریز دوسری میں رِس رہی تھیں)۔ ہر فِل اُس سگنل ویلیو کے ساتھ ریکارڈ ہوتا ہے جس نے اُسے پیدا کیا۔
ہر صبح: ری پلے اور ڈِف
ایک روزانہ جاب ہر حکمتِ عملی کی پیپر ونڈو لیتی ہے، بعینہٖ وہی کوڈ اسی مدت پر کیٹلاگ ڈیٹا کے ساتھ بیک ٹیسٹ انجن سے گزارتی ہے، اور فِلز کو ایک بہ ایک ملاتی ہے: وہی سائیڈ، وہی ٹائم اسٹیمپ ٹالرینس، وہی سائز۔ نتیجہ کوئی کورلیشن یا سرسری تاثر نہیں ہوتا۔ ایک باقاعدہ ٹیبل ہوتا ہے: میچ شدہ، صرف پیپر، صرف ری پلے۔ ایک صحت مند حکمتِ عملی 55 میں سے 54 میچ شدہ پر بیٹھتی ہے۔ اور جو صحت مند نہ ہو، وہ ٹھیک ٹھیک بتا دیتی ہے کہ کون سا ٹریڈ کب الگ ہوا۔
جو کچھ ٹوٹا، اسی ترتیب سے جس ترتیب سے ٹوٹا
- وارم اپ فِلز۔ لائیو نوڈ انڈیکیٹرز گرم کرنے کے لیے تاریخی ڈیٹا کھلاتا تھا — اور کسٹم بار ہینڈلرز والی حکمتِ عملیاں بخوشی اسی پر ٹریڈ کر بیٹھتی تھیں۔ بیک ٹیسٹ نے یہ فرضی انٹریز کبھی دیکھی ہی نہیں۔ حل سبمیشن لیئر پر گارڈ تھا، کسی ایک حکمتِ عملی کی درستی نہیں، کیونکہ ورنہ یہ بگ ہر حکمتِ عملی کو وراثت میں ملتا ہے۔
- ترتیب وار ملٹی لیگ وارم اپ۔ ایک کراس سیکشنل حکمتِ عملی ایک وقت میں ایک ہی انسٹرومنٹ گرم کرتی تھی؛ ہر لیگ کو باقی لیگز خالی نظر آتے اور اینکر کبھی سیٹ ہی نہ ہوتا۔ لائیو میں اس نے کچھ ٹریڈ نہ کیا؛ ری پلے میں بالکل ٹھیک ٹریڈ کیا۔ صفر میچ شدہ ٹریڈز — مگر یہ بات صرف ڈِف نے کھل کر کہی۔
- ٹِک پریسیشن کریش لوپ۔ لائیو aggTrade ٹِکس اُس پریسیشن سے مختلف پریسیشن پر آتے ہیں جس کی سینڈ باکس انسٹرومنٹ توقع کرتا ہے۔ نوڈ ایک ایسے اسرشن پر کریش لوپ میں چلا گیا جسے بیک ٹیسٹ کبھی ٹرگر نہیں کر سکتا تھا، کیونکہ کیٹلاگ بارز پہلے ہی نارملائزڈ ہوتے ہیں۔
- ری اسٹارٹ کی بھول۔ پروسیس ری اسٹارٹ پر انٹری لاجک اُن پوزیشنز پر دوبارہ چل پڑتی تھی جو پہلے سے موجود تھیں — ری بیلنسنگ حکمتِ عملی کے لیے ایک ری اسٹارٹ چپکے سے ری بیلنس بن جاتا تھا۔ لائیو ٹریڈنگ میں یہ پیریٹی کا محض حاشیہ نہیں؛ یہ پیسوں سے جُڑا سرخ نشان ہے۔
پیٹرن دیکھیے: ان میں سے ایک بھی سگنل کا بگ نہیں۔ سب کے سب ایگزیکیوشن باؤنڈری کے بگ ہیں — وارم اپ، اسٹیٹ، پریسیشن، ری اسٹارٹس۔ یہی وہ قسم کی خرابی ہے جس کے لیے بیک ٹیسٹ ساختی طور پر اندھے ہیں، کیونکہ بیک ٹیسٹ میں بیک ٹیسٹ انجن خود ہی ایگزیکیوشن باؤنڈری ہوتا ہے۔
وہ عدم توازن جو ہم جان بوجھ کر رکھتے ہیں
دونوں دنیائیں دانستہ طور پر ایک جیسی نہیں ہیں۔ بیک ٹیسٹ PnL کے اندر ایک ماڈل شدہ ہاف اسپریڈ اور اسکوائر روٹ امپیکٹ وصول کرتا ہے؛ پیپر فِل پرائس میں حقیقی اسپریڈ ادا کرتا ہے اور کوئی امپیکٹ ماڈل نہیں لگتا۔ پیپر میں ماڈل شدہ اسپریڈ (یا بیک ٹیسٹ میں حقیقی اسپریڈ) جوڑنے سے وہی لاگت دو بار گنی جائے گی۔ پیریٹی کا مطلب ہے وہی فیصلے، ٹالرینس کے اندر وہی فِلز — بٹ بہ بٹ یکساں PnL نہیں۔ کون سا فرق اصولی ہے اور کون سا بگ — یہ پہچان ہی اس نظم کا بڑا حصہ ہے۔
بیک ٹیسٹ ایک مفروضہ ہے۔ پیپر ٹریڈنگ تجربہ ہے۔ ری پلے پیریٹی وہ لیب نوٹ بک ہے جو آپ کو خود کو دھوکہ دیتے ہوئے رنگے ہاتھوں پکڑتی ہے۔
اگر آپ حکمتِ عملیاں چلاتے ہیں اور باقاعدہ شیڈول پر لائیو رویّے کا ری پلے شدہ رویّے سے موازنہ نہیں کرتے، تو آپ کے پاس بگز کی ایک پوری قسم ایسی ہے جو آپ نے کبھی دیکھی ہی نہیں۔ ہمیں تقریباً ہر دو ہفتے میں ایک ایسا بگ ملتا ہے، اور ہر ایک بیک ٹیسٹ کے اندر سے نظر ہی نہیں آتا تھا۔
← تمام پوسٹس
