Skip to content
সব অপশন ও ফিউচারস গাইড
ট্রেডিং-রুল বাছাইয়ের প্রভাব পরীক্ষা12 মিনিট পড়া

ট্রেডিং রুলে White Reality Check ও Hansen SPA test

অনেক ট্রেডিং রুলের মধ্যে সেরা রুল বাছলে Reality Check ও SPA কীভাবে পরীক্ষা করে, তাদের bootstrap পদ্ধতি, অনুমান ও সীমা বুঝুন।

এই গাইডেBacktest-এর সেরা ফলটিকে আলাদা করে দেখা যথেষ্ট নয় কেন

সংক্ষিপ্ত সারাংশ

White Reality Check এবং Hansen-এর Superior Predictive Ability বা SPA test জিজ্ঞেস করে, খোঁজ করা candidate-দের মধ্যে অন্তত একটি কি আগে থেকে নির্ধারিত benchmark-কে নির্দিষ্ট performance measure-এ ছাড়িয়ে যায়। দুটিই ফল দেখে সেরা candidate বেছে নেওয়ার বিষয়টি ধরে, তবে কোনো একটি rule-কে সনদ দেয় না বা ভবিষ্যৎ মুনাফার নিশ্চয়তা দেয় না।

Backtest-এর সেরা ফলটিকে আলাদা করে দেখা যথেষ্ট নয় কেন

ডেটা দেখার আগে যদি একটি strategy স্থির করে পরীক্ষা করেন, তাহলে একক তুলনা সেই সীমিত প্রশ্নের উত্তর দিতে পারে। কিন্তু একাধিক rule ও parameter চেষ্টা করে, ফল দেখে, তারপর কেবল সেরাটির significance দেখালে অনুসন্ধানের ধাপটি বাদ পড়ে। কোনো rule-এর সত্যিকারের edge না থাকলেও অনেক noisy estimate-এর মধ্যে সর্বোচ্চটি কাকতালীয়ভাবে ইতিবাচক হওয়ার সম্ভাবনা থাকে।

Reality Check-কে সংক্ষেপে RC বলা হয়। Hansen-এর SPA test-ও একটি পুরো candidate family নিয়ে প্রশ্ন করে: নির্দিষ্ট family-তে খোঁজ করার বিষয়টি হিসাব করার পর, benchmark-এর চেয়ে ভালো expected performance-এর প্রমাণ কি অন্তত একটি strategy-র জন্য আছে? family-তে technical rule, forecast model বা অন্য strategy থাকতে পারে। White 2000 সালে data-snooping-এর এই পরীক্ষার কাঠামো দেন; Sullivan, Timmermann ও White 1999 সালে বহু technical trading rule-এ তা প্রয়োগ করেন। White-এর 2000 সালের গবেষণা এবং trading rule নিয়ে 1999 সালের প্রয়োগ এখানে প্রাথমিক উৎস। নির্বাচিত ফল তৈরি করতে যেসব alternative বিবেচিত হয়েছে, সেগুলো family-তে থাকা দরকার; শুধু শেষের winner-টি নয়।

Benchmark, candidate family এবং performance difference স্থির করুন

ধরা যাক, k হলো পরীক্ষা করা family K-র একটি candidate rule এবং t হলো candidate ও benchmark-এর জন্য একই evaluation date। return-ভিত্তিক তুলনায় প্রতি সময়ের পার্থক্য এভাবে লেখা যায়:

d(k,t) = সময় t-তে candidate k-এর net return − benchmark-এর net return

মান ধনাত্মক হলে candidate এগিয়ে। Forecast accuracy তুলনা করলে loss-এর দিক উল্টে লিখুন: benchmark loss minus candidate loss; এতে ধনাত্মক মানের অর্থ হবে candidate-র loss কম। আলাদা candidate বা তারিখে বিয়োগের দিক পাল্টাবেন না।

candidate k-এর প্রত্যাশিত পার্থক্য μ(k) = E[d(k,t)] হলে family-স্তরের hypothesis:

H0: K-র সব k-এর জন্য μ(k) ≤ 0 H1: K-র অন্তত একটি candidate-এর μ(k) > 0

H0 বলে না যে প্রত্যেক rule-এর expected difference ঠিক শূন্য; benchmark-এর চেয়ে খারাপ rule-ও null-এর মধ্যে পড়ে। এটি আলাদা আলাদা independent test-এর তালিকা নয়, বরং family-র সর্বোচ্চ performance নিয়ে একটি যৌথ পরীক্ষা। তাই benchmark, তারিখ, return-এর সংজ্ঞা, candidate set এবং performance criterion আগেই স্পষ্ট করুন। লক্ষ্য যদি risk-adjusted performance হয়, শুধু mean-return difference সেই লক্ষ্যকে সংজ্ঞায়িত করে না।

Reality Check পুরো family-র সর্বোচ্চ ফল ব্যবহার করে

nটি evaluation period জুড়ে candidate k-এর গড় পার্থক্যকে d̄(k) বলি। সাধারণ mean-difference setup-এ RC statistic হলো:

T_RC = K-র সব k-এর মধ্যে sqrt(n) × d̄(k)-এর সর্বোচ্চ মান

RC candidate-দের মধ্যে দেখা সবচেয়ে ভালো sample result-টি নেয় এবং null-এর অধীনে bootstrap distribution-এর সঙ্গে তুলনা করে। এই composite null-এর জন্য White least-favorable configuration নেন: প্রতিটি candidate-এর expected difference-কে শূন্য ধরে null distribution বানানো হয়। অথচ H0-তে শূন্যের নিচে mean থাকা candidate-ও অন্তর্ভুক্ত। তাই family-তে অনেক দুর্বল alternative থাকলে critical value অযথা বড় হতে পারে।

এই সর্বোচ্চ মানটি গুরুত্বপূর্ণ। প্রশ্নটি “sample-এ জেতা rule-টি একক rule হিসেবে significant কি?” নয়। প্রশ্ন হলো, “ঘোষিত family-র মধ্যে একইভাবে খুঁজলে, এর সমান বা বড় সর্বোচ্চ ফল কতটা অস্বাভাবিক?” আগে থেকে স্থির করা একটি rule-এর reference distribution দিয়ে পরে নির্বাচিত winner-কে পরীক্ষা করলে selection ধাপটি আর ধরা পড়ে না। ফলে একক-test-এর সূত্র ঠিক হলেও সেটি নির্বাচনের প্রভাব সংশোধন করে না।

240টি কাল্পনিক variant family-র আকার বোঝায়

শুধু গাণিতিক উদাহরণ হিসেবে ধরুন, একজন গবেষক 12টি lookback period, 4টি entry filter এবং 5টি exit setting চেষ্টা করেছেন। সব combination পরীক্ষা করলে 12 × 4 × 5 = 240টি কাল্পনিক rule-variant হয়। এটি কেবল combination-এর সংখ্যা; কোনো প্রকাশিত গবেষণা বা বাস্তব return-এর দাবি নয়। এই উদাহরণ থেকে কোনো p-value বা লাভের ফল বানানো যাবে না।

240টির ফল দেখে সেরা combination বাছলে সংশোধিত পরীক্ষা প্রতিটি bootstrap sample-এ একই family-র সর্বোচ্চ ফল পুনরায় গণনা করে। প্রতিটি replicate-এ সব variant-এর performance measure নতুন করে হিসাব হয়, তারপর সর্বোচ্চটি নেওয়া হয়। বাস্তব sample-এর maximum-কে এই bootstrap maximum-গুলোর distribution-এর সঙ্গে তুলনা করা হয়। কেবল চূড়ান্ত winner-এর statistic প্রতিটি replicate-এ হিসাব করলে প্রশ্নটি বদলে যায়; তাতে 240টি ফল থেকে নির্বাচন করার প্রক্রিয়াটি আর থাকে না।

পরীক্ষার family যতটা সম্ভব অনুসন্ধানের সঙ্গে মেলাতে হবে। কোনো market, parameter, holding period বা exit rule সিদ্ধান্তে প্রভাব ফেললেও family-তে না থাকলে তার কারণে হওয়া search effect গণনায় আসবে না। আবার ফল দেখার পরে একেবারে সম্পর্কহীন rule family-তে ঢোকানোও সঠিক নয়। কোন alternative-গুলো ফল বাছতে সাহায্য করেছে, তার সুনির্দিষ্ট ও সংরক্ষিত তালিকা দরকার।

আলাদা strategy কলাম নয়, সময়ের পুরো vector একসঙ্গে resample করুন

একই তারিখে candidate-গুলো বাজারের একই নড়াচড়া দেখে, তাই তাদের performance difference পরস্পর সম্পর্কিত হতে পারে। সময়ের পাশের observation-গুলোর মধ্যেও serial dependence থাকতে পারে। Bootstrap-এ প্রতিটি তারিখের candidate-difference vector-কে একসঙ্গে resample করতে হবে, যাতে replicate-এ candidate-দের সমসাময়িক সম্পর্ক ও সময়ের অংশগুলো বজায় থাকে। প্রতিটি rule-কে স্বাধীনভাবে resample করলে cross-rule covariance নষ্ট হয়; প্রতিটি দিনের row এলোমেলো করলেও সময়-নির্ভরতা ভেঙে যেতে পারে।

RC এবং SPA-তে stationary bootstrap-এর মতো block method ব্যবহার করা যায়। এতে লাগোয়া observation-এর block জুড়ে pseudo-series তৈরি হয়; Politis ও Romano-র প্রচলিত নির্মাণে block length geometric distribution মেনে চলে এবং তার expected length আগে ঠিক করা হয়। তাদের stationary bootstrap গবেষণা এই পদ্ধতির প্রাথমিক বর্ণনা। সব strategy series-এর জন্য একই time index ব্যবহার করলে একসঙ্গে ওঠানামার সম্পর্কটি সংরক্ষিত হয়।

তবে resampling নিজে থেকেই sample-কে উপযুক্ত করে না। তাত্ত্বিক ফলের জন্য স্থিতিশীল ও যথেষ্ট দুর্বল dependence-সহ process-এর মতো regularity condition লাগে। বাজারে structural break বা শক্তিশালী nonstationarity থাকলে bootstrap তা মুছে দেয় না। খুব ছোট block persistence ভেঙে ফেলতে পারে; খুব বড় block নিলে কার্যকরভাবে আলাদা block-এর সংখ্যা কমে যায়। ব্যবহৃত পদ্ধতি ও block length লিখুন, এবং যুক্তিসঙ্গত বিকল্প setting-এ ফল কতটা বদলায় দেখুন। Null distribution-ও সংশ্লিষ্ট null-কে প্রতিফলিত করবে এবং প্রতিটি replicate-এ family maximum আবার হিসাব করতে হবে। একটি আগে থেকেই নির্বাচিত strategy-র নির্দিষ্ট statistic-এর confidence interval তৈরির block bootstrap নিজে থেকে family-wide search adjustment নয়। Strategy return-এর block bootstrap guide নির্দিষ্ট statistic-এর uncertainty ও সময়ের dependence নিয়ে আলাদা প্রশ্নটি ব্যাখ্যা করে।

অনেকগুলো পথ একটি চূড়ায় মিলেছে; পাশে দাঁড়িপাল্লা, দুটি বিমূর্ত বণ্টন ও সময়খণ্ডের সারি—কোনো লেখা ছাড়া।
এটি কৌশল অনুসন্ধান ও অনিশ্চয়তার বণ্টন তুলনার ধারণাচিত্র; কোনো পরীক্ষার ফল বা বাজারের প্রকৃত রিটার্ন দেখায় না।

SPA statistic standardize করে sample-dependent null ব্যবহার করে

SPA একই family-wide null এবং benchmark-relative difference বজায় রাখে, তবে statistic ও null distribution দুটো বদলায়। প্রথমে প্রতিটি candidate-এর গড় difference-কে sqrt(n) দিয়ে গুণ করে differential series-এর long-run standard deviation estimate দিয়ে scale করা হয়:

T_SPA = max(0, max_k [sqrt(n) × d̄(k) / ω̂(k)])

এখানে ω̂(k) হলো candidate k-এর differential series d(k,t)-এর long-run standard deviation estimate; সমতুল্যভাবে, এটি sqrt(n) × d̄(k)-এর asymptotic standard deviation। এটি unscaled sample mean-এর SD বা SE নয়। এই denominator serial dependence-সহ series-এর দীর্ঘমেয়াদি পরিবর্তনশীলতা ধরে এবং candidate-দের mean তুলনীয় অনিশ্চয়তার এককে প্রকাশ করে। তবু maximum-এর distribution-এ candidate-দের মধ্যে covariance গুরুত্বপূর্ণ থাকে।

দ্বিতীয়ত, SPA sample-dependent null ব্যবহার করে। এর consistent সংস্করণে, যে candidate-দের sample mean যথেষ্ট নেতিবাচক এবং benchmark-এর চেয়ে স্পষ্টত খারাপ মনে হয়, তাদের negative mean null centering-এ রাখা হয়। যেসব candidate null boundary-র কাছাকাছি থাকতে পারে, তাদের mean শূন্যে কেন্দ্র করা হয়। দুর্বল candidate-দের মুছে ফেলা হয় না; বরং sample-এর তথ্য অনুযায়ী তাদের null distribution-এ কতটা প্রভাব থাকা উচিত, সেই অনুযায়ী অবদান কমানো হয়। ডেটা দেখে পছন্দমতো rule বাদ দেওয়া যায় না, কারণ এতে null distribution-এর বৈধতা নষ্ট হতে পারে।

Hansen-এর 2005 সালের গবেষণায় এই দুই পরিবর্তন বর্ণিত হয়েছে: studentized statistic এবং sample-dependent null. নির্দিষ্ট গবেষণা নকশায় এগুলো power বাড়াতে এবং অপ্রাসঙ্গিক দুর্বল alternative-এর প্রভাব কমাতে পারে; তবে SPA সব ক্ষেত্রে RC-র চেয়ে এগিয়ে, এমন নয়। Hansen জানান যে এক পরীক্ষা অন্যটিকে সর্বাবস্থায় uniformly dominate করে না। কিছু implementation lower, consistent ও upper SPA p-value আলাদা করে; তাই কোন সংস্করণ ও implementation ব্যবহার করেছেন তা বলুন। Hansen-এর মূল গবেষণা statistic, centering এবং bootstrap বাস্তবায়নের প্রাথমিক উৎস।

Family-level rejection কোন rule বেছে দেবে না

Family-wide null reject হলে সীমিত একটি সিদ্ধান্ত সমর্থিত হয়: নির্দিষ্ট performance criterion ও অনুমানের অধীনে ঘোষিত candidate family-র অন্তত একটি rule benchmark-কে ছাড়িয়ে যেতে পারে। এতে প্রমাণ হয় না যে সব rule লাভজনক, sample-এ সেরা rule-টির আলাদা corrected significance আছে, কিংবা live trading-এ সেটিই সেরা থাকবে।

Null reject না হলেও প্রমাণ হয় না যে সব rule অকার্যকর বা সমান। এর অর্থ, এই sample ও test family-র কোনো candidate-র superiority-র পক্ষে যথেষ্ট family-level evidence পাওয়া যায়নি। sample ছোট বা volatile হতে পারে, candidate-দের পার্থক্য ক্ষুদ্র হতে পারে, কিংবা সত্যিকারের edge দুর্বল হতে পারে। “যথেষ্ট প্রমাণ মেলেনি” এবং “কোনো edge নেই প্রমাণিত হয়েছে” একই কথা নয়।

এই omnibus maximum test প্রতিটি candidate-কে corrected rank দেয় না এবং কোন winner বেছে নেবেন তা বলে না। নির্দিষ্ট rule-গুলোর জন্য adjusted claim করতে চাইলে candidate-level বা stepwise inference-এর উপযোগী পদ্ধতি দরকার, তারপর নির্বাচন প্রক্রিয়ায় ব্যবহৃত হয়নি এমন ডেটায় আলাদা validation দরকার। Family rejection-কে বিনিয়োগ-পরামর্শ বা backtest-এ দেখা ফল পুনরাবৃত্তির দাবি হিসেবে ব্যবহার করবেন না।

Criterion ও candidate family ফল দেখার আগে স্থির করুন

আপনি যে candidate set দেবেন, correction কেবল সেই family-র জন্য। নির্বাচনে প্রভাব ফেলা lookback, filter, market, holding period এবং exit setting-সহ সব trial নথিভুক্ত করুন—খারাপ ফলও। একাধিক benchmark, return definition বা sample window চেষ্টা করে পরে ফল দেখে পছন্দসইটি নিলে সেই search-ও রেকর্ড করুন। নথিবদ্ধ নয় এমন গবেষণা-পথ পরীক্ষার আওতার বাইরে থাকে।

সব candidate ও benchmark-এর return একই date-এ মেলান। Performance difference বানানোর আগে commission, bid-ask spread, slippage, funding, borrow এবং rollover cost কীভাবে ধরা হয়েছে স্থির করুন। একইভাবে performance criterion আগেই বেছে নিন। Net mean return, utility score এবং risk-adjusted measure আলাদা প্রশ্ন; একটির জন্য তৈরি পরীক্ষা নিঃশব্দে অন্যটির উত্তর দেয় না। Nested forecast comparison বা recursively estimated model-এর মতো বিশেষ নকশায় parameter estimation ও null distribution-এর assumption আলাদা হতে পারে, তাই সাধারণ RC/SPA recipe যান্ত্রিকভাবে লাগাবেন না।

এটি False Discovery Rate বা FDR correction থেকে আলাদা। FDR একাধিক individual rejection-এর মধ্যে প্রত্যাশিত false discovery share নিয়ন্ত্রণ করে; RC ও SPA একটি family-র সর্বোচ্চ benchmark-relative performance পরীক্ষা করে। এটি নির্দিষ্ট statistic-এর block-bootstrap guide থেকেও আলাদা, কারণ সেটি আগে থেকে নির্দিষ্ট statistic-এর uncertainty মাপে, কিন্তু পুরো candidate-search-এর maximum নিজে থেকে পুনর্গঠন করে না। Finance-এ multiple testing ও FDR guide ভিন্ন family-wise correction নিয়ে পড়তে পারেন।

ফল প্রকাশের সময় সীমা ও অনুমানও জানান

একটি ব্যবহারযোগ্য প্রতিবেদনে benchmark, candidate family, performance criterion, date range, observation frequency, costs, bootstrap method, block length, replicate সংখ্যা, statistic এবং ব্যবহৃত p-value variant উল্লেখ থাকা উচিত। অন্য কেউ যেন selection তৈরি করা candidate-দের দেখতে পারে, তাই trial artifact সংরক্ষণ করুন। RC বা SPA-র পরে untouched chronological holdout ব্যবহার করলে সেখানে rule tune করে সেটিকে আর untouched বলা যাবে না।

RC বা SPA p-value হলো নির্দিষ্ট ডেটা, search universe, statistic ও assumptions-এ family-wide null সম্পর্কে evidence। এটি কোনো নির্দিষ্ট strategy-র লাভের probability, ভবিষ্যৎ return-এর forecast, বা cost ও regime change-এর পরও backtest টিকে থাকার guarantee নয়। এই পরীক্ষা look-ahead bias, survivorship bias, data error, market impact বা অসম্পূর্ণ search log ঠিক করে না। Purged time-series cross-validation guide অন্য সমস্যা—train ও test-এর মাঝে information leakage—নিয়ে আলোচনা করে।

সাধারণ প্রশ্ন

Q1SPA কি সব সময় Reality Check-এর চেয়ে বেশি powerful?

না। Hansen-এর পরিবর্তন কিছু নকশায় power বাড়ায় এবং দুর্বল alternative-এর প্রভাব কমায়, কিন্তু সব পরিস্থিতিতে এক পদ্ধতি অন্যটিকে dominate করে না।

Q2Significant SPA result কি বলে দেয় কোন trading rule ব্যবহার করব?

না। এটি নির্ধারিত criterion-এ family-র অন্তত একটি candidate benchmark-কে ছাড়াতে পারে—এমন group-level evidence দেয়। নির্দিষ্ট rule চিহ্নিত করে না; তার জন্য candidate-level procedure ও আলাদা validation দরকার।

Q3Backtest-এ হারানো variant-গুলো কি বাদ দিতে পারি?

Final rule বাছতে ওই variant-গুলো বিবেচনায় এলে বাদ দেওয়া প্রশ্নটি পাল্টে দেয় এবং selection effect কম দেখাতে পারে। Corrected result পড়ার আগে প্রাসঙ্গিক candidate family নির্ধারণ ও সংরক্ষণ করুন।

উৎস ও আরও পড়ুন

সমস্যা জানান

এই নিবন্ধের লিংকসহ একটি ইমেল তৈরি হবে। পাঠানোর পরেই Mark প্রতিবেদনটি পাবে

দ্রুত যাচাই

গাইডটি পড়ার পর 3টি প্রশ্নে নিজেকে যাচাই করুন

প্রশ্ন 1 / 3

প্রশ্ন 01

অনেক strategy variant চেষ্টা করার পরে family-wide test-এ কোন candidate অন্তর্ভুক্ত করা উচিত?

ব্যাখ্যা দেখতে একটি উত্তর বেছে নিন

অপশন শব্দকোষ

গবেষকরা যখন অনেক ধারণা পরীক্ষা করেন তখন কেন একটি থ্রেশহোল্ড ব্যর্থ হয়ফিনান্সে একাধিক পরীক্ষা এবং মিথ্যা আবিষ্কারের হারএকাধিক তুলনা, পরিবার-ভিত্তিক ত্রুটি, মিথ্যা আবিষ্কারের হার, বনফেরোনি, হোলম, বেঞ্জামিনি-হচবার্গ, নির্ভরতা, কিউ-মূল্য, ফ্যাক্টর মাইনিং, ব্যাকটেস্ট নির্বাচন, এবং গবেষণা পরিচালনা বুঝুনকৌশলের ফলাফলের অনিশ্চয়তা মাপাট্রেডিং কৌশলের রিটার্নে ব্লক বুটস্ট্র্যাপ: নির্ভরশীল ডেটার আস্থা-সীমাসময়ের নির্ভরতা ধরে রেখে আগে থেকে নির্ধারিত ট্রেডিং কৌশলের গড় রিটার্ন বা শার্প অনুপাতের অনিশ্চয়তা ব্লক বুটস্ট্র্যাপ দিয়ে কীভাবে মাপা যায় এবং পদ্ধতিটির সীমা কী, তা জানুন।ট্রেডিং মডেল যাচাইPurged cross-validation ও embargo: ট্রেডিং মডেলে লেবেল লিকেজ ঠেকানোআর্থিক টাইম সিরিজে forward label ওভারল্যাপ হলে purging ও embargo কীভাবে কাজ করে, এবং এগুলো walk-forward, TimeSeriesSplit ও CPCV থেকে কীভাবে আলাদা তা বুঝুন।অপশনের কার্যপ্রণালিঅপশন অ্যাসাইনমেন্ট কী?মেয়াদের আগে বা মেয়াদে বিক্রি করা অপশন কীভাবে শেয়ার দেওয়া বা কেনার দায় তৈরি করে তা বুঝুনএকটি অনুমোদিত চুক্তির সংখ্যা ঝুঁকি বাজেটের মতো নয়বিকল্প অবস্থানের সীমা বনাম ব্যায়াম সীমা ব্যাখ্যা করা হয়েছেকীভাবে তালিকাভুক্ত বিকল্প অবস্থানের সীমা ব্যায়ামের সীমা থেকে আলাদা তা জানুন, কেন একই-পাশে একত্রিতকরণ এবং রিপোর্টিং ব্যাপার এবং কেন মার্জিন বা ক্রয় ক্ষমতা একটি পরিমাণ অনুমোদিত কিনা তা দেখায় না