ہم نے محفوظ شدہ بیک ٹیسٹ دوبارہ چلایا تو ایکویٹی کا منحنی خط مختلف نکلا۔ حکمتِ عملی کا کوڈ وہی، تاریخوں کی حد وہی، سمبل وہی۔ اختتامی بیلنس میں 1.8% کا فرق تھا، اور تین ٹریڈز ایک بار آگے یا پیچھے ہو گئی تھیں۔
یہ فرق کسی تحقیقی نتیجے پر اعتماد متزلزل کرنے کے لیے کافی ہے۔ اگر کوئی ساتھی، آپ کا مستقبل کا خود، یا پیپر ٹریڈنگ سروس وہی رن دوبارہ حاصل نہ کر سکے تو آپ یہ نہیں جان سکتے کہ تبدیلی سے حکمتِ عملی بہتر ہوئی یا صرف تجربہ بدل گیا۔ فرق کی وجہ ڈھونڈنے کے لیے ہم نے یہ سلسلہ اپنایا۔
دن 1: ہم نے طے کیا کہ ”وہی رن“ سے ہماری مراد کیا ہے
ہماری پہلی غلطی یہ سمجھنا تھی کہ حکمتِ عملی کی فائل ہی پورا تجربہ ہے۔ ایسا نہیں تھا۔ رن کا انحصار ان پٹ ڈیٹا، انجن کے ورژن، کیلنڈر، انسٹرومنٹ کی تفصیلات اور عمل درآمد کی سیٹنگز پر بھی تھا۔ کوڈ حساب کے صرف ایک حصے کی وضاحت کرتا تھا۔
کچھ بھی بدلنے سے پہلے ہم نے رن کا ایک منشور تیار کیا۔ اس میں حکمتِ عملی کے commit، ڈیٹا اسنیپ شاٹس کے شناختی نمبرز، تاریخوں کی حد، وینیو، فیس شیڈول، فنڈنگ کا ماخذ، فل ماڈل اور سافٹ ویئر کے ورژنز درج کیے۔ ہم نے نتیجے میں بننے والے آرڈرز اور فلز بھی محفوظ کیے، کیونکہ صرف ایکویٹی کا منحنی خط یہ نہیں بتا سکتا کہ دونوں رنز میں فرق پہلی بار کہاں آیا۔
| مواد | کیا درج کریں | یہ کیوں اہم ہے |
|---|---|---|
| مارکیٹ ڈیٹا | اسنیپ شاٹ ID، اسکیما ورژن، ایڈجسٹمنٹس | ڈیٹا فراہم کرنے والے ماضی کے ریکارڈ درست کرتے اور کارپوریٹ ایکشنز پر نظرثانی کرتے ہیں |
| عمل درآمد | فیس ٹئیر، فنڈنگ سیریز، فل اور امپیکٹ کی سیٹنگز | ڈیفالٹس اور اکاؤنٹ کے مفروضے نتائج بدل دیتے ہیں |
| رن ٹائم | کوڈ commit، انجن اور انحصاری سافٹ ویئر کے ورژنز | لائبریریاں ترتیب، راؤنڈنگ یا انڈیکیٹرز بدل سکتی ہیں |
| آؤٹ پٹ | آرڈرز، فلز، پوزیشنز اور میٹرکس | بتاتا ہے کہ رنز میں اختلاف کہاں سے شروع ہوتا ہے |
دن 2: ہم نے Sharpe نہیں، ٹریڈز کا موازنہ کیا
خلاصہ میٹرکس توجہ ہٹا رہے تھے۔ دونوں رنز کا Sharpe تقریباً ایک جیسا تھا، مگر فل لاگز سے فنڈنگ کی سیٹلمنٹ پر پہلا فرق سامنے آیا۔ ایک رن میں سیٹلمنٹ کے ٹائم اسٹیمپ پر کھلی پوزیشن پر ریٹ لگایا گیا؛ دوسرے میں اسی ٹائم اسٹیمپ کے ری بیلنس کے بعد والی پوزیشن پر۔
حکمتِ عملی کا کوڈ نہیں بدلا تھا۔ انجن میں ایونٹس کی ترتیب بدلی تھی۔ ورژن کی ایک معمولی اپ ڈیٹ نے اس ترتیب کو واضح کر دیا، جو پہلے اس بات پر منحصر تھی کہ دو ایونٹس اتفاقاً کس طرح ترتیب پاتے ہیں۔
ہم نے رن کے معاہدے میں ترتیب واضح کر دی: پہلے سیٹلمنٹ تک برقرار پوزیشن پر فنڈنگ لگائیں، پھر اسی ٹائم اسٹیمپ کے لیے حکمتِ عملی کے فیصلے عمل میں لائیں۔ درست طریقہ وینیو اور انجن کے لحاظ سے بدل سکتا ہے۔ اسے غیر واضح چھوڑنا ہی مسئلہ ہے۔
دن 3: ”وہی“ ڈیٹا فائل دراصل مختلف نکلی
ایونٹس کی ترتیب مقفل کرنے کے بعد باقی اختلاف چند ایکویٹی ٹریڈز میں سمٹ گئے۔ ڈیٹا فراہم کرنے والے نے ماضی کے اسپلٹ ایڈجسٹمنٹ کی تصحیح کی تھی۔ ہماری فائل کا نام اور قطاروں کی تعداد پہلے جیسی تھی، اس لیے وہ بظاہر بدلی ہوئی نہیں لگ رہی تھی۔
اب ہم ہر ناقابلِ تغیر ڈیٹا اسنیپ شاٹ کا فنگر پرنٹ بناتے ہیں اور اس کے ساتھ ایڈجسٹمنٹ کی پالیسی محفوظ رکھتے ہیں۔ ہیش بتاتا ہے کہ بائٹس بدلی ہیں یا نہیں؛ یہ وجہ نہیں بتاتا۔ اس لیے منشور میں ماخذ، حاصل کرنے کا وقت اور تبدیلی کے عمل کا ورژن بھی شامل ہوتا ہے۔ جس ڈیٹا پر نظرثانی ہوتی رہتی ہے، اس کے لیے یہ تفصیلات بھی نتیجے کا حصہ ہیں۔
دوبارہ قابلِ تصدیق بیک ٹیسٹ کو اس سوال کا جواب دینا چاہیے: ”اس نے ماضی کا کون سا ورژن دیکھا تھا؟“
دن 4: ہمیں ایک خاموش ڈیفالٹ سیٹنگ ملی
آخری فرق maker فیس کا تھا، جو صفر پر مقرر تھی کیونکہ حکمتِ عملی کی کنفیگریشن میں یہ فیلڈ شامل نہیں تھی۔ نئے انجن نے اکاؤنٹ کی ڈیفالٹ فیس لاگو کی۔ اسی ایک ڈیفالٹ نے معمولی فرق والی ٹریڈز کو اس قدر متاثر کیا کہ اختتامی بیلنس کے زیادہ تر فرق کی وضاحت ہو گئی۔
ہم نے مالی لحاظ سے اہم سیٹنگز واضح طور پر درج کیں اور انجن سے کہا کہ حل شدہ کنفیگریشن رن کے ریکارڈ میں پرنٹ کرے۔ تجربات کے دوران ڈیفالٹس سہولت دیتے ہیں۔ وقت کے ساتھ نتائج کا موازنہ کرتے ہوئے یہ کمزور ثبوت ہیں۔
اگلی بار ہم کن چیزوں سے بچیں گے
ہم نے پہلے مختلف فل دیکھنے کے بجائے مجموعی میٹرکس کا موازنہ کرنے میں آدھا دن لگا دیا۔ آغاز وہاں سے نہ کریں۔ دونوں ایونٹ لاگز کو ٹائم اسٹیمپ کے مطابق ترتیب دے کر پہلا اختلاف دیکھیں؛ بعد کے فرق اکثر اسی ایک وجہ سے پیدا ہوتے ہیں۔
ہم اس خیال کو بھی چھوڑ دیں گے کہ کنٹینر امیج اکیلے ہی رن کو دوبارہ قابلِ تصدیق بنا دیتی ہے۔ یہ سافٹ ویئر کے ماحول کا بڑا حصہ مقفل کرتی ہے، مگر بیرونی ڈیٹا فائل، رن ٹائم پر حاصل کیا گیا فیس شیڈول، یا ڈیٹا فراہم کرنے والے کی نظرثانی شدہ تاریخ نہیں۔
جب بیک ٹیسٹ بدل جائے تو دونوں رنز کے منشور اور لاگز محفوظ کریں، پھر ایک وقت میں فرق کی صرف ایک وجہ درست کریں۔ مفید نتیجہ صرف ایسا منحنی خط نہیں جسے دوبارہ حاصل کیا جا سکے۔ یہ ایسا ریکارڈ ہے جو بتاتا ہے کہ اسے کس ڈیٹا اور مفروضوں نے پیدا کیا، اور اگلا رن کیوں مختلف ہو سکتا ہے۔
← تمام پوسٹس


