ফাংশনটাকে enter_pack বলা হয়েছিল। সেটাই সতর্কবার্তা হওয়া উচিত ছিল। এক রিসার্চ এজেন্ট একটা BTC ক্যাশ-অ্যান্ড-ক্যারি লিখেছিল: পার্পেচুয়াল যখন স্পটের ওপরে 8 বেসিস পয়েন্টের বেশি ট্রেড করে, স্পট কিনো, পার্প শর্ট করো, চুপচাপ বসে থাকো। ফান্ডিং আর বেসিস বাকিটা সামলাবে। ব্যাকটেস্ট দুটো লেগই একই মিলিসেকেন্ডে ফিল করেছিল, মিডে, ভদ্রতার এক টিক যোগ করে। ইকুইটি কার্ভ ছিল একটা সিঁড়ি। কেউ একে রোমাঞ্চকর বলত না। সেটাই ছিল সেলিং পয়েন্ট।
সোমবার আমরা এটাকে পেপারে তুলে দিলাম।
সোমবার: যে প্যাক সবসময় ফিল হত
প্রথম সিগন্যাল এল 11:17 UTC-তে। স্ক্রিনে বেসিস ছিল 9.4 bps, পার্প চড়া। ব্যাকটেস্টে enter_pack 2টি ফিল আর 0 রেসিডুয়াল ফেরত দিয়েছিল। পেপারে সে ফেরত দিল আস্কে 0.40 BTC-র একটা স্পট ফিল, আর পার্পে একটা রেস্টিং শর্ট যা ট্রেডই হল না।
স্পট 4 bp taker ফি আর প্রায় 1 bp স্প্রেড দিয়েছিল। আমরা যে পার্প দাম চেয়েছিলাম সেটা তখনও বুকে ছিল, তারপর আর ছিল না। 20 সেকেন্ড পরে কোট করা বেসিস হল 5 bps, কারণ আমরা সদ্য স্পট লিফট করেছি। 40 সেকেন্ড পরে পার্প ফিল হল, মুভের পরে। আমরা প্যাক হয়ে গেলাম। এমন এক বেসিসে প্যাক হলাম যা আর ঢোকা আর বেরোনোর খরচও শোধায় না।
ব্যাকটেস্ট বুক করত "+9.4 bps ক্যারি, রেসিডুয়াল 0." ব্লটারে ছিল 4 bps স্পট taker খরচ, 40 সেকেন্ডের আনহেজড লং, আর প্রায় 5-এর একটা এন্ট্রি গ্যাপ। আমার স্যাম্পল ছিল 1টি, তবুও সিঁড়ির ওপর অতিরিক্ত আস্থা।
মঙ্গলবার: আমরা ফাংশনটা খুললাম
enter_pack লেগের একটা তালিকা আর একটা টার্গেট মিড নিত। লুপ চালাত, প্রতিটা লেগ mid * (1 ± slip)-এ ফিল করত, আর 1টি পোর্টফোলিও সারি লিখত। দ্বিতীয় কোনো টাইমস্ট্যাম্প ছিল না। লেগ 2 নেই এমন কোনো শাখা ছিল না। ইউনিট টেস্ট অ্যাসার্ট করত residual == 0।
এমন একটা টেস্ট যা মনে করায় আপনি পরিণত কেউ। এটা কখনো ফেল করবে না।
আমরা প্যাকটা ভেঙে নিজস্ব স্টেটওয়ালা 2টি অর্ডার করলাম: জমা দেওয়া, আংশিক, ফিল, বাতিল। অসম্পূর্ণ হয়ে উঠল একটা ফার্স্ট-ক্লাস অবজেক্ট। হিস্টোরিক্যাল রিপ্লেতে এখনও আসল বুক ছিল না, তাই চিট করলাম। দ্বিতীয় ফিল দেরি করো সোমবারের অপেক্ষা থেকে একটা ড্র দিয়ে (গড় 26 সেকেন্ড, একটা টেইল যা আমার পছন্দ ছিল না), আর সেই উইন্ডোতে স্পট যা করেছে তাতেই তার দাম ড্রিফট করো। মোটাদাগের, কিন্তু লাঞ্চের আগেই সিঁড়িতে খাঁজ পড়তে লাগল: যে প্যাক 3 bps-এ ঢুকেছে, যে প্যাক কখনো প্যাকই হয়নি।
বুধবার: 3 সেকেন্ড, তারপর ফেলে দাও
দ্বিতীয় লেগ 3 সেকেন্ডের মধ্যে না বসলে, প্রথমটা ফ্ল্যাটেন করো। সেখান থেকেই শুরু করা উচিত ছিল। রক্ষণশীল শোনায়, যতক্ষণ না অ্যাবর্টের দাম কষো। ফ্ল্যাটেন মানে ঢুকতে স্পট ক্রস করেছ, বেরোতেও ক্রস করবে। 2টি taker ফি, 2টি স্প্রেড, কোনো ক্যারি নেই, কোনো ফান্ডিং নেই। নতুন করে লেখা রিপ্লেতে সেই অ্যাবর্টগুলো বিরল ছিল না। সেগুলো জমা হয়েছিল সেই বারগুলোতে যেখানে বেসিস সবচেয়ে "আসল" দেখাচ্ছিল, যা সাধারণত সেই বারই যেখানে স্পট দিয়ে ইতিমধ্যে কিছু প্রবাহিত হচ্ছে।
বুধবার রাতের মধ্যে তর্ক করার মতো 17টি পেপার সিগন্যাল জমেছিল আমাদের।
| ব্যাকটেস্ট, সোমবার সকাল | পেপার, বুধবার নাগাদ | |
|---|---|---|
| এন্ট্রি | দুটো লেগই মিডে, 1টি টাইমস্ট্যাম্প | স্পট আস্কে; পার্প 5–40s পরে, অথবা কখনোই না |
| রেসিডুয়াল | সবসময় 0 | 17টি সিগন্যালের মধ্যে 10টিতে আনহেজড |
| চালু ট্রেডে ফি | 2টি taker | 2টি taker, অথবা অ্যাবর্ট করলে 4টি |
| PnL ড্রাইভার | বেসিস + ফান্ডিং | অপেক্ষাকালে স্পট যা করেছে |
এক সহকর্মীর এখনও একটা নোটবুক আছে যা প্যাককে লিস্টেড প্রোডাক্ট হিসেবে ধরে, BTC_CARRY, ফ্ল্যাট 2 bp "এক্সিকিউশন ট্যাক্স" সহ। সেই নোটবুকটা আমার ভালো লাগত। এজেন্ট যে সিঁড়ি বানিয়েছিল, এটাও সেই একই সিঁড়ি বানাত। ট্যাক্স একটা গড়। অরফানগুলো একটা ডিস্ট্রিবিউশন। পাতলা এক ঘণ্টায় গড় চাপা পড়ে না; 0.40 BTC অবশিষ্ট স্পট পারে।
বৃহস্পতিবার: অবশিষ্ট, তারপর কফি
কিউতেও অপেক্ষা করতে হতেই 3 সেকেন্ড প্রায় সবকিছু অ্যাবর্ট করে দিল। আমরা পেপার শিথিল করে 15 করলাম। বৃহস্পতিবার 02:11 UTC-তে স্পট ফিল হল আর পার্প হল না। আমি তখনও শোকের "রেস্ট করবে, লিফট হবে" পর্যায়ে ছিলাম যখন কফি করতে গেলাম।
02:11:08 ফিল BTCUSDT 0.40 buy
02:11:08 সাবমিটেড BTCUSDT-PERP 0.40 sell, post-only
02:11:41 এখনও ওয়ার্কিং
02:26:00 রেসিডুয়াল মার্ক −18.1 bps
একটা শান্ত উইন্ডোতে BTC 18 bps পড়ে গেল। রেসিডুয়ালই ছিল পুরো ট্রেড। ফান্ডিং, যখন প্রিন্ট হল, ক্রেডিট গেল এমন এক পার্পে যা আমাদের ছিলই না। স্পট শুধু বসে রইল লং হয়ে। মূল ব্যাকটেস্টের ওভারনাইট পাথে কখনো এক-লেগের পজিশন ছিল না, তাই সে কখনো সেই প্রশ্ন করেনি যা আমরা অন্য সব বুককে করি: এই অবশিষ্ট সবচেয়ে খারাপ কোন বার প্রিন্ট করতে পারে, আর যে পজিশন ধরে রাখার ইচ্ছাই ছিল না তার স্টপ কোথায়?
7টি পূর্ণ প্যাকও কোনো হিরো ছিল না। দ্বিতীয় লেগ প্রিন্ট হতে হতে আমাদের নিজেদের স্পট লিফট ইতিমধ্যে ইনডেক্সের ওপর চেপে বসেছিল, আর এন্ট্রি বেসিস সিগন্যাল ফায়ার করা স্ন্যাপশটের চেয়ে 3–5 bps খারাপ ছিল। 8 bps থ্রেশহোল্ডটা ছিল স্ক্রিনের ওপর একটা সংখ্যা।
পরেরবার যা এড়িয়ে যাব
আমরা মাল্টি-লেগকে একটা সিঙ্গেল ফিল ফাংশন হিসেবে শিপ করব না। একই নিয়ম পার্প-স্পট ক্যারির জন্য, ক্যালেন্ডারের জন্য, অথবা যে কল ভার্টিক্যাল একটা এজেন্ট 2টি লিমিট হিসেবে জমা দেয় আর দুটোই মিডে "ফিল" হলে উদযাপন করে।
- লেগ প্রতি অর্ডার স্টেট, পার্শিয়ালসহ। প্যাককে 2টি টিকিটের প্যারেন্ট হিসেবে ধরো।
- একটা ম্যাক্স-অরফান টাইমার যা সত্যিই ফায়ার করে, আর একটা ফ্ল্যাটেন পথ যা বেরোনোর সময় 2টি স্প্রেড দেয়।
- রেসিডুয়ালে মার্ক-টু-বুক, অবশিষ্টের জন্য সাইজ করা স্টপ সহ। প্যাকড নেট ভুল নোশনাল।
- দুটো লেগ বসা পর্যন্ত কোনো ক্যারি ক্রেডিট নয়, কোনো ফান্ডিং অ্যাক্রু নয়। অসম্পূর্ণ মানেই অসম্পূর্ণ।
- যার 2টি টিকিট আছে এমন কিছুর জন্য মিড-অন-মিড ডিফল্ট হিসেবে নয়। অনুমান করতেই হয় তো পাতলা লেগে আরও খারাপ ধরো, আর দ্বিতীয় ফিলটা আরও দেরিতে।
আর আমরা test_pack_is_atomic-কে রেপোতে ঢুকতে দেব না। Atomic ম্যাচিং ইঞ্জিনের বৈশিষ্ট্য, হেল্পার ফাংশনের নয়। BTC স্পট আর BTC পার্পেচুয়াল দুটো বুক যেগুলো মাঝে মাঝে ছন্দ মেলায়। পেপার সেই জায়গা যেখানে তারা ছন্দ মেলানো থামে, আর সেই একমাত্র কারণেই সিঁড়িটা কখনো আকর্ষণীয় ছিল।



