آپ نے اتوار کی رات نوٹ بک بھیجی تھی، تب سے میرے دوسرے مانیٹر پر کھلی ہوئی ہے۔ کراس سیکشنل مومینٹم، 30 دن کے ڈالر والیوم کے لحاظ سے Binance USDⓈ-M کے سرفہرست 150 پرپس، ہفتہ وار ری بیلنس، اوپر کے ڈیسیل میں لانگ اور نیچے کے ڈیسیل میں شارٹ، 2021-01 سے 2026-06 تک۔ Sharpe 2.31، زیادہ سے زیادہ ڈراڈاؤن 14.2%، اور ایک ایسا کاسٹ ماڈل جو مجھے دیانت دار لگا: داخلے پر taker، اخراج پر taker، ہر وقفے کے حساب سے جمع ہونے والی فنڈنگ، اور ایک سلپیج جزو جو آرڈر بُک کے مقابلے میں آپ کے سائز کے ساتھ بڑھتا ہے۔ مشکل حصے آپ نے ٹھیک کیے۔ پھر آپ نے پوچھا کہ پیپر ٹریڈنگ کے چھ ہفتے بے اثر کیوں رہے، اور کیا ایج ختم ہو گئی۔
ایج ختم نہیں ہوئی۔ وہ بیک ٹیسٹ میں تھی ہی نہیں۔ سیل 4 دیکھیں:
info = requests.get(BASE + "/fapi/v1/exchangeInfo").json()
symbols = [s["symbol"] for s in info["symbols"]
if s["status"] == "TRADING" and s["quoteAsset"] == "USDT"]
آپ نے جون 2026 میں اس اینڈپوائنٹ کو کال کیا اور اس کا جواب استعمال کرکے طے کیا کہ مارچ 2021 میں کیا قابلِ تجارت تھا۔ اس فہرست کا ہر سمبل جون 2026 تک زندہ رہا تھا، کیونکہ فہرست اسی بنیاد پر بنی تھی۔ یہی پوری خرابی ہے، اور یہ آپ کے باقی کاسٹ ماڈل سے بھی زیادہ اہم ہے۔
اینڈپوائنٹ آپ کو کیا نہیں بتائے گا
exchangeInfo میں کوئی تاریخ نہیں۔ نہ asOf پیرامیٹر، نہ آرکائیو، نہ تبدیلیوں کا ریکارڈ۔ یہ صرف موجودہ لمحے کی تصویر ہے، اور Binance نے کبھی اس سے زیادہ دینے کا وعدہ نہیں کیا۔ جب کوئی کنٹریکٹ ڈی لسٹ ہوتا ہے تو اس کا اندراج جواب سے حذف ہو جاتا ہے اور API کے لحاظ سے اس کا ٹکر موجود رہنا بند ہو جاتا ہے۔ Binance نے 2019 سے اب تک 600 سے زیادہ USDⓈ-M پرپیچوئلز لسٹ کیے ہیں اور سو سے کہیں زیادہ ریٹائر کیے ہیں۔ BTS، COCOS، TOMO، RAY، FTT، SC، اور 2021 کے آلٹ سیزن کے طویل سلسلے کے وہ کنٹریکٹس جن کا ایک شاندار کوارٹر گزرا، پھر ٹریڈنگ گھٹتی گئی یہاں تک کہ ایکسچینج نے انہیں ہٹا دیا۔
سوچیں کہ 30 دن کا مومینٹم اسکرین کن ناموں کو پسند کرتا ہے۔ BTC کو نہیں۔ اسے وہ چیز پسند ہے جو ابھی لسٹنگ پمپ اور ٹوئٹر کے شور پر تین گنا ہوئی ہو۔ اس گروہ اور آخرکار ڈی لسٹ ہونے والوں کے گروہ میں بڑا اشتراک ہے، اور آپ کے یونیورس فلٹر نے وہ مشترک حصہ ہی نکال دیا۔
میں نے آپ کا رن ہمارے اسنیپ شاٹ آرکائیو، پوائنٹ اِن ٹائم یونیورس، اسی سگنل اور انہی اخراجات کے ساتھ دوبارہ چلایا، تو Sharpe 0.74 اور ڈراڈاؤن 31% نکلا۔ اس فرق کا تقریباً دو پانچواں حصہ ڈی لسٹ ہونے والے وہ نام ہیں جنہیں آپ رکھنے کے مجاز ہی نہیں تھے۔ مزید ایک چوتھائی اسی مسئلے کی الٹی صورت ہے، جو زیادہ باریک ہے اور میرا خیال ہے آپ کو اس سے کم پسند آئے گی۔
ٹائم مشین کا دوسرا سرا: وہ سمبلز جو ابھی موجود ہی نہیں تھے
آپ کا فیچر 90 دن کا ریٹرن ہے۔ آپ کی رولنگ ونڈو میں min_periods=20 ہے، کیونکہ آپ نے اسے ایک بار اس لیے مقرر کیا تھا کہ وارم اپ سیمپل کی پہلی سہ ماہی کو اڑا نہ دے، پھر دوبارہ اس پر نظر نہیں ڈالی۔ چنانچہ 21 دن پہلے آن بورڈ ہونے والے کنٹریکٹ کو لسٹنگ کے بعد کی تین ہفتوں کی قیمتوں سے مومینٹم اسکور ملتا ہے، لسٹنگ اچھی رہی ہو تو عموماً سرفہرست ڈیسیل میں آتا ہے، اور آپ کی بُک میں داخل ہو جاتا ہے۔
اس حصے کو کسی حد تک جائز کہا جا سکتا ہے۔ مسئلہ یہ ہے: آپ کے ڈیٹا فراہم کنندہ نے ان میں سے بعض سمبلز کی پرپ کے وجود سے پہلے کی قیمتیں اسپاٹ یا انڈیکس ڈیٹا سے پُر کر دیں، اس لیے چند کنٹریکٹس کی kline ہسٹری ان کے اپنے onboardDate سے بھی پہلے کی ہے۔ آپ تقریباً ایک منٹ میں یہ جانچ سکتے ہیں۔ اپنی قیمتوں کی ٹیبل کو آن بورڈ ہونے کی تاریخوں کے ساتھ جوڑیں اور لسٹنگ سے پہلے کے ریکارڈ گنیں۔ آپ کے ڈیٹا میں 41 سمبلز کی لسٹنگ سے پہلے کی بارز ہیں، اور ان میں سے ایک، 2023 کے موسمِ گرما میں، ایک ہی ہفتے میں ایکویٹی کرو میں 6% اضافہ ڈالتی ہے، ایسی پوزیشن سے جو ایک ایسے کنٹریکٹ میں تھی جو مزید نو دن تک وجود میں آنے والا نہیں تھا۔
ٹکر کی سٹرنگ کوئی شناختی نمبر نہیں۔ یہ ایک لیبل ہے جسے ایکسچینج کرائے پر دیتا ہے، کبھی دو بار بھی۔
اس سے نام بدلنے کا معاملہ سامنے آتا ہے۔ MATICUSDT، POLUSDT بن گیا۔ FTMUSDT، 1:1 کنورژن کے بعد SUSDT بن گیا۔ مئی 2022 کی LUNA صورتحال نے LUNCUSDT چھوڑا اور بعد میں بالکل نیا LUNAUSDT آیا، جس کی ٹکر جڑ اس چیز سے مشترک ہے جس نے کم و بیش سب کچھ کھو دیا تھا۔ اگر آپ کا لوڈر سمبل سٹرنگ کو کلید بناتا ہے اور جو فائلیں ملیں انہیں جوڑ دیتا ہے، تو کم از کم ایک سیریز میں ایسا انقطاع ہے جو قیمت کی حرکت نہیں۔ آپ کا مومینٹم فیچر اس انقطاع کو کراس سیکشن کا سب سے طاقتور سگنل سمجھے گا۔
باقی سب کچھ جو آپ کے نیچے بدلتا رہتا ہے
جب آپ مان لیتے ہیں کہ سمبلوں کی فہرست وقت کے ساتھ بدلتی ہے، تو یہی دلیل اس جواب کے ہر دوسرے فیلڈ پر بھی لاگو ہوتی ہے۔ آپ ان سب کے لیے آج کی قدریں استعمال کر رہے ہیں۔
| فیلڈ | یہ کیسے بدلتا ہے | کیا خراب ہوتا ہے |
|---|---|---|
| status | TRADING → SETTLING → غائب | سروائیورشپ؛ ایسے اختتامی نرخ پر فرضی اخراج جو کبھی ٹریڈ ہی نہیں ہوا |
| onboardDate | ہر ہفتے نئی لسٹنگز؛ ختم شدہ سمبلز کے لیے غائب | کنٹریکٹس کے وجود میں آنے سے پہلے ٹریڈنگ |
| tickSize / stepSize | قیمت کی سطح بدلنے پر دوبارہ مقرر ہوتے ہیں | آرڈر کی راؤنڈنگ، اور ایسی لمٹ قیمتیں جو مسترد ہو جاتیں |
| minNotional | کم لیکویڈیٹی والی بُکس میں وقت کے ساتھ بڑھایا گیا | چھوٹی پوزیشنیں جنہیں آپ کا لائیو روٹر قبول نہ کرتا |
| fundingIntervalHours | برسوں تک 8h، پھر کئی سمبلز پر 4h یا 1h | بالکل انہی آلٹس پر کیری 2–3× غلط، جو آپ کا اسکرین رکھتا ہے |
| leverage brackets | درجے اور مینٹیننس مارجن پر نظرثانی ہوتی رہی | لیکویڈیشن ماڈلنگ اور مارجن کی گنجائش |
آپ کے معاملے میں فنڈنگ والی خرابی سب سے زیادہ نقصان دہ ہے۔ آپ کا جمع کرنے والا لوپ پوری ہسٹری میں روزانہ تین ادائیگیاں فرض کرتا ہے۔ آلٹ بُک کا ایک خاصا حصہ چار گھنٹے والی فنڈنگ پر منتقل ہوا، اور زیادہ فنڈنگ والے ناموں کی شارٹ پوزیشنوں سے آپ کے مصنوعی PnL کا بڑا حصہ آتا ہے۔ یہاں آپ محض راؤنڈنگ کی معمولی غلطی پر نہیں ہیں۔ غلطی کئی گنا ہے۔
ڈی لسٹنگ خود ایک واقعہ ہے، اور آپ اس کی ماڈلنگ نہیں کر رہے
پوائنٹ اِن ٹائم دوبارہ رن میں میں نے حکمتِ عملی کو فراخ دلانہ اخراج دیا۔ حقیقی ڈی لسٹنگ ایک طے شدہ طریقۂ کار سے ہوتی ہے: اعلان، عموماً سات سے چودہ دن پہلے، پھر صرف پوزیشن کم کرنے کی مہلت، پھر مارک قیمت پر جبری سیٹلمنٹ۔ اعلان عوامی معلومات ہے اور آپ اس پر عمل کر سکتے ہیں، اس لیے دیانت دار سمیولیشن میں اعلان والے دن کے اختتامی نرخ پر اخراج ہونا چاہیے۔ لیکن ایک عام آلٹ کی ڈی لسٹنگ میں یہ نرخ پہلے والے ہفتے کے مقابلے میں پہلے ہی 10-20% نیچے ہوتا ہے، بُک میں لیکویڈیٹی کم ہوتی ہے، اور آپ کے سلپیج جزو کو پتا ہونا چاہیے کہ وہ ایک مختلف مارکیٹ حالت میں کام کر رہا ہے۔ اگر آپ کا فل انجن بغیر کسی اثر کے سیٹلمنٹ قیمت دے دے، تو آپ نے خاموشی سے مرتے ہوئے اثاثوں کو منصفانہ قیمت پر قابلِ تجارت بنا دیا ہے۔
اگر آپ نے exchangeInfo آرکائیو نہیں کیا، تب بھی کام ختم نہیں ہوا۔ عوامی ڈیٹا ڈمپ data.binance.vision/data/futures/um/monthly/klines/ میں ڈی لسٹ شدہ سمبلز کی ڈائریکٹریاں API کے انہیں بھول جانے کے کافی عرصے بعد تک موجود رہتی ہیں۔ ڈائریکٹری کی فہرست نکالیں؛ ہر سمبل کی پہلی اور آخری ماہانہ فائل سے لسٹنگ اور ڈی لسٹنگ کی ایک قابلِ استعمال مدت مل جائے گی، کسی وینڈر کے بغیر۔ یہ ریکارڈ نہیں، تعمیرِ نو ہے، اور اس سے ٹک سائز یا فنڈنگ وقفے واپس نہیں ملیں گے۔ لیکن یہ بتا دے گا کہ کون کب موجود تھا، اور پیر کے لیے آپ کی ضرورت کا 80% یہی ہے۔
سگنل کو دوبارہ چھونے سے پہلے میں آپ سے کیا بنواؤں گا
- ایک cron جو آپ کی تحقیق میں شامل ہر وینیو سے روزانہ exchangeInfo کھینچے اور تاریخ کے لحاظ سے آبجیکٹ اسٹوریج میں محفوظ کرے۔ Gzipped یہ آدھے میگا بائٹ سے بھی کم ہے۔ دس سال کا خرچ S3 میں معمولی سا ہوگا، اور بدلے میں آپ کو ایسی تحقیقی صلاحیت ملے گی جو بعد میں خریدی نہیں جا سکتی۔
- ان اسنیپ شاٹس سے اخذ کردہ ایک اثاثہ ماسٹر: ہر (venue, symbol, valid_from, valid_to) کے لیے ایک قطار، تمام فیلڈز سمیت۔ یکے بعد دیگرے اسنیپ شاٹس کا فرق نکال کر اسے بنائیں، اور کسی بھی فیلڈ کی تبدیلی کو نئی قطار سمجھیں۔
- ایک یونیورس فنکشن جس میں ٹائم اسٹیمپ دینا لازمی ہو۔
universe(ts)، کبھیuniverse()نہیں۔ ڈیفالٹ کو اس طرح ناممکن بنائیں کہ کوئی بھی، حتیٰ کہ مستقبل میں آپ خود رات 1 بجے بھی، غلطی سے زندہ بچنے والوں کی فہرست استعمال نہ کر سکے۔ - ڈیٹا لوڈر میں لسٹنگ سے پہلے کی بارز کی جانچ: کوئی بار
onboard_tsسے ایک دن پہلے تک بھی موجود نہ ہو۔ رن ناکام کریں، صرف تنبیہ نہ دیں۔ - ایک مستحکم اندرونی انسٹرومنٹ ID جو نام بدلنے کے بعد بھی برقرار رہے، اور ٹکر محض ایک وصف ہو۔ POL اور MATIC کو ایک ID پر نقش کریں، اور نام کی تبدیلیوں کو نشان زد کریں تاکہ تسلسل کی منطق ان کے پار جوڑنے سے انکار کر سکے۔
یہ سب کریں اور دوبارہ رن کریں۔ میرا اندازہ ہے نتیجہ میرے 0.74 کے قریب آئے گا، پھر دلچسپ سوال یہ ہوگا کہ مردہ ناموں سمیت 0.74 میں پیپر ٹریڈنگ کے لائق کچھ ہے بھی یا نہیں۔ ہو سکتا ہے ہو۔ پرپس میں کراس سیکشنل مومینٹم بے معنی نہیں، اور یونیورس درست کرنے کے بعد جو حصہ بچے گا اس میں سے کچھ شارٹ سائیڈ کا حقیقی کیری ہے۔ آپ یہ بھی دیکھیں گے کہ آپ کے پیپر نتائج اور بیک ٹیسٹ میں اتفاق ہونے لگے گا، کیونکہ پیپر ٹریڈنگ ہمیشہ پوائنٹ اِن ٹائم یونیورس پر چلتی رہی ہے۔ اس کے پاس کوئی دوسرا راستہ تھا ہی نہیں۔
پسِ نوشت: یہ کرپٹو کی انوکھی بات نہیں، بس یہاں زیادہ نمایاں ہے۔ ایکویٹی محققین CRSP کی جانب سے ڈی لسٹنگ ریٹرنز اور دوبارہ استعمال ہونے والے ٹکر بھیجنا شروع کرنے کے بعد سے ان سے نبردآزما ہیں، اور پریڈکشن مارکیٹس میں یہ معاملہ انتہا تک پہنچ جاتا ہے: ہر کنٹریکٹ منصوبے کے تحت ایکسپائر ہوتا ہے، اس لیے یونیورس صرف لسٹنگز اور اموات پر مشتمل ہے۔ اگر کبھی یہ اسکرین Kalshi پر منتقل کریں تو پہلے اثاثہ ماسٹر بنائیں۔ وہاں ہسٹری کی کوئی اور قسم ہے ہی نہیں۔
← تمام پوسٹس


