এই প্রশ্নটাই—কোনো না কোনোভাবে—আমাকে সবচেয়ে বেশি করেন সেই মানুষজন, যারা সবে তাদের প্রথম স্ট্র্যাটেজি শেষ করেছেন: ফলাফলটা সত্যি বলার আগে আমার কতগুলো ট্রেড দরকার? সাধারণত এর সঙ্গে একটা সংখ্যা থাকে। "আমার 1,200টা ট্রেড হয়েছে, এটাই যথেষ্ট, তাই না?" সৎ উত্তরটা অবশ্য সবাইকে বিরক্ত করে, কারণ উত্তরটা আদৌ ট্রেডের সংখ্যা নয়।
পুরো ব্যাপারটা এক লাইনে বলা যায়। তারপর এই পোস্টের বাকি অংশে বলব, এই লাইনটা কেন এত অস্বস্তিকর।
Sharpe অনুপাতের স্ট্যান্ডার্ড এরর কত?
nটি পর্যায়ক্রমিক রিটার্ন থেকে হিসাব করা Sharpe-এর ক্ষেত্রে, রিটার্নগুলো স্বাধীন এবং মোটামুটি স্বাভাবিক বণ্টনের বলে ধরে নিলে, স্যাম্পলিং এরর হলো:
SE(s) ≈ √((1 + s²/2) / n)
এখানে s হলো একই ফ্রিকোয়েন্সিতে মাপা Sharpe। দুই পাশকে বার্ষিকীকরণ করলে একটি সরল ফল পাওয়া যায়। বছরে kটি পর্যবেক্ষণ এবং T বছর থাকলে, বার্ষিকীকৃত Sharpe S-এর জন্য:
SE(S) ≈ √((1 + S²/(2k)) / T)
হর-এর ওই 2k অংশটা দেখুন। দৈনিক রিটার্নের ক্ষেত্রে k = 252, তাই Sharpe 2 হলেও লব-এ যোগ হয় 4/504 ≈ 0.008। পুরো পদটি সরল হয়ে দাঁড়ায় 1। বার্ষিকীকৃত Sharpe-এর স্ট্যান্ডার্ড এরর আনুমানিক 1/√T, যেখানে T হলো আপনার ডেটার ক্যালেন্ডার বছর। এটি Sharpe-এর নিজের মানের ওপর খুব সামান্যই নির্ভর করে, স্যাম্পলিং ফ্রিকোয়েন্সির ওপর নির্ভর করে না, আর আপনি কতগুলো ট্রেড করেছেন তার ওপর তো একেবারেই নির্ভর করে না।
তাহলে:
| ডেটার বছর | SE(Sharpe) | আপনি 1.5 মেপে থাকলে 95% CI |
|---|---|---|
| 1 | 1.00 | −0.46 থেকে 3.46 |
| 2 | 0.71 | 0.11 থেকে 2.89 |
| 3 | 0.58 | 0.37 থেকে 2.63 |
| 5 | 0.45 | 0.62 থেকে 2.38 |
| 10 | 0.32 | 0.88 থেকে 2.12 |
দুই বছরের ইতিহাসে Sharpe 1.5 দেখানো ব্যাকটেস্টকে 95% স্তরে কয়েন টসের ফল থেকে পরিসংখ্যানগতভাবে আলাদা করা যায় না। বেশির ভাগ ক্রিপ্টো গবেষণার ক্ষেত্রে এটাই প্রাথমিক বাস্তবতা, কারণ অধিকাংশের পরিষ্কার, সারভাইভারশিপ-সংশোধিত ও ফি-নির্ভুল ডেটা মোটামুটি 2022 সালের দিক থেকে শুরু হয়, আর আগ্রহজাগানিয়া সিম্বলের অর্ধেকই 2023 সালের আগে ছিল না।
কিন্তু আমার তো 40,000টি ট্রেড আছে। তাতে কি সমস্যাটা মেটে না?
না, আর এই ভুল ধারণাটাই আমি সবচেয়ে বেশি দূর করতে চাই।
ট্রেডের সংখ্যা আর নমুনার দৈর্ঘ্য আলাদা পরিমাপ; সূত্রে আছে এদের একটিই। আপনার স্ট্র্যাটেজি যদি 6 মাসে 40,000 বার সংকেত দেয়, তাহলে T = 0.5 এবং SE ≈ 1.41। মাপা Sharpe 2.0 হলে আপনার 95% ব্যবধান −0.8 থেকে 4.8। 40,000টি ট্রেডের পরও সৎ সিদ্ধান্ত হলো, "ভালোও হতে পারে, লোকসানও হতে পারে।"
কারণ ওই 40,000টি ট্রেড 40,000টি আলাদা বাজার-পরিস্থিতিতে নেওয়া 40,000টি স্বাধীন বাজি নয়। এগুলো প্রায় 180 দিনের বাজার-আচরণ থেকে নেওয়া 40,000টি নমুনা; দিনগুলো পরস্পরের সঙ্গে সম্পর্কিত, আর প্রতিটি রেজিমের ভেতরেও পরিস্থিতিগুলো পরস্পর সম্পর্কিত। চার মাস ধরে প্রতিদিন মুনাফা করা একটি হাই-ফ্রিকোয়েন্সি মিন-রিভার্সন পোর্টফোলিও আসলে একটি বাজিই ধরেছে—এই তারল্য-পরিস্থিতিতে স্বল্পমেয়াদি রিভার্সন কাজ করে—আর সেই বাজির ফল হয়তো মাত্র কয়েকবার স্বাধীনভাবে দেখেছে।
আমি মনে মনে এভাবে বদলে নিই: ফিলের সংখ্যা নয়, রেজিম গুনুন। এই স্ট্র্যাটেজি কতগুলো সত্যিকারের ভিন্ন বাজার-পরিস্থিতি পার করেছে? একটানা basis-positive সময়ে চলা ফান্ডিং-ক্যারি স্ট্র্যাটেজি n = 1 পরিস্থিতিই দেখেছে, ঘণ্টায় যতবার রিব্যালেন্স করুক না কেন।
দ্রুত যাচাই: দৈনিক P&L-এ 20 দিনের ব্লক দৈর্ঘ্য দিয়ে block bootstrap চালান, তারপর পুনঃনমুনাকৃত Sharpe-গুলোর বিস্তার দেখুন। 5ম পার্সেন্টাইল শূন্যের নিচে হলে, আপনার ট্রেডের সংখ্যা অপ্রাসঙ্গিক। numpy-তে প্রায় 9 লাইনের কাজ, আর অন্য যেকোনো একক যাচাইয়ের চেয়ে বেশি স্ট্র্যাটেজি থেকে আমাকে ফিরিয়ে এনেছে।
বাস্তব স্ট্র্যাটেজির ক্ষেত্রেও কি সূত্রটি খাটে?
পুরোপুরি নয়, আর এর বিচ্যুতি আপনার অপছন্দের দিকেই যায়। 1/√T ফলটি IID স্বাভাবিক বণ্টনের রিটার্ন ধরে নেয়। বাস্তব স্ট্র্যাটেজির রিটার্নে অটোকোরিলেশন ও স্কিউ থাকে; ক্যারি, শর্ট ভোলাটিলিটি বা মিন-রিভার্সনের মতো স্ট্র্যাটেজিতে স্কিউ সাধারণত ঋণাত্মক। Mertens-এর সংশোধন এই মোমেন্টগুলো ফিরিয়ে আনে:
SE(s) ≈ √((1 + s²/2 − γ₃·s + (γ₄−3)·s²/4) / n)
এখানে γ₃ হলো স্কিউ এবং γ₄ হলো কার্টোসিস। ঋণাত্মক স্কিউ −γ₃·s পদটিকে ধনাত্মক করে, ফলে ব্যবধান আরও চওড়া হয়। অতিরিক্ত কার্টোসিস সেটিকে আরও চওড়া করে। সাধারণ একটি ক্রিপ্টো ক্যারি P&L-এ স্কিউ প্রায় −1.2 আর কার্টোসিস প্রায় 9 হলে, সরল হিসাবের তুলনায় সংশোধিত স্ট্যান্ডার্ড এরর 30–40% বেশি হতে দেখেছি। Lo-এর 2002 সালের গবেষণাপত্রে অটোকোরিলেশনের দিকটি বিশ্লেষণ করা হয়েছে, এবং প্রভাব একই দিকে: রিটার্নে ধনাত্মক ধারাবাহিক সম্পর্ক সরল Sharpe-কে বাড়িয়ে দেখায় এবং আপাত এররকে কমায়—দুটো মিলে বেশ বাজে অবস্থা।
তাই 1/√T-কে আপনার অনিশ্চয়তার নিম্নসীমা হিসেবে ধরুন। এটাই সবচেয়ে ভালো পরিস্থিতি।
500টি ভ্যারিয়েন্ট পরীক্ষা করলে Sharpe কত উঁচু হতে হবে?
এবার আসি সেই অংশে, যা স্বয়ংক্রিয় গবেষণা পাইপলাইন চালানো সবার জন্য জরুরি। Stratmill-এ আমাদের প্রতিদিনকার পরিস্থিতি এটাই: জেনারেশন এজেন্ট একটি প্রার্থী তৈরি করে না, তৈরি করে শত শত।
স্ট্যান্ডার্ড নর্মাল বণ্টন থেকে নেওয়া Mটি নমুনার সর্বোচ্চ মানের প্রত্যাশিত মান মোটামুটি √(2 ln M)। এটিকে আপনার স্ট্যান্ডার্ড এরর দিয়ে গুণ করলে, Mটি সত্যিই মূল্যহীন স্ট্র্যাটেজির মধ্যে সবচেয়ে ভাগ্যবানটির দেখা যাবে যে Sharpe, সেটি পাওয়া যায়।
| পরীক্ষিত স্ট্র্যাটেজির সংখ্যা | √(2 ln M) | নয়েজের মধ্যে সেরা Sharpe, 5 বছর (SE 0.45) | নয়েজের মধ্যে সেরা, 2 বছর (SE 0.71) |
|---|---|---|---|
| 10 | 2.15 | 0.96 | 1.52 |
| 100 | 3.03 | 1.36 | 2.16 |
| 500 | 3.53 | 1.58 | 2.50 |
| 5,000 | 4.13 | 1.85 | 2.93 |
শেষ থেকে দ্বিতীয় সারিটা দেখুন। দুই বছরের ডেটা দিয়ে 500টি প্রার্থী তৈরি করে বিজয়ীর Sharpe 2.4 হলে, আপনি আসলে কিছুই পাননি। এটি নয়েজের সীমার নিচে। Bailey এবং López de Prado-র deflated Sharpe-এ আপনার পরীক্ষিত Sharpe-গুলোর ভ্যারিয়েন্স ব্যবহার করে মোটামুটি √(2 ln M)-এর বদলে হিসাবটি আরও আনুষ্ঠানিক করা হয়েছে। সেটি ঠিকভাবে প্রয়োগ করা সার্থক, তবে মোটামুটি হিসাবটুকুই আজ আচরণ বদলানোর জন্য যথেষ্ট।
টেবিলের ইঙ্গিতের চেয়েও বিষয়টি খারাপ করে এমন দুটি ব্যাপার আছে। প্রথমত, M হলো আপনার সংরক্ষণ করা স্ট্র্যাটেজির সংখ্যা নয়, বরং যতগুলো আপনি মূল্যায়ন করেছেন—প্রতিটি প্যারামিটার বদল, "দেখি তো 30-পিরিয়ড লুকব্যাক দিলে কী হয়," আর বাগ ঠিক করার পরের প্রতিটি পুনরায় চালানোসহ। কেউই সৎভাবে সব গোনে না। দ্বিতীয়ত, আপনার প্রার্থীরা স্বাধীন নমুনা নয়, তাই √(2 ln M) কার্যকর বৈচিত্র্যকে বাড়িয়ে দেখায়; তবে পরীক্ষাগুলো পরস্পর সম্পর্কিত হওয়ায় একটি ভাগ্যবান রেজিমে তাদের গোটা গুচ্ছ একসঙ্গে ওপরে উঠে যেতে পারে।
কোয়ান্ট গবেষণায় সবচেয়ে বিপজ্জনক সংখ্যা সেইটি, যা কেউ নথিভুক্ত করেনি: আপনি কতবার দেখেছেন।
তাহলে আমি আসলে কী করি?
5টি কাজ, আমি যে ক্রমে করতাম।
- প্রতিটি মূল্যায়ন নথিভুক্ত করুন। প্রতিটি ব্যাকটেস্ট চালানোর সময় বাড়ে এমন একটি কাউন্টার রাখুন, যার মান সংরক্ষিত থাকবে এবং কখনো রিসেট হবে না। M কত, তা বলতে না পারলে আপনার থ্রেশহোল্ডও বলতে পারবেন না। এই তালিকার মধ্যে প্রকৌশলে ব্যয় করা সবচেয়ে সার্থক এক ঘণ্টা এটাই।
- সব সময় ব্যবধানসহ Sharpe জানান। কখনো শুধু একটি সংখ্যা ছাপাবেন না। আমাদের ব্যাকটেস্ট রিপোর্টে
1.72 ± 0.51 (2.9y, skew-adjusted)দেখানো হয়, আর ± চিহ্নটি ঐচ্ছিক নয়। ফলাফল নিয়ে পুরো দলের কথাবার্তাই এতে বদলে যায়। - দেখার আগেই M ও T থেকে সীমা ঠিক করুন। ওপরের টেবিল থেকে সংখ্যাটি নিয়ে লিখে রাখুন। পরে থ্রেশহোল্ড ঠিক করলেই সবাই কোনো না কোনোভাবে কার্ভ ফিটিংকে সমর্থন করে বসে।
- নমুনা কম থাকলে ফ্রিকোয়েন্সির চেয়ে বৈচিত্র্যকে প্রাধান্য দিন। ক্যালেন্ডারের সময় বাড়ানো সম্ভব নয়, তবে একই সংকেত 40টি অসহসম্পর্কিত সিম্বলে চালাতে পারেন। এতে কার্যকর n সত্যিই বাড়ে—ট্রেডের ফ্রিকোয়েন্সি বাড়ালে যা হয় না। তবে পারস্পরিক সম্পর্কের দিকে খেয়াল রাখুন: ঝুঁকি-বিমুখতার এক ঘণ্টায় 40টি ক্রিপ্টো পার্প আসলে একই ইন্সট্রুমেন্ট।
- তারপর পেপার ট্রেড করুন। OOS সময় দিনে এক দিন করেই জমে, আর এর কোনো শর্টকাট নেই। ঠিক এ কারণেই একমাত্র এই নমুনাটিকে অতিরিক্ত ফিট করা যায় না।
এগুলোর কোনোটাই ছোট নমুনাকে ব্যবহারযোগ্য করে তোলে না। বরং ছোট নমুনা দিয়ে কী দাবি করা যায়, সে বিষয়ে আপনাকে সৎ রাখে—যা অধিকাংশ ব্যাকটেস্ট রিপোর্টে বোঝানো দাবির চেয়ে অনেক দুর্বল। দুই বছরের Sharpe 1.5 হলে পেপার ট্রেড করে দেখার মতো একটি অনুমান পাওয়া যায়। এটি কোনো আবিষ্কার নয়।
← সব পোস্ট
