فنکشن کا نام enter_pack تھا۔ یہی تنبیہ ہونی چاہیے تھی۔ ایک ریسرچ ایجنٹ نے BTC کیش اینڈ کیری لکھا تھا: جب پرپیچوئل اسپاٹ سے آٹھ بیسس پوائنٹس سے زیادہ اوپر ٹریڈ کرے، اسپاٹ خریدو، پرپ شارٹ کرو، بیٹھے رہو۔ فنڈنگ اور بیسس باقی کام کر دیتے۔ بیک ٹیسٹ نے دونوں لیگز ایک ہی ملی سیکنڈ میں فل کیں، مڈ پر، نزاکت کے ایک ٹک سمیت۔ ایکویٹی کرو ایک سیڑھی تھی۔ کوئی اسے سنسنی خیز نہ کہتا۔ یہی اس کی خوبی تھی۔
ہم نے پیر کو اسے پیپر پر چڑھایا۔
پیر: وہ پیک جو ہمیشہ فل ہوتا تھا
پہلا سگنل 11:17 UTC پر آیا۔ اسکرین پر بیسس 9.4 bps تھا، پرپ مہنگا۔ بیک ٹیسٹ میں enter_pack نے دو فلز اور صفر ریزیجویئل واپس کیا۔ پیپر میں اس نے آسک پر 0.40 BTC کا اسپاٹ فل واپس کیا، اور پرپ پر ایک ریسٹنگ شارٹ جو ٹریڈ نہیں ہوا۔
اسپاٹ نے 4 bp taker فیس اور تقریباً 1 bp اسپریڈ ادا کیا تھا۔ جو پرپ قیمت ہم چاہتے تھے وہ بک پر موجود تھی، پھر نہیں رہی۔ بیس سیکنڈ بعد کوٹڈ بیسس 5 bps تھا، کیونکہ ہم نے ابھی اسپاٹ لفٹ کیا تھا۔ چالیس سیکنڈ بعد پرپ فل ہوا، حرکت کے بعد۔ ہم پیک ہو گئے۔ ہم پیک ہو گئے، ایسے بیسس پر جو اب اندر آنے اور باہر نکلنے کا خرچ نہیں نکالتا تھا۔
بیک ٹیسٹ "+9.4 bps کیری، ریزیجویئل 0۔" بک کر لیتا۔ بلاٹر میں اسپاٹ taker لاگت کے 4 bps تھے، 40 سیکنڈ کا ان ہیجڈ لانگ، اور تقریباً 5 کا انٹری گیپ۔ میرے پاس ایک کا سیمپل تھا، اور پھر بھی سیڑھی پر بہت زیادہ اعتماد تھا۔
منگل: ہم نے فنکشن کھولا
enter_pack لیگز کی ایک فہرست اور ایک ٹارگٹ مڈ لیتا تھا۔ یہ لوپ کرتا، ہر لیگ کو mid * (1 ± slip) پر فل کرتا، اور ایک پورٹ فولیو رو لکھ دیتا۔ دوسرا ٹائم سٹیمپ نہیں تھا۔ ایسی کوئی برانچ نہیں تھی جس میں لیگ دو موجود نہ ہو۔ یونٹ ٹیسٹ residual == 0 کا دعویٰ کرتا تھا۔
یہ وہ ٹیسٹ ہے جو آپ کو بالغ محسوس کراتا ہے۔ یہ کبھی فیل نہیں ہوگا۔
ہم نے پیک کو دو آرڈرز میں توڑ دیا، ہر ایک کی اپنی اسٹیٹ کے ساتھ: submitted، partial، filled، canceled۔ Incomplete ایک فرسٹ کلاس آبجیکٹ بن گیا۔ ہسٹاریکل ری پلے میں اب بھی حقیقی بک نہیں تھا، اس لیے ہم نے چال چلی۔ دوسری فل کو پیر کے انتظار سے ایک ڈرا جتنا لیٹ کرو (اوسط 26 سیکنڈ، ایک ٹیل جو مجھے پسند نہیں آئی)، اور اس کی قیمت اس ونڈو میں اسپاٹ نے جو کچھ کیا اس جتنا ڈرفٹ کرو۔ خام، مگر دوپہر سے پہلے سیڑھی میں دانتے پڑ گئے: پیک جو 3 bps پر داخل ہوئے، پیک جو کبھی پیک بنے ہی نہیں۔
بدھ: تین سیکنڈ، پھر اسے ڈمپ کر دو
اگر دوسری لیگ تین سیکنڈ کے اندر آن نہ ہو تو پہلی کو فلیٹن کر دو۔ ہمیں وہیں سے شروع کرنا چاہیے تھا۔ یہ محتاط لگتا ہے جب تک آپ ابورٹ کی قیمت نہ لگائیں۔ فلیٹن کرنے کا مطلب ہے آپ اندر آنے کے لیے اسپاٹ کراس کر چکے اور باہر نکلنے کے لیے اسے کراس کرتے ہو۔ دو taker فیس، دو اسپریڈز، نہ کیری، نہ فنڈنگ۔ دوبارہ لکھے ری پلے میں وہ ابورٹس نایاب نہیں تھے۔ وہ ان بارز پر جم گئے جہاں بیسس سب سے زیادہ "حقیقی" لگتا تھا، جو عموماً وہی بارز ہیں جہاں پہلے سے کچھ اسپاٹ کے ذریعے بہہ رہا ہوتا ہے۔
بدھ کی رات تک ہمارے پاس سترہ پیپر سگنلز تھے جن سے بحث کی جا سکتی تھی۔
| بیک ٹیسٹ، پیر کی صبح | پیپر، بدھ تک | |
|---|---|---|
| انٹری | دونوں لیگز مڈ پر، ایک ٹائم سٹیمپ | اسپاٹ آسک پر؛ پرپ 5–40s بعد، یا کبھی نہیں |
| ریزیجویئل | ہمیشہ 0 | 17 میں سے 10 سگنلز پر ان ہیجڈ |
| چلتے ٹریڈ پر فیس | دو takers | دو takers، یا چار اگر ہم ابورٹ کریں |
| PnL ڈرائیور | بیسس + فنڈنگ | انتظار کے دوران اسپاٹ نے جو کچھ کیا |
ایک ساتھی کے پاس اب بھی ایک نوٹ بک ہے جو پیک کو لسٹڈ پروڈکٹ سمجھتی ہے، BTC_CARRY، فلیٹ 2 bp "ایگزیکیوشن ٹیکس" کے ساتھ۔ وہ نوٹ بک مجھے پسند تھی۔ اس نے وہی سیڑھی دی جو ایجنٹ نے دی۔ ٹیکس ایک مین ہے۔ یتیم ایک ڈسٹری بیوشن ہیں۔ مینز پتلی گھڑی میں کچلے نہیں جاتے۔ بچے ہوئے اسپاٹ کے 0.40 BTC جا سکتے ہیں۔
جمعرات: بچا ہوا، پھر کافی
تین سیکنڈ نے تقریباً سب کچھ ابورٹ کر دیا جب ہم کیو کا بھی انتظار کر رہے تھے۔ ہم نے پیپر کو پندرہ تک ڈھیلا کیا۔ جمعرات 02:11 UTC پر اسپاٹ فل ہوا اور پرپ نہیں ہوا۔ میں ابھی غم کے "یہ ریسٹ کرے گا، یہ لفٹ ہو جائے گا" والے مرحلے میں تھا جب کافی بنانے گیا۔
02:11:08 فل ہوا BTCUSDT 0.40 خرید
02:11:08 جمع کرایا BTCUSDT-PERP 0.40 فروخت، post-only
02:11:41 ابھی تک ورکنگ
02:26:00 ریزیجویئل مارک −18.1 bps
BTC ایک خاموش ونڈو میں 18 bps گر گیا۔ ریزیجویئل پورا ٹریڈ تھا۔ فنڈنگ، جب پرنٹ ہوئی، اس پرپ کو کریڈٹ ہوئی جو ہمارے پاس نہیں تھا۔ اسپاٹ بس لانگ ہو کر بیٹھا رہا۔ اصل بیک ٹیسٹ کے اوور نائٹ پاتھ میں کبھی ایک لیگ والی پوزیشن نہیں تھی، اس لیے اس نے وہ سوال کبھی نہیں پوچھا جو ہم ہر دوسری بک سے پوچھتے ہیں: یہ بچا ہوا سب سے خراب بار کیا پرنٹ کر سکتا ہے، اور اس پوزیشن کا اسٹاپ کہاں ہے جسے ہولڈ کرنا ہمارا ارادہ نہیں تھا؟
سات مکمل پیک بھی ہیرو نہیں تھے۔ جب تک دوسری لیگ پرنٹ ہوئی، ہمارے اپنے اسپاٹ لفٹ نے پہلے ہی انڈیکس پر وزن ڈال دیا تھا، اور انٹری بیسس اس سنیپ شاٹ سے 3–5 bps برا تھا جس نے سگنل فائر کیا تھا۔ آٹھ bps کی حد محض اسکرین پر ایک عدد تھی۔
اگلی بار ہم کیا چھوڑیں گے
ہم ملٹی لیگ کو ایک ہی فل فنکشن کی صورت میں شپ نہیں کرتے۔ وہی اصول پرپ-اسپاٹ کیری، کیلنڈر، یا اس کال ورٹیکل کے لیے جسے ایجنٹ دو لیمٹس کے طور پر جمع کرتا ہے اور پھر جشن مناتا ہے جب دونوں مڈ پر "فل" ہو جائیں۔
- ہر لیگ کی آرڈر اسٹیٹ، پارشلز سمیت۔ پیک کو دو ٹکٹس کا پیرنٹ سمجھو۔
- ایک max-orphan ٹائمر جو واقعی فائر ہو، اور ایک فلیٹن پاتھ جو باہر جاتے ہوئے دو اسپریڈز ادا کرے۔
- ریزیجویئل پر مارک ٹو بک، بچے ہوئے کے لیے سائز کیے گئے اسٹاپ کے ساتھ۔ پیکڈ نیٹ غلط نوشنل ہے۔
- جب تک دونوں لیگز آن نہ ہوں، نہ کیری کریڈٹ ہو، نہ فنڈنگ جمع ہو۔ Incomplete، incomplete ہے۔
- دو ٹکٹس والی کسی بھی چیز کے لیے مڈ آن مڈ کو ڈیفالٹ کے طور پر مسترد کرو۔ اگر اندازہ ہی لگانا ہے تو پتلی لیگ پر برا اندازہ لگاؤ اور دوسری فل پر دیر سے۔
اور ہم test_pack_is_atomic کو ریپو میں داخل نہیں ہونے دیتے۔ Atomic میچنگ انجن کی خاصیت ہے، ہیلپر فنکشن کی نہیں۔ BTC اسپاٹ اور BTC پرپیچوئل دو بکیں ہیں جو کبھی کبھار ہم قافیہ ہوتی ہیں۔ پیپر وہ جگہ ہے جہاں ان کا قافیہ ٹوٹتا ہے، جو سیڑھی کے کبھی دلچسپ ہونے کی واحد وجہ تھی۔



