আপনি আমাকে ইকুইটি কার্ভ আর ট্রেড লগ পাঠিয়ে জানতে চেয়েছেন, ফলটা সত্যি হওয়ার পক্ষে অতিরিক্ত ভালো কি না। সংক্ষিপ্ত উত্তর: এটা স্পষ্টতই বাস্তবও নয়, স্পষ্টতই ভুয়াও নয়; প্রায় এক দিনের কাজেই কোনটি তা জানা সম্ভব। বিস্তারিত উত্তর দিচ্ছি, কারণ রায়ের চেয়ে কারণ নির্ণয়টাই বেশি জরুরি।
আপনার কৌশলটি হলো: Binance-এ BTCUSDT ও ETHUSDT পারপেচুয়াল কন্ট্র্যাক্টে 15 মিনিটের mean-reversion সংকেত; 96-বারের গড়ের তুলনায় দামের z-score, চরম মানে বিপরীত দিকে ট্রেড, 2-8 বার ধরে রাখা। ব্যাকটেস্টের সময়সীমা Feb 2024 থেকে Jun 2026। আপনার ফি মডেল বাদ দিয়ে Sharpe 2.9। আর দিনের মিনিট অনুযায়ী P&L ভাগ করে দেখেছেন, এর 71% এসেছে সেই তিনটি 15-মিনিটের পরিসর থেকে, যার মধ্যে 00:00, 08:00 এবং 16:00 UTC পড়ে।
এটা কেন সন্দেহজনক, তা আপনি জানেনই। বলি, কেন এর কিছুটা আবার সন্দেহজনক নয়।
ফান্ডিং ঘড়ি বাস্তব, এবং এটি সত্যিই দাম সরায়
Binance-এ পারপেচুয়াল ফান্ডিং সেটেল হয় 00:00, 08:00 এবং 16:00 UTC-তে। সেটেলমেন্টের মুহূর্তে খোলা থাকা প্রতিটি পজিশন ফান্ডিং দেয় বা পায়। এটি নির্দিষ্ট সময়ে হওয়া, আগে থেকেই সবার জানা একটি নগদ প্রবাহ, যা এর আশপাশে সত্যিকারের অর্ডার ফ্লো তৈরি করে—এটা ডেটার আর্টিফ্যাক্ট নয়, ট্রেডাররা সত্যিই এমন করে।
এই প্রবাহের একটি ধরন আছে। সেটেলমেন্টের 10 থেকে 30 মিনিট আগে, যারা ফান্ডিং দিতে চায় না তারা পজিশন বন্ধ করে বা হেজ করে। ওই সময়ের ফান্ডিং রেট যদি +0.04% হয়, যে লং পজিশন এমনিতেই বন্ধ করার কথা, সেটি মার্কের পরে নয়, আগেই বন্ধ হবে; আর পারপেচুয়াল কন্ট্র্যাক্টে শর্ট থাকা বেসিস ট্রেডার সেটেলমেন্ট পর্যন্ত অনায়াসে ধরে রাখবে। সময়সীমা বেঁধে দেওয়া এই চাপ দুই দিকে সমান নয়। এরপর সেটেলমেন্টের ঠিক পরে, সেই প্রবাহের কিছুটা ফিরে আসে—ফান্ডিং এড়ানো লং পজিশনগুলো আবার খোলে—ফলে আংশিক উল্টো চলন দেখা যায়।
তাই 23:52-তে সক্রিয় হয়ে 00:12-তে বন্ধ হওয়া mean-reversion সংকেতটি ঠিক এমন জায়গায় দাঁড়ায়, যেখানে পূর্বানুমেয় তারল্য-ঘটনা ঘটে। আপনার এজের কিছুটা সম্ভবত ক্যালেন্ডার-নির্ভর যান্ত্রিক ধাক্কার বিপরীতমুখী চলন থেকে আসে। এটি বাজারের মাইক্রোস্ট্রাকচারের বাস্তব একটি ঘটনা, এবং বহু বছর ধরেই বাস্তব।
তবে আপনার মতো বড় একটি সংখ্যা বিশ্বাস করার আগে আমি কয়েকটি বিষয় জানতে চাইব।
যে ক্রমে আমি যাচাই করতাম, সেই ক্রমে 6টি বিষয়
সবচেয়ে কম খরচের যাচাই দিয়ে শুরু করুন, কারণ এ ধরনের বেশির ভাগ কৌশল দ্বিতীয় বা তৃতীয় যাচাইতেই বাদ পড়ে।
- আপনার ফান্ডিং P&L কি দুবার গণনা হয়েছে? আপনার ফিল ইঞ্জিন যদি খোলা পজিশনে ফান্ডিং প্রয়োগ করে এবং আপনার দামের সিরিজ যদি শেষ ট্রেডের দামের বদলে মার্ক-প্রাইস সিরিজ হয়, তাহলে ফান্ডিং দুবার দিচ্ছেন বা পাচ্ছেন—একবার সরাসরি, আরেকবার মার্কের অভিসারী আচরণের মাধ্যমে। প্রতিটি ট্রেডের প্রকৃত ফান্ডিং নগদ প্রবাহ বের করুন, তারপর এক্সচেঞ্জের ঐতিহাসিক ফান্ডিং এন্ডপয়েন্টের সঙ্গে 10টি ট্রেড মিলিয়ে দেখুন।
- আপনার ফান্ডিং রোতে কোন টাইমস্ট্যাম্প আছে? Binance-এর ফান্ডিং-রেট ইতিহাসে fundingTime বলতে সেটেলমেন্টের মুহূর্ত বোঝায়। কিছু ডেটা সরবরাহকারী একই রোটি যে সময়সীমার জন্য প্রযোজ্য, তার শুরুতে টাইমস্ট্যাম্প দেয়। আপনার ডেটায় যদি 8 ঘণ্টার সরণ থাকে, তাহলে আপনি ভবিষ্যৎ জানা সংকেত নিয়ে ট্রেড করেছেন। ভুয়া ফান্ডিং এজ দেখা দেওয়ার সবচেয়ে সাধারণ কারণ এটাই, এবং এতে আপনার P&L-র মতোই ফল হয়—সেটেলমেন্টের বারগুলোতে কেন্দ্রীভূত, দিক সঠিক, দেখতে অসাধারণ।
- 00:00:00-তে স্প্রেডের কী হয়? অর্ডার বুক দেখুন, klines নয়। 1-মিনিটের বারে স্প্রেড চোখে পড়ে না; মাঝারি স্তরের ভেন্যুতে সেটেলমেন্টের আশপাশের কয়েক সেকেন্ডে এটি 3-5 গুণ বাড়তে পারে। আপনার ফিল যদি মিড-প্রাইস বা ক্লোজ-প্রাইসে মডেল করা হয়, তাহলে এমন স্প্রেড থেকে মুনাফা ধরছেন, যা বাস্তবে ছিল না।
- অন্য দুটি সেটেলমেন্টে চালালে কি কৌশলটি টিকে থাকে? তিনটি উইন্ডো আলাদা করে দেখুন। 00:00 UTC-র প্রবাহ 08:00-র (এশিয়ার বাজার খোলার কাছাকাছি) এবং 16:00-র (মার্কিন বিকেলের) প্রবাহের চেয়ে আলাদা। সব মুনাফা যদি তিনটির মধ্যে একটিতে থাকে, তাহলে আপনার কাছে প্রায় 300টি ঘটনা আছে, 900টি নয়; সেই হিসেব ধরে Sharpe আবার গণনা করা উচিত।
- ফান্ডিংয়ের সময়সূচি আলাদা এমন ভেন্যুতেও কি কৌশলটি টিকে থাকে? এটাই ভালো যাচাই। ঘণ্টায় একবার বা অন্য সময়সূচিতে ফান্ডিং সেটেল করে এমন ভেন্যুতে একই সংকেত চালান। প্রভাবটি ফান্ডিং-চালিত হলে, সেটি ওই ভেন্যুর ঘড়ির সঙ্গে মিলবে। যে ভেন্যুতে 00:00 UTC-তে সেটেলমেন্ট হয় না, সেখানে সংকেতটি যদি তবু 00:00 UTC-তে সক্রিয় হয়, তাহলে ফান্ডিংয়ের প্রভাব নয়, ডেটা পাইপলাইনে মধ্যরাতের আর্টিফ্যাক্ট পেয়েছেন।
- P&L-এর কতটা প্রথম ও শেষ 90 সেকেন্ডে আসে? পুরো এজ যদি দুই মিনিটেরও কম সময়ের উইন্ডোতে থাকে, তাহলে এন্ট্রি-প্রাইস সঠিকভাবে ধরার জন্য আপনার 15-মিনিটের বার অনেক বেশি মোটা। মডেল করা ফিলটিকে ওই উইন্ডোতে পাওয়া সেরা ফিল ধরে নেওয়া উচিত, বাস্তবে আপনি যে ফিল পাবেন তা নয়।
আমার হাতে মাত্র এক ঘণ্টা থাকলে, পাঁচ নম্বর যাচাইটাই আগে করতাম। এটি পরিষ্কার প্রাকৃতিক পরীক্ষা, আর দ্বিতীয় ডেটা উৎস ছাড়া নতুন কোনো অবকাঠামো লাগে না।
সেটেলমেন্ট উইন্ডোতে আসলে কত খরচ হয়
ধরে নিন প্রভাবটি বাস্তব, এবং আপনি 6টি যাচাইতেই টিকে গেছেন। এবার সঠিকভাবে এর খরচ হিসাব করুন, কারণ আপনি যে ট্রেডটি মডেল করছেন, বাস্তবে সেই ট্রেডটি পাবেন না।
USDⓈ-M পারপেচুয়াল কন্ট্র্যাক্টে, $50k পরিমাণের ট্রেডে taker এন্ট্রি ও taker এক্সিট ধরে, নিরিবিলি সময়ের সঙ্গে সেটেলমেন্ট পার হওয়া 20-মিনিটের রাউন্ড ট্রিপের তুলনা এমন:
| নিরিবিলি সময় (যেমন 03:20 UTC) | 00:00 UTC পার হয়ে | |
|---|---|---|
| রাউন্ড ট্রিপে taker ফি | 0.09% | 0.09% |
| সাধারণ স্প্রেড খরচ | ~0.4 bp | 1.5-3 bp |
| $50k পরিমাণের ট্রেডে স্লিপেজ | ~0.5 bp | 2-6 bp |
| দেওয়া/পাওয়া ফান্ডিং | 0 | ±1 থেকে ±4 bp (পুরো সময়সীমায়) |
| বাস্তবসম্মত মোট খরচ | ~10 bp | ফান্ডিংয়ের আগে 13-19 bp |
ফান্ডিংয়ের সারিটাই এখানে আগ্রহের বিষয়, আর সে কারণেই প্রথম যাচাইটি বারবার করতে বলছি। সেটেলমেন্ট পার হয়ে পজিশন ধরে রাখলে, যতক্ষণই ধরে রাখুন না কেন, ওই সময়সীমার পুরো ফান্ডিং দিতে বা পেতে হবে। 23:59:54-তে 12 সেকেন্ড পজিশনে থাকলেও পুরো 8 ঘণ্টার ফান্ডিং লাগবে। গড়ে 20 মিনিট পজিশন ধরে রেখে সেটেলমেন্ট পার হওয়া কৌশলটি 20-মিনিটের ট্রেডে 8 ঘণ্টার ক্যারি দিচ্ছে। আপনার ফি মডেলে সেই অনুযায়ী পুরো ফান্ডিং ধরতে হবে, আনুপাতিক হারে নয়।
এর সঙ্গে সম্পর্কিত আরেকটি ফাঁদ: সেটেলমেন্টের সময় পজিশন না ধরে রাখতে চাইলে—23:58-তে বেরিয়ে 00:02-তে আবার ঢুকলে—ফি দেওয়ার সংখ্যা দ্বিগুণ হবে। তখন আপনার কৌশলের মূল ধারণা দাঁড়ায়, দুটি অতিরিক্ত taker ট্রেডের খরচ একটি ফান্ডিং পেমেন্টের চেয়ে কম। কখনো কখনো তা সত্যি। ব্যাকটেস্টকে নিজে থেকে সিদ্ধান্ত নিতে না দিয়ে, স্পষ্টভাবে হিসাব করুন।
যে বাজার-পরিস্থিতির প্রশ্নটি এখনো করেননি
আপনার নমুনা Feb 2024 থেকে Jun 2026। এই সময়ে ফান্ডিং সব সময় একই বাজার-পরিস্থিতিতে ছিল না। অনেক দীর্ঘ সময় 8-ঘণ্টার রেট 0.01% সর্বনিম্ন স্তরে আটকে ছিল, আর সেটেলমেন্টের আগে পজিশন বদলানোর কারও কারণ ছিল না। আবার এমন সপ্তাহও ছিল, যখন কয়েক দিন ধরে রেট 0.05%+ ছিল এবং সেটেলমেন্ট-পূর্ব প্রবাহ ছিল তীব্র।
ট্রেডের সময়কার প্রচলিত ফান্ডিং রেট অনুযায়ী P&L ভাগ করুন—ধরা যাক, রেটের পরম মান ধরে 4টি ভাগ। এজটি যদি ফান্ডিং-প্রবাহ থেকে আসে, তাহলে |funding| বাড়ার সঙ্গে এটি মোটামুটি ধারাবাহিকভাবে বাড়ার কথা। ফান্ডিং প্রায় শূন্য হলে এজও প্রায় শূন্য; ফান্ডিং বেশি হলে এজও বেশি। ভাগগুলোতে এজ সমান থাকলে, বা আরও খারাপভাবে, কম ফান্ডিংয়ের ভাগে বেশি কেন্দ্রীভূত হলে, ফান্ডিংয়ের ব্যাখ্যাটি অন্য কিছুর ওপর জুড়ে দেওয়া গল্প মাত্র।
এই পরীক্ষাটি আমার পছন্দ, কারণ এটি আপনার নিজের ব্যাখ্যা থেকে আসা এমন একটি পূর্বাভাস, যা ভুল প্রমাণ করা যায়। আপনি জিজ্ঞেস করছেন না, "এটি কি এখনও কাজ করে"—জিজ্ঞেস করছেন, "আমি যে কারণ বলেছি, সেই কারণেই কি এটি কাজ করে?"
আমি হলে কৌশলটি নিয়ে যা করতাম
যদি পরীক্ষায় টিকে যায়: ছোট করুন। কৌশলটির সৎ সংস্করণ 15-মিনিটের গ্রিডে বছরে 900টি ট্রেড নয়; বরং এন্ট্রির নিয়ম সেকেন্ড ধরে নির্দিষ্ট করা এবং klines নয়, অর্ডার বুকের স্ন্যাপশট দিয়ে ফিল মডেল করা কয়েকশ বেছে নেওয়া ঘটনা। এতে কৌশলটি ছোট, কম আকর্ষণীয়, কিন্তু বেশি বিশ্বাসযোগ্য হবে। পেপার ট্রেডিংয়ে মডেল করা ফিল বাস্তবে মেলে কি না জানার সুযোগও এই সংস্করণেই আছে; সেটা জানার একমাত্র জায়গা পেপার ট্রেডিং।
দ্বিতীয় যাচাই—টাইমস্ট্যাম্পের সরণ—ব্যর্থ হলে বিরক্ত হবেন না। অন্তত একবার সবাই এই ভুল করে। অফসেট ঠিক করে ছেড়ে না দিয়ে ডেটা লোডারটা মন দিয়ে পড়ুন, কারণ ফান্ডিং সরে থাকলে open interest-ও সরে থাকার যথেষ্ট সম্ভাবনা আছে; পরের ধারণা নিয়ে কাজ করার আগেই সেটা জানা দরকার।
আরেকটি কথা, যেটা অনেকে এড়িয়ে যান। যা-ই পান, কৌশলটির পাশে 6টি যাচাই ও তাদের ফল লিখে রাখুন। 6 মাস পরে আপনি বা অন্য কেউ কাঠামোগতভাবে একই রকম সংকেত তৈরি করবেন, একই সুন্দর কার্ভ পাবেন, আর শুরু থেকে একই তর্কে জড়াবেন। এখানে কারণ নির্ণয়টাই দীর্ঘস্থায়ী সম্পদ। কৌশলটি হয়তো থাকবে না।
← সব পোস্ট
