Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

ETF 상대강도 전략과 알파 귀속 분석

ETF 상대강도 전략의 수익률 산정 방식과 벤치마크 대비 초과 수익률 측정 원리를 설명합니다. 회귀 분석을 통해 전략의 성과를 검증하고 알파 귀속 분석 시 절편 값이 어떻게 조정되는지 상세히 분석합니다.

ETF 상대강도(relative strength)는 소규모 펀드 바구니를 대상으로 각 펀드의 최근 수익률이 벤치마크 대비 얼마나 높은지 혹은 낮은지를 순위 매긴 뒤, 상위 종목을 보유하는 전략입니다. 이 글에서 분석할 규칙은 간단합니다. 20거래일마다 20거래일 수익률에서 동일 기간 SPY 수익률을 뺀 값으로 유니버스를 순위 매기고, 상위 두 종목을 중첩 슬리브(overlapping sleeves) 방식으로 보유하는 것입니다. 이러한 전략의 검증은 성과 귀속(attribution) 분석을 통해 이루어지는데, 정확히 이 설계로 수행된 한 연구에서는 전략이 이미 보유하고 있는 익스포저를 회귀 분석에 포함하자 연간 알파(alpha)로 보고될 뻔했던 절편(intercept) 값이 0.38%로 나타났습니다.

ETF 상대강도 규칙의 작동 원리

상대강도는 수익률 그 자체가 아니라 비교 지표입니다. 20거래일 동안 벤치마크가 5% 상승할 때 펀드가 3% 상승했다면 상대강도는 음수입니다. 반대로 벤치마크가 4% 하락할 때 펀드가 1% 하락했다면 상대강도는 양수입니다. 순위 산정의 기준이 되는 값은 초과 수익률(excess return)로, 특정 기간 동안 펀드의 수익률에서 동일 기간 벤치마크 수익률을 뺀 값입니다.

이 과정에는 두 가지 선택 사항이 있습니다. 룩백(lookback) 기간은 순위 산정에 반영할 과거 데이터의 범위를 결정하며, 20거래일은 대략 한 달의 거래 기간에 해당합니다. 보유 기간(holding period)은 승자 종목을 얼마나 오래 보유할지를 결정합니다. 두 기간이 동일하면 한 달에 한 번 특정 날짜에 전체 포트폴리오가 교체되는데, 이때 결과는 전략을 시작한 날짜에 따라 크게 달라집니다. 중첩 슬리브는 이러한 의존성을 제거합니다. 동일한 규칙을 며칠 간격으로 엇갈리게 여러 개 실행하고 각각 자본의 일부를 할당하면, 단일 시작 날짜에 베팅하는 대신 운용 자산이 롤링 방식으로 혼합되어 유지됩니다.

아래 패널은 광범위한 시장, 섹터, 해외 및 금속 ETF로 구성된 9개 펀드 유니버스를 대상으로, 최근 21일간의 종가를 사용하여 정확히 20거래일 수익률을 산출한 순위 단계입니다.

조회9개 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개의 행 모두에서 두 막대 사이의 거리는 동일한 수치를 나타냅니다.

알파 귀속 분석의 실제 측정 대상

알파 귀속 분석은 회귀 분석입니다. 전략의 수익률 시계열을 하나 이상의 벤치마크 수익률 시계열과 나란히 놓고 산점도에 직선을 긋는 방식입니다. 각 벤치마크의 기울기는 익스포저를 의미하며, 이는 전략이 해당 자산과 얼마나 동일하게 움직이는지를 나타냅니다. 절편은 이러한 익스포저에 대한 보상을 제외하고 남은 부분이며, 이것이 바로 알파라고 불리는 값입니다. 결정계수(R squared)는 세 번째 지표로, 벤치마크 시계열이 전략의 변동성을 얼마나 설명하는지를 나타내며 0%(벤치마크가 아무것도 설명하지 못함)에서 100%(전략이 벤치마크와 상수로 구성됨) 사이의 값을 가집니다.

회전 전략(rotation rule)을 단일 광범위 시장 지수와 회귀 분석하면 대개 독창적인 전략처럼 보입니다. 2026년 8월에 오픈 소스로 공개되어 결정론적 합성 가격으로 실행된 동일한 형태의 규칙에 대한 귀속 분석에서, 단일 벤치마크 적합도의 R squared는 14.0%였습니다. 전략 변동성의 6/7이 설명되지 않은 채로 남았고, 이는 지면상 독창성으로 해석되었습니다. 전략이 실제로 보유하고 있던 익스포저(모멘텀 편향 및 두 종목 보유에 따른 섹터 집중도)를 대리 변수로 교체하자 R squared는 63.6%로 상승했고, 절편은 연간 0.38%로 줄어들었습니다. 동일한 수익률 시계열과 동일한 코드였지만, 비교 대상이 달라지자 전략이 잘 알려진 익스포저를 빌려 쓰고 있었다는 사실이 드러난 것입니다.

해당 연구는 고정된 시드값에서 자체 가격을 생성하므로, 데이터 공급자가 없는 독자도 연구에 명시된 모든 수치를 재현할 수 있습니다. 또한 이 글을 쓰는 시점 기준으로 프로젝트가 시작된 지 며칠 되지 않았기에, 이러한 초기 프로젝트는 매주 변화합니다. 수치를 인용하기 전에 실행한 정확한 커밋(commit)이나 태그된 릴리스를 기록해 두십시오. 팩터 대리 변수나 샘플 기간이 변경될 때마다 귀속 분석 수치도 변하기 때문입니다. 재현 가능한 백테스트 도구에 관한 당사의 노트에서도 동일한 습관을 다루고 있습니다.

이 교훈은 팩터 모델 용어를 사용하지 않아도 유효합니다. 회귀 분석의 대상이 되는 벤치마크가 알파의 크기를 결정하므로, 절편을 확인하기 전에 벤치마크를 선택하고 왜 그것이 적절한 비교 대상인지 기록해 두어야 합니다. 결과를 확인한 뒤에 선택한 비교 대상은 결국 비교 대상 선택 자체를 측정하는 것에 불과합니다.

ETF의 어느 정도가 이미 벤치마크인가

문제를 파악하기 위해 반드시 복잡한 팩터 모델이 필요한 것은 아닙니다. 한 펀드의 일일 수익률을 동일 기간 SPY의 일일 수익률과 나란히 놓고 상관계수를 제곱해 보십시오. 이것이 단일 광범위 시장 벤치마크가 이미 설명하고 있는 펀드의 일일 변동성 비중입니다.

조회최근 2년, 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

지난 2년간 QQQ는 이 유니버스에서 가장 높은 단일 벤치마크 R squared인 90.3%을 기록했고, GLD은 가장 낮은 3.1%를 기록했습니다. 이 차트의 상위권 종목들로 구성된 슬리브는 사실상 벤치마크를 다른 가중치로 재구성한 것에 불과하며, 벤치마크 외의 다른 지표를 기준으로 측정된 절편은 그 차이를 조용히 흡수하게 됩니다. 하위권은 회전 전략이 광범위 시장에 포함되지 않은 수익원을 추가할 수 있는 영역이지만, 동시에 두 종목으로 구성된 포트폴리오가 분산 투자된 포트폴리오와 거리가 멀어지는 지점이기도 합니다.

주도 펀드는 얼마나 자주 바뀌는가

순위 산정 규칙은 펀드 간의 성과 차이가 있을 때만 의미가 있습니다. 아래 패널은 각 펀드의 월간 수익률을 동일 기간 SPY 수익률과 비교하여 매달 가장 강한 슬리브와 가장 약한 슬리브를 유지합니다.

조회월별 SPY 대비 가장 강세 및 약세인 슬리브(sleeve)
모든 수치 뒤에 숨겨진 정확한 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-07XLK가 선두를 달리며 시작되었습니다. 가장 최근 완료된 달인 2026-07에는 가장 강한 슬리브가 XLE로 SPY 대비 12.59 포인트였고, 가장 약한 슬리브는 -5.7를 기록했습니다. 두 선 사이의 거리는 순위 산정 규칙이 활용하는 분산(dispersion)입니다. 두 선이 좁혀지는 달은 순위 산정이 거의 임의적인 달이며, 모든 순위 산정 시점에 거래하는 규칙은 그 모든 달에 회전율 비용을 지불하게 됩니다. 월간 경계는 주의가 필요하며, 월간 수익률 측정 방법에서 관련 관례를 상세히 다룹니다.

두 종목 집중이 진짜 위험인가?

변동성은 이 질문에 대한 가장 명확한 답변입니다. 이 패널은 지난 2년간 각 펀드의 일일 수익률 변동성을 연율화하고 SPY를 참조 막대로 표시하며, 각 펀드가 기록한 최악의 단일 거래일 성과를 함께 보여줍니다.

조회최근 2년, 연율화 변동성 및 최악의 일일 수익률
모든 수치 뒤에 숨겨진 정확한 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%로 변동성이 가장 작았습니다. 한 번에 두 종목을 보유하는 규칙은 이 범위 내에서 종목을 선택하며, 변동성이 큰 종목에서 발생하는 더 깊은 낙폭은 기술이 아닌 익스포저로 귀속 분석에 반영됩니다. 저변동성 이상 현상 노트에서 동일 차트의 하위권에 대한 장기 기록을 다룹니다.

자체 회전 백테스트를 위한 네 가지 점검 사항

  1. 당일 신호 누출(Same-day signal leakage). 20거래일 순위가 장 마감 시점에 계산되고 매수 체결도 같은 종가에 이루어진다면, 해당 테스트는 거래 시점에 보유하지 않았던 정보를 이용한 것입니다. t 시점까지의 데이터로 순위를 매기고 t+1 시점에 체결하여 두 버전의 차이를 비교하십시오. 그 차이가 정보 누출의 크기입니다. 미래 예측 편향(Look-ahead bias)에서 그 차이가 얼마나 커질 수 있는지 확인할 수 있습니다.
  2. 펀드 리스트의 생존 편향. 현재 존재하는 펀드들로만 구성된 유니버스는 과거에 청산되거나 합병된 모든 펀드를 제외하며, 청산은 대개 성과가 가장 저조한 상품에서 발생합니다. 생존 편향(Survivorship bias)은 주식 리스트와 마찬가지로 ETF 리스트에도 동일하게 적용됩니다.
  3. 사전 벤치마크 선택. 첫 회귀 분석을 수행하기 전에 비교 대상 세트를 작성하고, 규칙이 보유할 것으로 예상되는 익스포저에 대한 대리 변수를 포함하십시오. 절편은 사전에 약속된 벤치마크를 기준으로 할 때만 의미가 있습니다.
  4. 집중도 직접 측정. 상위 두 종목을 보유하는 순위 산정, 상위 네 종목 보유, 그리고 전체 유니버스를 동일 가중치로 보유하는 방식을 각각 실행해 보십시오. 보고된 우위의 대부분이 두 종목 버전에서 나타난다면, 집중도가 곧 포지션이며 순위 산정은 어떤 집중도를 취할지 선택하는 수단일 뿐입니다.

FAQ

ETF 상대강도란 무엇인가?

상대강도는 특정 룩백 기간 동안 펀드의 수익률에서 벤치마크 수익률을 뺀 값입니다. 이를 기준으로 순위를 매기면 펀드의 실제 수익률이 양수인지 여부와 관계없이 벤치마크를 앞선 펀드가 상위에 위치하게 됩니다.

알파 귀속 분석이란 무엇인가?

전략의 수익률을 하나 이상의 벤치마크 수익률 시계열에 대해 회귀 분석하는 것입니다. 기울기는 전략이 보유한 익스포저를 측정하며, 절편은 해당 익스포저를 고려하고 남은 수익률입니다. 이 절편이 보통 알파로 보고되는 수치입니다.

높은 R squared는 전략이 나쁘다는 뜻인가?

아닙니다. 높은 R squared는 벤치마크가 전략 변동성의 대부분을 설명한다는 뜻이며, 이는 전략의 품질보다는 중복성에 대한 설명입니다. 변하는 것은 절편입니다. 회귀 분석이 식별할 수 있는 익스포저는 더 이상 독창성으로 간주되지 않기 때문입니다.

왜 단일 포트폴리오 대신 중첩 슬리브를 보유하는가?

20거래일마다 리밸런싱하는 단일 포트폴리오는 결과가 시작 날짜에 의존하게 만듭니다. 동일한 규칙을 여러 개 엇갈리게 실행하면 이러한 선택의 영향을 평균화하고, 특정 날짜에 회전율을 집중시키는 대신 한 달 동안 분산시킬 수 있습니다.


여기에 포함된 모든 패널은 이를 생성한 SQL과 함께 제공됩니다. 하나를 열어 자신의 펀드 리스트로 교체하고 Strasmore 터미널에서 순위가 변하는 모습을 확인해 보십시오.

#etfs#momentum#quant#factor models#attribution