Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

ETF relative strength और alpha attribution कैसे समझें

ETF relative strength का उपयोग करके फंड रैंकिंग और excess return की गणना करना सीखें। जानें कि बेंचमार्क के साथ alpha attribution का समायोजन इंटरसेप्ट को कैसे प्रभावित करता है।

ETF relative strength नियम कैसे काम करता है

Relative strength एक तुलना है, न कि रिटर्न। यदि कोई फंड 20 सत्रों में 3% ऊपर है जबकि बेंचमार्क 5% ऊपर है, तो relative strength नकारात्मक है। यदि कोई फंड 1% नीचे है जबकि बेंचमार्क 4% नीचे है, तो relative strength सकारात्मक है। रैंकिंग जिस संख्या के आधार पर की जाती है, वह excess return है: एक निश्चित अवधि में फंड का प्रतिशत परिवर्तन, उसी अवधि में बेंचमार्क के प्रतिशत परिवर्तन को घटाकर, सत्र-दर-सत्र मापा जाता है।

इसके ऊपर दो विकल्प निर्भर करते हैं। Lookback यह तय करता है कि रैंकिंग कितना पिछला डेटा देखती है, जिसमें 20 सत्र लगभग एक ट्रेडिंग महीने के बराबर होते हैं। Holding period यह तय करता है कि कोई विजेता फंड पोर्टफोलियो में कब तक रहेगा। जब दोनों बराबर होते हैं, तो पूरा पोर्टफोलियो महीने में एक तारीख को बदल जाता है और पूरा परिणाम इस पर निर्भर करता है कि आपने किस तारीख को शुरुआत की। Overlapping sleeves इस निर्भरता को हटा देते हैं: एक ही नियम की कई कॉपियां कुछ सत्रों के अंतराल पर चलाएं, प्रत्येक को पूंजी के एक हिस्से के रूप में आवंटित करें, और मिश्रित पोर्टफोलियो एक एकल शुरुआत-तारीख के दांव के बजाय एक रोलिंग मिश्रण रखता है।

नीचे दिया गया पैनल ब्रॉड-मार्केट, सेक्टर, अंतरराष्ट्रीय और मेटल ETFs के नौ-फंड वाले यूनिवर्स पर रैंकिंग चरण चलाता है, जिसमें पिछले 21 दैनिक क्लोज का उपयोग किया गया है ताकि रिटर्न ठीक 20 सत्रों तक फैले।

क्वेरीनौ-फंड ETF यूनिवर्स में SPY के मुकाबले 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
Run this yourself

रैंकिंग में सबसे ऊपर, GLD ने उन 20 सत्रों में 8.69% का रिटर्न दिया, जो SPY के मुकाबले 6.34 अंक है। सबसे नीचे, XLU का स्तर -5.81 अंक पर था। प्रत्येक पंक्ति पूरी अवधारणा को दो बार्स में दर्शाती है: फंड ने क्या किया, और समान अवधि में SPY की चाल को हटाने के बाद क्या बचा। दोनों बार्स के बीच की दूरी सभी 9 पंक्तियों में समान संख्या है, क्योंकि प्रत्येक फंड को एक बेंचमार्क के मुकाबले एक अवधि में मापा जाता है।

Alpha attribution वास्तव में क्या मापता है

Alpha attribution एक रिग्रेशन है। रणनीति के रिटर्न सीरीज को एक या अधिक बेंचमार्क रिटर्न सीरीज के साथ रखें और स्कैटर प्लॉट पर एक सीधी रेखा फिट करें। प्रत्येक बेंचमार्क पर ढलान (slope) एक एक्सपोज़र है: रणनीति का कितना हिस्सा उस बेंचमार्क के साथ चलता है। इंटरसेप्ट वह है जो उन एक्सपोज़र के भुगतान के बाद बचता है, और उस शेष राशि को ही alpha कहा जाता है। R squared तीसरी संख्या है, जो रणनीति के बदलाव का वह हिस्सा है जिसे बेंचमार्क सीरीज समझाती है, जो 0% (बेंचमार्क कुछ नहीं समझाते) से 100% (रणनीति बेंचमार्क प्लस एक स्थिरांक है) तक होती है।

एक रोटेशन नियम को एक एकल ब्रॉड-मार्केट सीरीज के खिलाफ रिग्रेस करें और यह आमतौर पर मौलिक दिखता है। इस आकार के एक नियम के प्रकाशित एट्रिब्यूशन में, जिसे अगस्त 2026 में ओपन-सोर्स किया गया और डिटरमिनिस्टिक सिंथेटिक कीमतों पर चलाया गया, उस एकल-बेंचमार्क फिट ने 14.0% का R squared उत्पन्न किया। रणनीति के बदलाव का छह-सातवां हिस्सा बिना स्पष्टीकरण के था, जिसे पेज पर मौलिकता के रूप में पढ़ा जाता है। नियम द्वारा वास्तव में रखे गए एक्सपोज़र के लिए प्रॉक्सी को स्वैप करने पर, जैसे कि मोमेंटम टिल्ट और दो-नाम वाली बुक द्वारा ली गई सेक्टर एकाग्रता, R squared बढ़कर 63.6% हो गया और इंटरसेप्ट 0.38% प्रति वर्ष पर आ गया। रिटर्न सीरीज और कोड वही थे। तुलना का सेट अलग था। रणनीति केवल प्रसिद्ध एक्सपोज़र को किराए पर ले रही थी।

वह अध्ययन एक निश्चित सीड से अपनी कीमतें उत्पन्न करता है, इसलिए बिना डेटा वेंडर वाला पाठक भी हर उस आंकड़े को पुन: उत्पन्न कर सकता है जिसे वह प्रिंट करता है। यह लेखन के समय केवल कुछ दिन पुराना है, और इतनी युवा परियोजना हर हफ्ते बदलती है। किसी आंकड़े को उद्धृत करने से पहले उस सटीक कमिट या टैग्ड रिलीज़ को पिन करें जिसे आपने चलाया था: एट्रिब्यूशन के आंकड़े तब बदलते हैं जब फैक्टर प्रॉक्सी या सैंपल विंडो बदलती है। reproducible backtest tooling पर हमारा नोट उसी आदत को दूसरी दिशा से कवर करता है।

यह सबक फैक्टर-मॉडल शब्दावली के बिना भी जीवित रहता है। जिस बेंचमार्क के खिलाफ आप रिग्रेशन करते हैं, वह यह निर्धारित करता है कि आपके पास कितना alpha है, इसलिए इंटरसेप्ट देखने से पहले इसे चुनें और लिखें कि यह सही तुलना क्यों है। परिणाम देखने के बाद चुना गया तुलना सेट केवल तुलना के चुनाव को मापता है।

ETF का कितना हिस्सा पहले से ही बेंचमार्क है

समस्या को देखने के लिए आपको पूर्ण फैक्टर मॉडल की आवश्यकता नहीं है। एक फंड के दैनिक रिटर्न लें, उन्हें उन्हीं सत्रों पर SPY के दैनिक रिटर्न के खिलाफ रखें, और सहसंबंध (correlation) का वर्ग करें। यह फंड के दिन-प्रतिदिन के बदलाव का वह हिस्सा देता है जिसे एक एकल ब्रॉड-मार्केट बेंचमार्क पहले से ही समझाता है।

क्वेरी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
Run this yourself

पिछले दो वर्षों में, QQQ का इस यूनिवर्स में सबसे अधिक एकल-बेंचमार्क R squared 90.3% था, और GLD का सबसे कम 3.1% था। उस चार्ट के उच्च स्तर से बनाई गई स्लीव एक अलग वेटिंग के तहत बेंचमार्क का पुनर्कथन है, और बेंचमार्क के अलावा किसी अन्य चीज़ के खिलाफ मापा गया कोई भी इंटरसेप्ट चुपचाप अंतर को अवशोषित कर लेगा। निचला स्तर वह है जहां एक रोटेशन एक रिटर्न स्ट्रीम जोड़ सकता है जो ब्रॉड मार्केट में पहले से मौजूद नहीं है, और यह वह जगह भी है जहां दो-नाम वाली बुक एक विविध पोर्टफोलियो जैसा दिखना बंद कर देती है।

अग्रणी फंड कितनी बार बदलता है

एक रैंकिंग नियम के पास सॉर्ट करने के लिए तभी कुछ होता है जब फंड असहमत हों। नीचे दिया गया पैनल प्रत्येक फंड के कैलेंडर-महीने के रिटर्न को उसी महीने में SPY के रिटर्न के खिलाफ मापता है, फिर हर महीने के लिए सबसे मजबूत और सबसे कमजोर स्लीव रखता है।

क्वेरीकैलेंडर माह के अनुसार, 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.m
Run this yourself

13 पूर्ण महीनों में, सीरीज 2025-07 में XLK के साथ आगे खुलती है। सबसे हालिया पूर्ण महीने में, 2026-07, सबसे मजबूत स्लीव XLE थी जो SPY के मुकाबले 12.59 अंक पर थी, जबकि सबसे कमजोर -5.7 मापी गई। दो लाइनों के बीच की दूरी वह फैलाव (dispersion) है जिस पर एक रैंकिंग नियम फलता-फूलता है। जिन महीनों में लाइनें एक-दूसरे के करीब आती हैं, वे महीने ऐसे होते हैं जहां सॉर्ट लगभग मनमाना होता है, और हर रैंकिंग पर ट्रेड करने वाला नियम उन सभी में टर्नओवर का भुगतान करता है। महीने की सीमाएं यहां अपने स्वयं के ध्यान की हकदार हैं; how monthly returns are measured सम्मेलनों के माध्यम से चलता है।

क्या दो-नाम वाली एकाग्रता वास्तविक जोखिम है?

Volatility उस प्रश्न का सबसे सरल संस्करण है। यह पैनल पिछले दो वर्षों में प्रत्येक फंड के दैनिक रिटर्न बदलाव को वार्षिक बनाता है और 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 DESC
Run this yourself

XLK चौड़े छोर पर 27.7% वार्षिक पर था, जिसका सबसे खराब एकल सत्र -6.82% था, और XLU संकीर्ण छोर पर 15.8% पर था। एक समय में दो नाम रखने वाला नियम इस सीमा से आकर्षित होता है, बिना इसे औसत किए, और चौड़े छोर के साथ आने वाले गहरे ड्रॉडाउन एट्रिब्यूशन में कौशल के बजाय एक्सपोज़र के रूप में उतरते हैं। low volatility anomaly नोट उसी चार्ट के संकीर्ण छोर पर दीर्घकालिक रिकॉर्ड को कवर करता है।

अपने स्वयं के रोटेशन बैकटेस्ट के लिए चार जांच

  1. उसी दिन सिग्नल रिसाव। यदि 20-सत्र की रैंकिंग एक सत्र के क्लोज के माध्यम से गणना की जाती है और फिल उसी क्लोज पर बुक किया जाता है, तो टेस्ट उन सूचनाओं पर ट्रेड करता है जो ट्रेड के समय उसके पास नहीं थीं। सत्र t के डेटा पर रैंक करें, सत्र t प्लस एक पर फिल करें, और दोनों संस्करणों की तुलना करें: उनके बीच का अंतर रिसाव का आकार है। Look-ahead bias दिखाता है कि वह अंतर कितना बड़ा हो जाता है।
  2. फंड सूची में उत्तरजीविता (Survivorship)। आज मौजूद फंडों से बना एक यूनिवर्स उन सभी फंडों को बाहर करता है जो रास्ते में बंद या विलय हो गए, और बंद होने वाले उत्पाद उन उत्पादों में क्लस्टर होते हैं जिन्होंने सबसे खराब प्रदर्शन किया। Survivorship bias एक ETF सूची पर वैसे ही लागू होता है जैसे यह स्टॉक सूची पर होता है।
  3. बेंचमार्क पहले से चुना गया। पहले रिग्रेशन से पहले तुलना सेट लिखें, जिसमें उन एक्सपोज़र के लिए प्रॉक्सी शामिल हों जिन्हें आप नियम द्वारा रखने की उम्मीद करते हैं। इंटरसेप्ट का मतलब केवल उस बेंचमार्क के खिलाफ कुछ है जिसके लिए आपने पहले से प्रतिबद्धता की है।
  4. एकाग्रता सीधे मापी गई। शीर्ष दो नाम रखते हुए वही रैंकिंग चलाएं, फिर शीर्ष चार, फिर पूरे यूनिवर्स का समान भार। यदि अधिकांश रिपोर्ट किया गया लाभ दो-नाम वाले संस्करण में रहता है, तो एकाग्रता ही स्थिति है, और रैंकिंग यह चुनने का एक तरीका है कि कौन सी एकाग्रता लेनी है।

FAQ

ETF relative strength क्या है?

Relative strength एक निश्चित लुकबैक पर फंड का रिटर्न है, जिसमें से उसी अवधि में बेंचमार्क का रिटर्न घटाया जाता है। इस पर सॉर्ट की गई रैंकिंग उन फंडों को शीर्ष पर रखती है जिन्होंने बेंचमार्क को पीछे छोड़ दिया, चाहे उनके कच्चे रिटर्न सकारात्मक थे या नहीं।

Alpha attribution क्या है?

यह एक या अधिक बेंचमार्क रिटर्न सीरीज पर रणनीति के रिटर्न का रिग्रेशन है। ढलान (slopes) रणनीति द्वारा किए गए एक्सपोज़र को मापते हैं, और इंटरसेप्ट वह रिटर्न है जो उन एक्सपोज़र के हिसाब-किताब के बाद बचता है। वह इंटरसेप्ट ही वह संख्या है जिसे आमतौर पर alpha के रूप में रिपोर्ट किया जाता है।

क्या उच्च R squared का मतलब है कि रणनीति खराब है?

नहीं। उच्च R squared का मतलब है कि बेंचमार्क रणनीति के अधिकांश बदलाव के लिए जिम्मेदार हैं, जो गुणवत्ता के बजाय ओवरलैप के बारे में एक बयान है। जो बदलता है वह इंटरसेप्ट है: रिग्रेशन अब जिन एक्सपोज़र को देख सकता है, उन्हें मौलिकता के रूप में गिना जाना बंद हो जाता है।

एक पोर्टफोलियो के बजाय overlapping sleeves क्यों रखें?

हर 20 सत्रों में पुनर्संतुलित (rebalanced) एक एकल पोर्टफोलियो परिणाम को शुरुआत की तारीख पर निर्भर बनाता है। उसी नियम की कई स्टैगर्ड कॉपियां चलाने से वह विकल्प औसत हो जाता है और टर्नओवर को एक तारीख पर केंद्रित करने के बजाय पूरे महीने में फैला देता है।


यहां प्रत्येक पैनल उस SQL के साथ आता है जिसने इसे तैयार किया है। एक खोलें, अपनी फंड सूची स्वैप करें, और ऑर्डरिंग को बदलते देखने के लिए Strasmore टर्मिनल पर रैंकिंग को फिर से चलाएं।

#etfs#momentum#quant#factor models#attribution