Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

אסטרטגיית Relative Strength בקרנות סל וניתוח Alpha

כיצד מדרגים קרנות סל לפי תשואה יחסית ל-SPY בטווח עשרים ימי מסחר. המאמר בוחן את השפעת ייחוס התשואה על ה-intercept ועל מדידת ה-alpha האמיתית בתיקי השקעות.

אסטרטגיית Relative Strength בקרנות סל מדרגת סל מצומצם של קרנות לפי מידת הסטייה של התשואה האחרונה שלהן ביחס למדד ייחוס, ומחזיקה את הקרנות שדורגו בראש. הכלל שמאמר זה מנתח מורכב משורה אחת: בכל 20 ימי מסחר, יש לדרג את היקום הנבדק לפי התשואה ב-20 הימים האחרונים בניכוי התשואה של SPY באותה תקופה, ולהחזיק את שתי הקרנות המובילות בתיקים חופפים (overlapping sleeves). ייחוס התשואה (attribution) הוא המקום שבו אסטרטגיה כזו נבחנת; באחת ההרצות שפורסמו עבור מודל זה בדיוק, ה-intercept שהיה מדווח כ-alpha עמד על 0.38% בשנה לאחר שהרגרסיה כללה את החשיפות שהכלל ממילא רכש.

כיצד פועל כלל ה-Relative Strength בקרנות סל

Relative strength הוא השוואה, לא תשואה. קרן שעלתה ב-3% ב-20 ימי מסחר בעוד המדד עלה ב-5% היא בעלת relative strength שלילי. קרן שירדה ב-1% בעוד המדד ירד ב-4% היא בעלת relative strength חיובי. המספר לפיו מתבצע הדירוג הוא תשואה עודפת: אחוז השינוי של הקרן בחלון זמן קבוע, פחות אחוז השינוי של מדד הייחוס באותו חלון זמן, הנמדד יום מול יום.

שתי בחירות עומדות בבסיס הדירוג. ה-lookback קובע כמה היסטוריה הדירוג בוחן, כאשר 20 ימי מסחר הם בקירוב חודש מסחר קלנדרי. תקופת ההחזקה קובעת כמה זמן "מנצחת" נשארת בתיק. כאשר השניים זהים, כל התיק מתחלף בתאריך אחד בחודש, והתוצאה כולה תלויה בתאריך שבו התחלת. תיקים חופפים מסירים תלות זו: מריצים כמה עותקים של אותו כלל בהפרשי ימים, מקצים לכל אחד שבריר מההון, והתיק המשולב מחזיק תמהיל מתגלגל במקום הימור על תאריך התחלה יחיד.

הפאנל להלן מריץ את שלב הדירוג על יקום של תשע קרנות סל של שוק רחב, סקטורים, שווקים בינלאומיים ומתכות, תוך שימוש ב-21 שערי הסגירה היומיים האחרונים כך שהתשואה משתרעת על פני 20 ימי מסחר בדיוק.

שאילתהתשואה ל-20 ימי מסחר מול SPY בקרב יקום של תשע קרנות ETF
ה-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 הניבה 8.69% במהלך 20 ימי המסחר הללו, 6.34 נקודות מול SPY. בתחתית, XLU עמדה על -5.81 נקודות. כל שורה מציגה את הרעיון המלא בשני עמודות: מה הקרן עשתה, ומה נותר לאחר ניכוי תנועת ה-SPY באותו חלון זמן. המרחק בין שתי העמודות הוא אותו מספר בכל 9 השורות, שכן כל קרן נמדדת מול מדד ייחוס אחד לאורך חלון זמן אחד.

מה מודד ייחוס ה-alpha באמת

ייחוס alpha הוא רגרסיה. מציבים את סדרת התשואות של האסטרטגיה מול סדרה אחת או יותר של תשואות מדד ייחוס ומתאימים קו ישר דרך פיזור הנקודות. השיפוע (slope) של כל מדד ייחוס הוא חשיפה: באיזו מידה האסטרטגיה נעה בתיאום עם אותו נכס. ה-intercept הוא מה שנותר לאחר שהחשיפות הללו שולמו, והשארית הזו היא מה שמכונה alpha. ה-R squared הוא המספר השלישי, המייצג את חלק השונות של האסטרטגיה שהמדדים מסבירים, ונע בין 0% (המדדים לא מסבירים דבר) ל-100% (האסטרטגיה היא המדדים בתוספת קבוע).

בצע רגרסיה לכלל רוטציה מול סדרה אחת של שוק רחב, ובדרך כלל זה ייראה מקורי. בייחוס שפורסם לכלל במבנה זה, שפורסם בקוד פתוח באוגוסט 2026 והורץ על מחירים סינתטיים דטרמיניסטיים, התאמה למדד יחיד הניבה R squared של 14.0%. שישה שביעיות מהשונות של האסטרטגיה נותרו ללא הסבר, מה שנקרא בדף כמקוריות. החלפה של המדדים בנכסים המייצגים את החשיפות שהכלל באמת החזיק – הטיית מומנטום וריכוזיות סקטוריאלית שתיק של שתי מניות נושא – העלתה את ה-R squared ל-63.6% ומשכה את ה-intercept ל-0.38% בשנה. אותה סדרת תשואות ואותו קוד. קבוצת השוואה שונה. האסטרטגיה פשוט "שכרה" חשיפות ידועות.

המחקר ההוא מייצר מחירים משלו מתוך seed קבוע, כך שקורא ללא ספק נתונים יכול לשחזר כל נתון שהוא מציג. הוא גם בן ימים ספורים בלבד בעת הכתיבה, ופרויקט כה צעיר משתנה מדי שבוע. ציין את ה-commit המדויק או את ה-release שבו השתמשת לפני שאתה מצטט נתון ממנו: נתוני הייחוס משתנים בכל פעם שהנכסים המייצגים או חלון הדגימה משתנים. ההערה שלנו על כלי backtest ברי-שחזור מכסה את אותו הרגל מהכיוון ההפוך.

הלקח נותר תקף גם ללא אוצר המילים של מודל הפקטורים. המדד מולו אתה מבצע רגרסיה קובע כמה alpha נראה שיש לך, לכן בחר אותו לפני שאתה מסתכל על ה-intercept ורשום מדוע זו ההשוואה הנכונה. קבוצת השוואה שנבחרה לאחר שראית את התוצאה מודדת את בחירת ההשוואה עצמה.

כמה מקרן סל הוא כבר מדד הייחוס

אינך זקוק למודל פקטורים מלא כדי לראות את הבעיה מגיעה. קח את התשואות היומיות של קרן אחת, הצב אותן מול התשואות היומיות של 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%. תיק המורכב מהקצה הגבוה של תרשים זה הוא קרוב לניסוח מחדש של המדד תחת שקלול שונה, וכל intercept שיימדד מול משהו שאינו המדד יספוג בשקט את ההפרש. הקצה הנמוך הוא המקום שבו רוטציה יכולה להוסיף זרם תשואה שהשוק הרחב אינו מכיל כבר, וזהו גם המקום שבו תיק של שתי מניות מפסיק להידמות לתיק מגוון.

באיזו תדירות הקרן המובילה משתנה

לכלל דירוג יש מה למיין רק כאשר הקרנות אינן מסכימות. הפאנל להלן מודד את התשואה החודשית של כל קרן מול זו של 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 ב-12.59 נקודות מול SPY, בעוד החלש ביותר מדד -5.7. המרחק בין שני הקווים הוא הפיזור שעליו ניזון כלל דירוג. חודשים שבהם הקווים מתקרבים הם חודשים שבהם המיון קרוב לשרירותי, וכלל שסוחר על כל דירוג משלם עמלות תחלופה בכולם. גבולות חודשיים דורשים התייחסות מיוחדת כאן; כיצד נמדדות תשואות חודשיות עובר על המוסכמות.

האם ריכוזיות של שתי מניות היא הסיכון האמיתי?

תנודתיות היא הגרסה הפשוטה ביותר לשאלה זו. פאנל זה מחשב שנתיות לשונות התשואה היומית של כל קרן לאורך אותן שנתיים ומציג את 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%. כלל שמחזיק שתי מניות בכל פעם שואב מטווח זה מבלי לבצע ממוצע, והירידות העמוקות יותר שמגיעות עם הקצה הרחב מתפרשות בייחוס כחשיפה ולא כמיומנות. ההערה על אנומליות התנודתיות הנמוכה מכסה את התיעוד ארוך הטווח בקצה הצר של אותו תרשים.

ארבע בדיקות ל-backtest הרוטציה שלך

  1. דליפת אותות באותו יום. אם הדירוג ל-20 ימים מחושב לפי סגירת יום המסחר והביצוע נרשם באותה סגירה, הבדיקה סוחרת על מידע שלא היה ברשותה ברגע המסחר. דרג לפי נתונים עד יום t, בצע ביום t פלוס אחד, והשווה בין שתי הגרסאות: הפער ביניהן הוא גודל הדליפה. הטיית מבט לעתיד מראה עד כמה הפער הזה גדל.
  2. הישרדות ברשימת הקרנות. יקום המורכב מקרנות שקיימות היום מוציא כל קרן שנסגרה או מוזגה בדרך, וסגירות מתרכזות במוצרים שביצעו את הביצועים הגרועים ביותר. הטיית הישרדות חלה על רשימת קרנות סל בדיוק כפי שהיא חלה על רשימת מניות.
  3. מדד ייחוס שנבחר מראש. רשום את קבוצת ההשוואה לפני הרגרסיה הראשונה, כולל נכסים מייצגים לחשיפות שאתה מצפה שהכלל יחזיק. ה-intercept אומר משהו רק מול מדד ייחוס שהתחייבת אליו מראש.
  4. ריכוזיות שנמדדת ישירות. הרץ את אותו דירוג תוך החזקת שתי המניות המובילות, לאחר מכן ארבע המובילות, ולאחר מכן משקל שווה של כל היקום. אם רוב היתרון המדווח נמצא בגרסת שתי המניות, הריכוזיות היא הפוזיציה, והדירוג הוא דרך לבחור איזו ריכוזיות לקחת.

שאלות נפוצות

מהו Relative strength בקרנות סל?

Relative strength הוא התשואה של קרן לאורך תקופת lookback קבועה פחות התשואה של מדד ייחוס באותו חלון זמן. דירוג הממוין לפיו מציב את הקרנות שעקפו את המדד בראש, ללא קשר לשאלה אם התשואות הגולמיות שלהן היו חיוביות.

מהו ייחוס alpha?

זוהי רגרסיה של תשואות אסטרטגיה על סדרה אחת או יותר של תשואות מדד ייחוס. השיפועים מודדים את החשיפות שהאסטרטגיה נושאת, וה-intercept הוא התשואה שנותרה לאחר שהחשיפות הללו הוסברו. ה-intercept הזה הוא המספר שמדווח בדרך כלל כ-alpha.

האם R squared גבוה אומר שהאסטרטגיה גרועה?

לא. R squared גבוה אומר שהמדדים מסבירים את רוב השונות של האסטרטגיה, וזו הצהרה על חפיפה ולא על איכות. מה שמשתנה הוא ה-intercept: חשיפות שהרגרסיה יכולה כעת לראות מפסיקות להיספר כמקוריות.

מדוע להחזיק תיקים חופפים במקום תיק אחד?

תיק יחיד המאוזן מחדש כל 20 ימי מסחר הופך את התוצאה לתלויה בתאריך ההתחלה. הרצת כמה עותקים מדורגים של אותו כלל ממצעת את הבחירה הזו ומפזרת את התחלופה לאורך החודש במקום לרכז אותה בתאריך אחד.


כל פאנל כאן מגיע עם ה-SQL שהפיק אותו. פתח אחד, החלף ברשימת הקרנות שלך, והרץ מחדש את הדירוג בטרמינל Strasmore כדי לצפות בסדר משתנה.

#etfs#momentum#quant#factor models#attribution