ایک مفید بیک ٹیسٹ جانچ کا بہتر پیرامیٹر ڈھونڈنے سے کوئی تعلق نہیں: عمل کو آدھے راستے پر روکیں، اسے بحال کریں، اور وہی ری پلے مکمل کریں۔ یکساں ان پٹس اور کنٹرول شدہ ایگزیکیوشن سمیولیٹر کے ساتھ، اس کے فیصلے، آرڈرز اور ایکویٹی ایک بلاتعطل رن سے مماثل ہونے چاہئیں۔
اگر ایسا نہیں ہوتا تو آپ نے اسٹیٹ مینجمنٹ کا مسئلہ ڈھونڈ لیا ہے۔ اسٹریٹیجی کسی ایسی چیز پر منحصر ہے جسے آپ نے محفوظ نہیں کیا یا دوبارہ تشکیل نہیں دے سکے۔ یہ انحصار اس وقت اہم ہوتا ہے جب تحقیقی رنز دوبارہ شروع کیے جائیں، ورکرز تبدیل ہوں، یا پیپر ٹریڈنگ سروس میں نیا کوڈ تعینات کیا جائے۔
مجھے یہ ٹیسٹ اس لیے پسند ہے کہ اس کا متوقع جواب غیر معمولی طور پر واضح ہے۔ اس بارے میں کوئی بحث نہیں کہ آیا مارکیٹ بدلی تھی۔ دونوں رنز کو ایک ہی مارکیٹ ملتی ہے۔
دوبارہ شروع کرنے کے تین غلط طریقے یہ ہیں۔ اعداد محض مثال کے لیے ہیں؛ ہر خرابی ایسے نظام میں بھی ہو سکتی ہے جو باقی ہر لحاظ سے قطعی ہو۔
1. چند بارز دوبارہ لوڈ کریں اور انڈیکیٹرز کو تیار سمجھ لیں
فرض کریں کہ اسٹریٹیجی 100 پیریڈ کی ایکسپونینشل موونگ ایوریج استعمال کرتی ہے۔ اس کی اپ ڈیٹ یہ ہے:
alpha = 2 / 101
ema_next = alpha * close + (1 - alpha) * ema_previous
بلاتعطل عمل جمع شدہ EMA کو آگے برقرار رکھتا ہے۔ دوبارہ شروع ہونے والا عمل 100 بارز حاصل کرتا ہے، پہلی کلوز سے EMA کی ابتدائی قدر طے کرتا ہے، اور فرض کرتا ہے کہ 100 پیریڈ کے انڈیکیٹر کے لیے 100 مشاہدات درکار ہیں۔
اس مفروضے میں انڈیکیٹر کے اسمووتھنگ پیرامیٹر کو محدود میموری ونڈو سمجھ لیا گیا ہے۔ EMA اپنی ابتدائی حالت کا گھٹتا ہوا اثر برقرار رکھتا ہے۔ اگر دو ورژنز کے آغاز میں EMA کا فرق قیمت کی 10 اکائیاں ہو، تو بعد کی یکساں قیمتیں اس فرق کو یوں گھٹاتی ہیں:
| ابتدائی قدر کے بعد اپ ڈیٹس | باقی فرق | ابتدائی غلطی کا حصہ |
|---|---|---|
| 100 | 1.353 | 13.53% |
| 250 | 0.0674 | 0.674% |
| 500 | 0.000454 | 0.00454% |
حساب 10 * (99 / 101)^k ہے۔ 100 بارز حاصل کرنے سے صرف 99 اپ ڈیٹس ملتی ہیں، اگر پہلی آبزرویشن کو ابتدائی قدر کے طور پر استعمال کیا جائے۔
خرابی عموماً فیصلے کی حد کے آس پاس ظاہر ہوتی ہے۔ ایک رن میں قیمت EMA سے اوپر ہوتی ہے؛ دوسرے میں نیچے۔ عددی فرق معمولی ہوتا ہے، مگر اس سے ایک اضافی ٹریڈ ہو جاتی ہے۔ اس کے بعد کول ڈاؤن، دستیاب نقدی اور آگے کے فیصلے بھی مختلف ہو سکتے ہیں۔
ریکَرْسِو انڈیکیٹر کی حالت، اس کی ابتدا ہو چکنے کی کیفیت، اور آخری پراسیس شدہ ایونٹ محفوظ کریں۔ اس کے بجائے ایک معلوم ابتدائی حالت سے دوبارہ ری پلے بھی کیا جا سکتا ہے۔ طویل وارم اپ قابلِ قبول تخمینہ دے سکتا ہے، لیکن اس کی مدت واضح غلطی کی حد سے طے کریں اور جانچیں کہ آیا یہ حد فیصلوں کو بدل سکتی ہے۔ “پیریڈ سے پانچ گنا” ایک رواج ہے، ثبوت نہیں۔
اور تاریخ صرف انڈیکیٹرز تک محدود نہیں۔ رَوِنگ پرسنٹائل کو اپنی ونڈو درکار ہوتی ہے۔ آن لائن ماڈل کو اپنے آپٹمائزر کی حالت درکار ہو سکتی ہے۔ نقصان کے بعد تین بارز انتظار کرنے والے اصول کو نقصان اور کاؤنٹر یاد رکھنا ہوتا ہے۔
2. پوزیشن محفوظ کریں، مگر زیرِ عمل آرڈرز بھول جائیں
آپ کی ہدفی پوزیشن 10 اکائیاں ہے۔ 10 اکائیوں کا خرید آرڈر 4 اکائیاں بھر چکا ہے، اور 6 ابھی باقی ہیں۔ آپ چیک پوائنٹ پر پوزیشن 4 محفوظ کرتے ہیں، دوبارہ شروع کرتے ہیں، اور باقی 6 کے لیے ایک اور خرید آرڈر دیتے ہیں۔
اگر اصل آرڈر کی باقی مقدار اور متبادل آرڈر دونوں بھر جائیں تو آپ کے پاس 16 اکائیاں ہوں گی۔
بیک ٹیسٹ میں اس بگ کا پتا اکثر نہیں چلتا، کیونکہ فل انجن دوبارہ شروع ہونے پر کام جاری آرڈرز خاموشی سے مٹا دیتا ہے۔ پیپر ٹریڈنگ میں سمیولیٹر یا بیرونی سروس انہیں برقرار رکھ سکتی ہے۔ پھر بحالی کا وہی کوڈ اس بات کے مطابق مختلف ایکسپوژر پیدا کرتا ہے کہ کون سا جزو برقرار رہا۔
| دوبارہ شروع ہونے پر | اصل حالت | صرف پوزیشن سے بحالی میں نظر آنے والی حالت |
|---|---|---|
| ہدفی پوزیشن | 10 | 10 |
| بھری ہوئی پوزیشن | 4 | 4 |
| باقی خرید کی مقدار | 6 | 0 |
| مزید درکار مقدار | 0 | 6 |
خرابی بحالی کے فوراً بعد آرڈرز کی ایک غیر واضح بھرمار کی صورت میں سامنے آتی ہے۔ کبھی ایکسپوژر دگنا ہو جاتا ہے۔ کبھی ایسی پوزیشن بند ہو جاتی ہے جس کا حفاظتی آرڈر اب بھی فعال ہوتا ہے، اور وہ آرڈر بعد میں نئی پوزیشن کھول سکتا ہے۔
چیک پوائنٹ میں پوزیشنز کے ساتھ آرڈر کی شناخت اور اس کی لائف سائیکل حالت بھی ہونی چاہیے۔ نئے اقدامات پیدا کرنے سے پہلے بحالی کے عمل کو ان ریکارڈز کا ایگزیکیوشن سسٹم سے ملاپ کرنا چاہیے۔ جس آرڈر کا نتیجہ نامعلوم ہو، اس کی تحقیق ضروری ہے؛ “کوئی تصدیق محفوظ نہیں” کو “آرڈر کبھی جمع ہی نہیں ہوا” سمجھنے سے ڈپلیکیٹ آرڈرز پیدا ہوتے ہیں۔
مستحکم کلائنٹ آرڈر شناختی کوڈز سے یہ معلوم کرنے میں مدد ملتی ہے کہ کیا ہوا تھا۔ یہ صرف اسی صورت میں ڈپلیکیٹس روکتے ہیں جب وصول کرنے والا سسٹم مطلوبہ منفرد شناخت یا idempotency کے اصول نافذ کرتا ہو۔ پراسیس شدہ ایگزیکیوشن شناختی کوڈز بھی محفوظ کریں، تاکہ دوبارہ چلایا گیا فل پوزیشن میں دو بار اضافہ نہ کرے۔
مجھے آرڈر اسٹیٹس کی سادہ سی اسکرین خاصی پسند ہے۔ دوبارہ شروع ہونے والے دن اس کی چھوٹی چھوٹی قطاریں اچانک عمارت کا سب سے دلچسپ انٹرفیس بن جاتی ہیں۔
3. پوزیشن بحال کریں اور P&L کا نیا لیجر شروع کر دیں
بغیر لیوریج کی اسپاٹ مثال دیکھیں، جس میں کوئی فیس نہیں۔ $10,000 نقدی سے آغاز کریں، $100 فی اکائی کے حساب سے 10 اکائیاں خریدیں، اور مارک $110 تک پہنچنے پر چیک پوائنٹ محفوظ کریں۔
درست حالت $9,000 نقدی کے ساتھ $1,100 مالیت کی پوزیشن ہے: یعنی ایکویٹی $10,100۔ اگر بحالی میں 10 اکائیاں تو واپس آ جائیں مگر نقدی اصل $10,000 پر ری سیٹ ہو جائے، تو رپورٹ $11,100 دکھائے گی۔ آپ نے عمل دوبارہ شروع کرکے $1,000 بنا لیے۔
اس کی دوسری صورتیں اتنی ڈرامائی نہیں ہوتیں۔ بحالی ایکویٹی برقرار رکھتی ہے مگر انٹری قیمت کو $110 پر ری سیٹ کر دیتی ہے۔ کل ایکویٹی درست رہ سکتی ہے، جبکہ حاصل شدہ اور غیر حاصل شدہ منافع کی تقسیم بدل جاتی ہے۔ اگر اسٹاپ یا ایگزٹ کی شرط انٹری قیمت دیکھتی ہے تو حساب کتاب کا یہ شارٹ کٹ اب ٹریڈنگ کا رویہ بدل دیتا ہے۔
یا نظام ایکویٹی کی پچھلی بلند ترین سطح بھول جاتا ہے۔ فرض کریں کہ ایکویٹی گھٹ کر $10,100 ہونے سے پہلے $10,600 تک پہنچی تھی۔ اس کی ڈرا ڈاؤن تقریباً 4.72% ہے۔ بحالی پر ہائی واٹر مارک ری سیٹ کریں تو اسٹریٹیجی اچانک سمجھتی ہے کہ ڈرا ڈاؤن صفر ہے۔ ڈرا ڈاؤن پر مبنی ہر رسک کنٹرول کو ابھی غیر مجاز ری سیٹ ملا ہے۔
لہٰذا خرابی ایکویٹی میں اچانک تبدیلی، ڈرا ڈاؤن میں مشکوک بہتری، یا تعیناتیوں کے بعد رسک رول کا عمل روک دینا ہو سکتی ہے۔ لیجر اور اسٹریٹیجی کی حساب پر منحصر حالت محفوظ رکھیں: نقدی کی نقل و حرکت، پوزیشنز، جہاں لاگو ہو لاگت کی بنیاد، جمع شدہ چارجز، اور رسک کنٹرول کی یادداشت۔ بحال شدہ ایکویٹی کا اسی ویلیوایشن ٹائم اسٹیمپ پر لیجر سے ملاپ کریں۔
چیک پوائنٹ کے لیے ایک ہم آہنگ حد ضروری ہے۔ فل کے بعد نقدی محفوظ کرنا اور فل سے پہلے پوزیشن کی مقدار محفوظ کرنا ایسی حالت بناتا ہے جو کبھی موجود ہی نہیں تھی۔ متعلقہ حالت کو ایک ساتھ محفوظ کریں، یا ایونٹس کی پائیدار ترتیب درج کریں جس سے اسے دوبارہ بنایا جا سکے۔ ایونٹ کرسر بھی اسی حالت کے ساتھ محفوظ کریں تاکہ بحالی میں نہ کوئی فل چھوٹے اور نہ دو بار لاگو ہو۔
تحقیقی ہارنس میں میں جو ٹیسٹ رکھوں گا، وہ پہلے ایک بلاتعطل حوالہ جاتی ری پلے چلاتا ہے، پھر دوسرے رن کو جان بوجھ کر مشکل مقامات پر دوبارہ شروع کرتا ہے: انڈیکیٹر کی ابتدا کے دوران، جزوی فل کے بعد، اور جب رسک کی حد فعال ہو۔ ایونٹس کی وہی ترتیب استعمال کریں اور سمیولیٹر کی کوئی بھی رینڈم حالت برقرار رکھیں۔ بحالی کے بعد پہلا فیصلہ، آرڈر اور فل کے ریکارڈز، اور ایکویٹی کے راستے کا موازنہ کریں۔ صرف آخری بیلنس کا یکساں ہونا باہم منسوخ ہونے والی غلطیوں کو چھپا سکتا ہے۔
آرڈر جمع ہونے کے بعد مگر تصدیق آنے سے پہلے کریش ہونے کی صورت میں، ہارنس کو ایگزیکیوشن سروس کی حالت اسٹریٹیجی کے عمل سے الگ محفوظ رکھنی ہوگی۔ ورنہ یہ اسی غیر یقینی صورتِ حال کو مٹا دے گا جس کی آپ جانچ کرنا چاہتے ہیں۔
اسٹریٹیجی کی تفصیلات میں یہ بھی شامل ہے کہ اسے کیا یاد رہتا ہے۔ اس یادداشت کو اتنا واضح بنائیں کہ آپ ری پلے کے آدھے راستے پر عمل ختم کرکے دکھا سکیں کہ وہ کام دوبارہ کیسے شروع کرتا ہے۔
← تمام پوسٹس


