ETF রিলেটিভ স্ট্রেন্থ এবং আলফা অ্যাট্রিবিউশন বিশ্লেষণ
SPY এর বিপরীতে 20 সেশনের রিটার্ন ব্যবহার করে ETF রিলেটিভ স্ট্রেন্থ র্যাঙ্কিং পদ্ধতি জানুন। বেঞ্চমার্কের সাথে সামঞ্জস্য রেখে আলফা অ্যাট্রিবিউশন কীভাবে কাজ করে তা এখানে দেখুন।
ETF রিলেটিভ স্ট্রেন্থ রুল যেভাবে কাজ করে
রিলেটিভ স্ট্রেন্থ হলো একটি তুলনামূলক পরিমাপ, কোনো রিটার্ন নয়। 20টি সেশনে একটি ফান্ডের রিটার্ন 3% এবং বেঞ্চমার্কের রিটার্ন 5% হলে, তার রিলেটিভ স্ট্রেন্থ নেতিবাচক। আবার ফান্ডটি 1% কমেছে কিন্তু বেঞ্চমার্ক 4% কমেছে, এমন ক্ষেত্রে রিলেটিভ স্ট্রেন্থ ইতিবাচক। র্যাঙ্কিং করার জন্য যে সংখ্যাটি ব্যবহার করা হয় তা হলো এক্সেস রিটার্ন: একটি নির্দিষ্ট উইন্ডোতে ফান্ডের শতাংশ পরিবর্তন থেকে একই উইন্ডোতে বেঞ্চমার্কের শতাংশ পরিবর্তন বিয়োগ করে এটি বের করা হয়, যা সেশন অনুযায়ী পরিমাপ করা হয়।
এর ওপর ভিত্তি করে দুটি সিদ্ধান্ত নিতে হয়। লুকব্যাক পিরিয়ড নির্ধারণ করে র্যাঙ্কিং কত পুরনো তথ্য দেখবে; 20টি সেশন মানে প্রায় এক ক্যালেন্ডার মাসের ট্রেডিং। হোল্ডিং পিরিয়ড নির্ধারণ করে একটি উইনার ফান্ড কতদিন পোর্টফোলিওতে থাকবে। যখন এই দুটি সমান হয়, তখন পুরো পোর্টফোলিও মাসে একবার পরিবর্তিত হয় এবং ফলাফল নির্ভর করে আপনি কোন তারিখে শুরু করেছেন তার ওপর। ওভারল্যাপিং স্লিভস (overlapping sleeves) এই নির্ভরতা দূর করে: একই রুলের কয়েকটি কপি কয়েক সেশনের ব্যবধানে চালানো হয় এবং প্রতিটিকে মূলধনের একটি অংশ হিসেবে বরাদ্দ করা হয়। ফলে পোর্টফোলিওতে একটি নির্দিষ্ট শুরুর তারিখের বাজি না রেখে একটি রোলিং মিশ্রণ থাকে।
নিচের প্যানেলটি ব্রড-মার্কেট, সেক্টর, আন্তর্জাতিক এবং মেটাল ETF-এর একটি নয়টি ফান্ডের ইউনিভার্সে র্যাঙ্কিং ধাপটি পরিচালনা করে। এখানে সর্বশেষ 21টি দৈনিক ক্লোজিং ব্যবহার করা হয়েছে, যাতে রিটার্নটি ঠিক 20টি সেশন জুড়ে থাকে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH bounds AS
(
SELECT
min(d) AS first_day,
max(d) AS last_day
FROM
(
SELECT date AS d
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= today() - 120
GROUP BY d
ORDER BY d DESC
LIMIT 21
)
)
SELECT
sleeve.ticker AS etf,
sleeve.ret_pct AS return_pct,
round(sleeve.ret_pct - bench.ret_pct, 2) AS excess_vs_spy_pct
FROM
(
SELECT
ticker,
round((argMax(toFloat64(close), date) / argMin(toFloat64(close), date) - 1) * 100, 2) AS ret_pct
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
AND date >= (SELECT first_day FROM bounds)
AND date <= (SELECT last_day FROM bounds)
GROUP BY ticker
) AS sleeve
CROSS JOIN
(
SELECT
round((argMax(toFloat64(close), date) / argMin(toFloat64(close), date) - 1) * 100, 2) AS ret_pct
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= (SELECT first_day FROM bounds)
AND date <= (SELECT last_day FROM bounds)
) AS bench
ORDER BY excess_vs_spy_pct DESCর্যাঙ্কিংয়ের শীর্ষে, GLD সেই 20 সেশনে 8.69% রিটার্ন দিয়েছে, যা SPY-এর বিপরীতে 6.34 পয়েন্ট। তালিকার নিচে, XLU ছিল -5.81 পয়েন্টে। প্রতিটি সারি দুটি বারের মাধ্যমে পুরো ধারণাটি তুলে ধরে: ফান্ডের পারফরম্যান্স এবং একই উইন্ডোতে SPY-এর মুভমেন্ট বাদ দেওয়ার পর যা অবশিষ্ট থাকে। প্রতিটি 9 সারিতে দুটি বারের মধ্যবর্তী দূরত্ব একই, কারণ প্রতিটি ফান্ডকে একটি নির্দিষ্ট উইন্ডোতে একটি বেঞ্চমার্কের বিপরীতে পরিমাপ করা হয়েছে।
আলফা অ্যাট্রিবিউশন আসলে কী পরিমাপ করে
আলফা অ্যাট্রিবিউশন হলো একটি রিগ্রেশন। কৌশলের রিটার্ন সিরিজকে এক বা একাধিক বেঞ্চমার্ক রিটার্ন সিরিজের বিপরীতে সাজিয়ে একটি সরলরেখা টানা হয়। প্রতিটি বেঞ্চমার্কের স্লোপ হলো এক্সপোজার: কৌশলটি ওই বেঞ্চমার্কের সাথে কতটা সামঞ্জস্যপূর্ণভাবে নড়াচড়া করে। সেই এক্সপোজারগুলোর হিসাব মেটানোর পর যা অবশিষ্ট থাকে, তাকেই আলফা বলা হয়। আর স্কয়ারড (R squared) হলো তৃতীয় সংখ্যা, যা কৌশলের পরিবর্তনের কতটুকু অংশ বেঞ্চমার্ক সিরিজ ব্যাখ্যা করতে পারে তা নির্দেশ করে। এটি 0% (বেঞ্চমার্ক কিছুই ব্যাখ্যা করতে পারে না) থেকে 100% (কৌশলটি বেঞ্চমার্ক এবং একটি ধ্রুবকের সমষ্টি) পর্যন্ত হতে পারে।
একটি রোটেশন রুলকে একক ব্রড-মার্কেট সিরিজের বিপরীতে রিগ্রেস করলে সাধারণত সেটিকে মৌলিক মনে হয়। আগস্ট 2026-এ প্রকাশিত এবং ডিটারমিনিস্টিক সিন্থেটিক মূল্যে চালিত এই ধরনের একটি রুলের অ্যাট্রিবিউশনে, একক-বেঞ্চমার্ক ফিট থেকে 14.0% R squared পাওয়া গিয়েছিল। কৌশলের পরিবর্তনের ছয়-সপ্তমাংশই ব্যাখ্যাতীত ছিল, যা কাগজে মৌলিকত্ব হিসেবে দেখা দেয়। কিন্তু রুলটি আসলে যে এক্সপোজারগুলো ধরে রেখেছিল—যেমন মোমেন্টাম টিল্ট এবং দুটি নামের পোর্টফোলিওতে থাকা সেক্টর কনসেন্ট্রেশন—সেগুলোর প্রক্সি ব্যবহার করায় R squared বেড়ে 63.6% হয় এবং ইন্টারসেপ্ট বছরে 0.38%-এ নেমে আসে। রিটার্ন সিরিজ এবং কোড একই ছিল, শুধু তুলনার সেটটি ভিন্ন ছিল। কৌশলটি আসলে সুপরিচিত এক্সপোজারগুলো ভাড়া করছিল।
এই স্টাডিটি একটি নির্দিষ্ট সিড থেকে নিজস্ব মূল্য তৈরি করে, তাই কোনো ডেটা ভেন্ডর ছাড়াই পাঠক এর প্রতিটি সংখ্যা যাচাই করতে পারেন। এটি লেখার সময় এই প্রজেক্টটি মাত্র কয়েক দিনের পুরনো, আর এত নতুন প্রজেক্ট প্রতি সপ্তাহে পরিবর্তিত হয়। কোনো সংখ্যা উদ্ধৃত করার আগে আপনি ঠিক কোন কমিট বা ট্যাগড রিলিজটি চালিয়েছেন তা উল্লেখ করুন: ফ্যাক্টর প্রক্সি বা স্যাম্পল উইন্ডো পরিবর্তিত হলেই অ্যাট্রিবিউশন ফিগার পরিবর্তিত হয়। reproducible backtest tooling-এর ওপর আমাদের নোটে বিপরীত দিক থেকে একই অভ্যাসের কথা আলোচনা করা হয়েছে।
ফ্যাক্টর-মডেলের শব্দভাণ্ডার ছাড়াও এই শিক্ষাটি কার্যকর। আপনি যার বিপরীতে রিগ্রেস করবেন, সেই বেঞ্চমার্কই নির্ধারণ করবে আপনার আলফা কতটুকু। তাই ইন্টারসেপ্ট দেখার আগেই বেঞ্চমার্ক নির্বাচন করুন এবং কেন এটি সঠিক তুলনা তা লিখে রাখুন। ফলাফল দেখার পর তুলনার সেট নির্বাচন করলে তা কেবল আপনার পছন্দের পরিমাপই করে।
একটি ETF-এর কতটা অংশ ইতিমধ্যেই বেঞ্চমার্ক
সমস্যাটি বোঝার জন্য সম্পূর্ণ ফ্যাক্টর মডেলের প্রয়োজন নেই। একটি ফান্ডের দৈনিক রিটার্ন নিন, সেগুলোকে একই সেশনে SPY-এর দৈনিক রিটার্নের বিপরীতে সাজান এবং কোরিলেশনকে স্কয়ার করুন। এটি ফান্ডের দৈনন্দিন পরিবর্তনের সেই অংশটি দেখায় যা একটি ব্রড-মার্কেট বেঞ্চমার্ক ইতিমধ্যেই ব্যাখ্যা করে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH daily AS
(
SELECT
ticker,
date,
toFloat64(close) AS px,
lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
AND date >= today() - 760
)
SELECT
sleeve.ticker AS etf,
round(pow(corr(sleeve.fund_ret, bench.spy_ret), 2) * 100, 1) AS r_squared_vs_spy_pct
FROM
(
SELECT ticker, date, px / prev_px - 1 AS fund_ret
FROM daily
WHERE prev_px > 0
AND ticker != 'SPY'
) AS sleeve
INNER JOIN
(
SELECT date, px / prev_px - 1 AS spy_ret
FROM daily
WHERE prev_px > 0
AND ticker = 'SPY'
) AS bench USING (date)
GROUP BY sleeve.ticker
ORDER BY r_squared_vs_spy_pct DESCগত দুই বছরে, QQQ এই ইউনিভার্সে সর্বোচ্চ একক-বেঞ্চমার্ক R squared বহন করেছে 90.3%-এ, এবং GLD সর্বনিম্ন 3.1%-এ। চার্টের উচ্চ প্রান্ত থেকে তৈরি একটি স্লিভ বেঞ্চমার্কের একটি ভিন্ন ওয়েটিং সংস্করণ মাত্র, এবং বেঞ্চমার্ক ছাড়া অন্য কিছুর বিপরীতে পরিমাপ করা যেকোনো ইন্টারসেপ্ট নীরবে সেই পার্থক্যকে শোষণ করে নেবে। নিম্ন প্রান্তটি হলো সেই জায়গা যেখানে একটি রোটেশন এমন একটি রিটার্ন স্ট্রিম যোগ করতে পারে যা ব্রড মার্কেটে নেই, তবে এখানেই একটি দুই-নামের পোর্টফোলিও বৈচিত্র্যময় পোর্টফোলিও হওয়ার বৈশিষ্ট্য হারায়।
লিডিং ফান্ড কত ঘন ঘন পরিবর্তিত হয়
একটি র্যাঙ্কিং রুলের তখনই কিছু বাছাই করার থাকে যখন ফান্ডগুলোর মধ্যে মতপার্থক্য থাকে। নিচের প্যানেলটি প্রতিটি ফান্ডের ক্যালেন্ডার-মাসের রিটার্নকে একই মাসে SPY-এর রিটার্নের বিপরীতে পরিমাপ করে এবং প্রতি মাসের জন্য সবচেয়ে শক্তিশালী ও সবচেয়ে দুর্বল স্লিভটি ধরে রাখে।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH monthly AS
(
SELECT
toStartOfMonth(date) AS m,
ticker,
argMin(toFloat64(close), date) AS first_close,
argMax(toFloat64(close), date) AS last_close
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
AND date >= toStartOfMonth(today() - 400)
AND date < toStartOfMonth(today())
GROUP BY m, ticker
)
SELECT
formatDateTime(x.m, '%Y-%m') AS month,
argMax(x.ticker, x.excess_pct) AS leading_etf,
round(max(x.excess_pct), 2) AS leader_excess_pct,
round(min(x.excess_pct), 2) AS laggard_excess_pct
FROM
(
SELECT
sleeve.m AS m,
sleeve.ticker AS ticker,
(sleeve.last_close / sleeve.first_close - 1) * 100
- (bench.spy_last / bench.spy_first - 1) * 100 AS excess_pct
FROM monthly AS sleeve
INNER JOIN
(
SELECT
m,
first_close AS spy_first,
last_close AS spy_last
FROM monthly
WHERE ticker = 'SPY'
) AS bench USING (m)
WHERE sleeve.ticker != 'SPY'
) AS x
GROUP BY x.m
ORDER BY x.m13 পূর্ণ মাস জুড়ে, সিরিজটি 2025-07-এ XLK-কে সামনে রেখে শুরু হয়। সর্বশেষ পূর্ণ মাসে, 2026-07, সবচেয়ে শক্তিশালী স্লিভ ছিল XLE, যা SPY-এর বিপরীতে 12.59 পয়েন্ট ছিল, যেখানে সবচেয়ে দুর্বলটি ছিল -5.7। দুটি লাইনের মধ্যবর্তী দূরত্বই হলো সেই ডিসপারশন যা একটি র্যাঙ্কিং রুলকে সচল রাখে। যে মাসগুলোতে লাইনগুলো কাছাকাছি চলে আসে, সেখানে বাছাই প্রক্রিয়াটি প্রায় নির্বিচার হয়ে পড়ে এবং যে রুল প্রতিটি র্যাঙ্কিংয়ে ট্রেড করে, তাকে সেই মাসগুলোতে টার্নওভারের মূল্য দিতে হয়। মাসের সীমানাগুলো এখানে বিশেষ মনোযোগের দাবি রাখে; how monthly returns are measured কনভেনশনগুলো বিস্তারিত ব্যাখ্যা করে।
দুই-নামের কনসেন্ট্রেশন কি আসল ঝুঁকি?
ভোলাটিলিটি হলো এই প্রশ্নের সবচেয়ে সহজ সংস্করণ। এই প্যানেলটি একই দুই বছর ধরে প্রতিটি ফান্ডের দৈনিক রিটার্নের পরিবর্তনকে বার্ষিক রূপ দেয় এবং SPY-কে রেফারেন্স বার হিসেবে ব্যবহার করে, পাশাপাশি প্রতিটি ফান্ডের সবচেয়ে খারাপ একক সেশনটিও দেখায়।
প্রতিটি সংখ্যার পেছনের সঠিক SQL
WITH daily AS
(
SELECT
ticker,
date,
toFloat64(close) AS px,
lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
AND date >= today() - 760
)
SELECT
ticker AS etf,
round(stddevSamp(px / prev_px - 1) * sqrt(252) * 100, 1) AS annual_vol_pct,
round(min(px / prev_px - 1) * 100, 2) AS worst_day_pct
FROM daily
WHERE prev_px > 0
GROUP BY ticker
ORDER BY annual_vol_pct DESCXLK ছিল প্রশস্ত প্রান্তের দিকে, বার্ষিক 27.7% হারে, যার সবচেয়ে খারাপ একক সেশন ছিল -6.82%, এবং XLU ছিল সংকীর্ণ প্রান্তের দিকে 15.8% হারে। একটি রুল যা একবারে দুটি নাম ধরে রাখে, তা এই পরিসীমা থেকে বাছাই করে কিন্তু তার গড় করে না। প্রশস্ত প্রান্তের সাথে আসা গভীর ড্রডাউনগুলো অ্যাট্রিবিউশনে দক্ষতার পরিবর্তে এক্সপোজার হিসেবে গণ্য হয়। low volatility anomaly নোটে একই চার্টের সংকীর্ণ প্রান্তের দীর্ঘমেয়াদী রেকর্ড কভার করা হয়েছে।
আপনার নিজস্ব রোটেশন ব্যাকটেস্টের জন্য চারটি চেক
- একই দিনের সিগন্যাল লিকেজ। যদি 20-সেশনের র্যাঙ্কিং একটি সেশনের ক্লোজ পর্যন্ত গণনা করা হয় এবং ফিল একই ক্লোজে বুক করা হয়, তবে টেস্টটি এমন তথ্যের ওপর ভিত্তি করে ট্রেড করে যা ট্রেডের মুহূর্তে তার কাছে ছিল না। সেশন t পর্যন্ত ডেটার ওপর র্যাঙ্ক করুন, সেশন t প্লাস ওয়ান-এ ফিল করুন এবং দুটি সংস্করণের তুলনা করুন: তাদের মধ্যবর্তী ব্যবধানই হলো লিকেজের পরিমাণ। Look-ahead bias দেখায় যে এই ব্যবধান কতটা বড় হতে পারে।
- ফান্ড তালিকায় সারভাইভারশিপ। আজ বিদ্যমান ফান্ডগুলো নিয়ে গঠিত একটি ইউনিভার্স সেই সব ফান্ডকে বাদ দেয় যা পথিমধ্যে বন্ধ বা মার্জ হয়ে গেছে, এবং বন্ধ হয়ে যাওয়া ফান্ডগুলো সাধারণত সবচেয়ে খারাপ পারফর্ম করা পণ্যগুলোর মধ্যেই থাকে। Survivorship bias স্টক তালিকার মতোই ETF তালিকার ক্ষেত্রেও প্রযোজ্য।
- আগে থেকে বেঞ্চমার্ক নির্বাচন। প্রথম রিগ্রেশনের আগেই তুলনার সেটটি লিখে রাখুন, যার মধ্যে আপনার প্রত্যাশিত এক্সপোজারের প্রক্সিগুলো অন্তর্ভুক্ত থাকবে। ইন্টারসেপ্ট তখনই অর্থবহ হয় যখন তা আগে থেকে নির্ধারিত বেঞ্চমার্কের বিপরীতে হয়।
- সরাসরি কনসেন্ট্রেশন পরিমাপ। শীর্ষ দুটি নাম ধরে রেখে একই র্যাঙ্কিং চালান, তারপর শীর্ষ চারটি, এবং সবশেষে পুরো ইউনিভার্সের সমান ওয়েট ব্যবহার করুন। যদি রিপোর্ট করা বেশিরভাগ এজ (edge) দুই-নামের সংস্করণেই থাকে, তবে কনসেন্ট্রেশনই হলো মূল অবস্থান, এবং র্যাঙ্কিং কেবল কোন কনসেন্ট্রেশনটি নেবেন তা বেছে নেওয়ার একটি উপায়।
FAQ
ETF রিলেটিভ স্ট্রেন্থ কী?
রিলেটিভ স্ট্রেন্থ হলো একটি নির্দিষ্ট লুকব্যাক পিরিয়ডে ফান্ডের রিটার্ন থেকে একই উইন্ডোতে বেঞ্চমার্কের রিটার্ন বিয়োগফল। এর ওপর ভিত্তি করে র্যাঙ্কিং করলে যে ফান্ডগুলো বেঞ্চমার্ককে ছাড়িয়ে গেছে সেগুলো উপরে থাকে, তাদের কাঁচা রিটার্ন ইতিবাচক হোক বা না হোক।
আলফা অ্যাট্রিবিউশন কী?
এটি এক বা একাধিক বেঞ্চমার্ক রিটার্ন সিরিজের বিপরীতে একটি কৌশলের রিটার্নের রিগ্রেশন। স্লোপগুলো কৌশলের এক্সপোজার পরিমাপ করে এবং ইন্টারসেপ্ট হলো সেই রিটার্ন যা এক্সপোজারগুলোর হিসাব মেটানোর পর অবশিষ্ট থাকে। সেই ইন্টারসেপ্টই হলো সংখ্যা যা সাধারণত আলফা হিসেবে রিপোর্ট করা হয়।
উচ্চ R squared কি কৌশলের খারাপ হওয়ার লক্ষণ?
না। উচ্চ R squared মানে হলো বেঞ্চমার্কগুলো কৌশলের পরিবর্তনের বেশিরভাগ অংশ ব্যাখ্যা করতে পারে, যা গুণমানের চেয়ে ওভারল্যাপের একটি বিবৃতি। যা পরিবর্তিত হয় তা হলো ইন্টারসেপ্ট: রিগ্রেশন এখন যে এক্সপোজারগুলো দেখতে পায়, সেগুলো আর মৌলিকত্ব হিসেবে গণ্য হয় না।
একটি পোর্টফোলিওর পরিবর্তে ওভারল্যাপিং স্লিভস কেন রাখা হয়?
প্রতি 20 সেশনে রিব্যালেন্স করা একটি একক পোর্টফোলিও শুরুর তারিখের ওপর ফলাফলকে নির্ভরশীল করে তোলে। একই রুলের কয়েকটি স্ট্যাগার্ড কপি চালালে সেই পছন্দের প্রভাব গড় হয়ে যায় এবং টার্নওভার এক তারিখে কেন্দ্রীভূত না হয়ে পুরো মাস জুড়ে ছড়িয়ে পড়ে।
এখানে প্রতিটি প্যানেল সেই SQL-এর সাথে আসে যা এটি তৈরি করেছে। একটি খুলুন, আপনার নিজস্ব ফান্ড তালিকা যোগ করুন এবং অর্ডারিং কীভাবে পরিবর্তিত হয় তা দেখতে Strasmore টার্মিনালে র্যাঙ্কিংটি পুনরায় চালান।