Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Como calcular força relativa de ETFs e alpha attribution

Entenda como a força relativa de ETFs classifica fundos pelo retorno excedente frente ao SPY. Analise o impacto do alpha attribution no intercepto ao ajustar o benchmark.

Como funciona a regra de força relativa de ETFs

A força relativa é uma comparação, não um retorno. Um fundo com alta de 3% em 20 sessões, enquanto o benchmark subiu 5%, apresenta força relativa negativa. Um fundo com queda de 1%, enquanto o benchmark caiu 4%, apresenta força relativa positiva. O número utilizado para o ranking é o retorno excedente: a variação percentual do fundo em uma janela fixa, menos a variação percentual do benchmark na mesma janela, medida sessão a sessão.

Duas escolhas fundamentam esse processo. O período de observação (lookback) define quanto histórico o ranking considera, sendo 20 sessões aproximadamente um mês comercial. O período de manutenção define por quanto tempo um ativo vencedor permanece na carteira. Quando ambos são iguais, todo o portfólio é rotacionado em uma única data por mês, e o resultado depende inteiramente da data de início escolhida. O uso de carteiras sobrepostas (overlapping sleeves) elimina essa dependência: executa-se várias cópias da mesma regra, defasadas por algumas sessões, alocando uma fração do capital em cada uma, de modo que a carteira consolidada mantenha uma mistura contínua em vez de uma aposta baseada em uma única data de início.

O painel abaixo executa a etapa de ranking em um universo de nove ETFs de mercado amplo, setores, internacional e metais, utilizando os últimos 21 fechamentos diários para que o retorno abranja exatamente 20 sessões.

QueryRetorno de 20 sessões vs. SPY em um universo de nove ETFs
O SQL exato por trás de cada número
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

No topo do ranking, GLD retornou 8.69% nessas 20 sessões, 6.34 pontos em relação ao SPY. Na base, XLU ficou em -5.81 pontos. Cada linha apresenta a ideia completa em duas barras: o desempenho do fundo e o que resta após subtrair o movimento do SPY na mesma janela. A distância entre as duas barras é o mesmo número em todas as 9 linhas, uma vez que cada fundo é medido contra um único benchmark em uma única janela.

O que a atribuição de alpha realmente mede

A atribuição de alpha é uma regressão. Alinha-se a série de retornos da estratégia contra uma ou mais séries de retornos de benchmarks e ajusta-se uma linha reta através da dispersão. A inclinação (slope) em cada benchmark representa uma exposição: o quanto a estratégia se move em conjunto com aquele ativo. O intercepto é o que resta após essas exposições serem remuneradas, e esse resíduo é o que se denomina alpha. O R-quadrado é o terceiro número, representando a parcela da variação da estratégia explicada pelas séries de benchmark, variando de 0% (os benchmarks não explicam nada) a 100% (a estratégia é composta pelos benchmarks mais uma constante).

Ao realizar a regressão de uma regra de rotação contra uma única série de mercado amplo, ela geralmente parece original. Na atribuição publicada de uma regra com esse desenho, disponibilizada em código aberto em agosto de 2026 e executada sobre preços sintéticos determinísticos, esse ajuste de benchmark único produziu um R-quadrado de 14,0%. Seis sétimos da variação da estratégia permaneceram sem explicação, o que é interpretado como originalidade. Ao substituir por proxies das exposições que a regra realmente detinha — um viés de momentum e a concentração setorial inerente a uma carteira de dois ativos —, o R-quadrado subiu para 63,6% e o intercepto caiu para 0,38% ao ano. A mesma série de retornos e o mesmo código. Um conjunto de comparação diferente. A estratégia estava apenas alugando exposições bem conhecidas.

Esse estudo gera seus próprios preços a partir de uma semente fixa, permitindo que um leitor sem acesso a um fornecedor de dados reproduza cada número apresentado. O projeto tem poucos dias no momento desta redação, e um trabalho tão recente muda semanalmente. Identifique o commit exato ou a versão marcada que você executou antes de citar um número: os valores de atribuição mudam sempre que as proxies de fatores ou a janela de amostra são alteradas. Nossa nota sobre ferramentas de backtest reproduzíveis aborda o mesmo hábito sob a ótica oposta.

A lição permanece válida mesmo sem o vocabulário de modelos de fatores. O benchmark contra o qual você faz a regressão determina quanto alpha você parece ter; portanto, escolha-o antes de olhar para o intercepto e documente por que ele é a comparação correta. Um conjunto de comparação escolhido após a visualização do resultado mede apenas a escolha da comparação.

Quanto de um ETF já é o benchmark

Não é necessário um modelo de fatores completo para antecipar o problema. Pegue os retornos diários de um fundo, alinhe-os contra os retornos diários do SPY nas mesmas sessões e eleve a correlação ao quadrado. Isso fornece a parcela da variação diária do fundo que um único benchmark de mercado amplo já explica.

QueryParcela da variação diária explicada pelo SPY, últimos dois anos
O SQL exato por trás de cada número
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

Nos últimos dois anos, QQQ apresentou o maior R-quadrado de benchmark único neste universo, em 90.3%, e GLD o menor, em 3.1%. Uma carteira montada a partir da extremidade superior desse gráfico é quase uma reiteração do benchmark sob uma ponderação diferente, e qualquer intercepto medido contra algo que não seja o benchmark absorverá silenciosamente essa diferença. A extremidade inferior é onde uma rotação pode adicionar um fluxo de retorno que o mercado amplo ainda não contém, e é também onde uma carteira de dois ativos deixa de se assemelhar a um portfólio diversificado.

Com que frequência o fundo líder muda

Uma regra de ranking só tem algo a classificar quando os fundos divergem. O painel abaixo mede o retorno mensal de cada fundo contra o do SPY no mesmo mês, mantendo a carteira mais forte e a mais fraca para cada período.

QueryMelhores e piores sleeves vs. SPY, por mês calendário
O SQL exato por trás de cada número
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

Ao longo de 13 meses completos, a série começa em 2025-07 com XLK na liderança. No mês completo mais recente, 2026-07, a carteira mais forte foi XLE, com 12.59 pontos contra o SPY, enquanto a mais fraca marcou -5.7. A distância entre as duas linhas é a dispersão da qual uma regra de ranking se alimenta. Meses em que as linhas se aproximam são meses em que a classificação é quase arbitrária, e uma regra que negocia em cada ranking paga custos de giro em todos eles. As viradas de mês exigem atenção especial aqui; como os retornos mensais são medidos detalha as convenções.

A concentração em dois ativos é o risco real?

A volatilidade é a versão mais simples dessa questão. Este painel anualiza a variação do retorno diário de cada fundo nos mesmos dois anos e utiliza o SPY como barra de referência, ao lado da pior sessão individual registrada por cada um.

QueryVolatilidade anualizada e pior sessão única, últimos dois anos
O SQL exato por trás de cada número
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 situou-se na extremidade mais alta, com 27.7% anualizado e uma pior sessão de -6.82%, enquanto XLU ficou na extremidade mais baixa, com 15.8%. Uma regra que mantém dois ativos por vez extrai retornos dessa faixa sem realizar a média entre eles, e os drawdowns mais profundos que acompanham a extremidade alta aparecem na atribuição como exposição, e não como habilidade. A nota sobre a anomalia de baixa volatilidade cobre o histórico de longo prazo na extremidade inferior do mesmo gráfico.

Quatro verificações para o seu próprio backtest de rotação

  1. Vazamento de sinal no mesmo dia. Se o ranking de 20 sessões é calculado com base no fechamento de uma sessão e a execução é registrada nesse mesmo fechamento, o teste negocia com informações que não possuía no momento da operação. Classifique com base nos dados até a sessão t, execute na sessão t mais um e compare as duas versões: a diferença entre elas é o tamanho do vazamento. Viés de antecipação (look-ahead bias) mostra o tamanho dessa diferença.
  2. Sobrevivência na lista de fundos. Um universo montado a partir de fundos que existem hoje exclui todos os fundos que fecharam ou foram fundidos ao longo do caminho, e os fechamentos concentram-se nos produtos com pior desempenho. O viés de sobrevivência aplica-se a uma lista de ETFs exatamente como a uma lista de ações.
  3. Benchmark escolhido antecipadamente. Defina o conjunto de comparação antes da primeira regressão, incluindo proxies para as exposições que você espera que a regra mantenha. O intercepto só tem significado contra um benchmark ao qual você se comprometeu previamente.
  4. Concentração medida diretamente. Execute o mesmo ranking mantendo os dois principais ativos, depois os quatro principais e, em seguida, uma ponderação igual de todo o universo. Se a maior parte da vantagem relatada reside na versão de dois ativos, a concentração é a posição, e o ranking é apenas uma forma de escolher qual concentração adotar.

Perguntas frequentes

O que é força relativa de ETF?

Força relativa é o retorno de um fundo em um período de observação fixo menos o retorno de um benchmark na mesma janela. Um ranking baseado nela coloca no topo os fundos que superaram o benchmark, independentemente de seus retornos nominais serem positivos ou não.

O que é atribuição de alpha?

É uma regressão dos retornos de uma estratégia contra uma ou mais séries de retornos de benchmarks. As inclinações medem as exposições que a estratégia carrega, e o intercepto é o retorno que sobra após essas exposições serem contabilizadas. Esse intercepto é o número geralmente reportado como alpha.

Um R-quadrado alto significa que uma estratégia é ruim?

Não. Um R-quadrado alto significa que os benchmarks explicam a maior parte da variação da estratégia, o que é uma afirmação sobre sobreposição, não sobre qualidade. O que muda é o intercepto: exposições que a regressão agora consegue identificar deixam de ser contadas como originalidade.

Por que manter carteiras sobrepostas em vez de um único portfólio?

Um único portfólio rebalanceado a cada 20 sessões faz com que o resultado dependa da data de início. Executar várias cópias defasadas da mesma regra dilui essa escolha e distribui o giro ao longo do mês, em vez de concentrá-lo em uma única data.


Cada painel aqui é acompanhado pelo SQL que o gerou. Abra um, substitua pela sua própria lista de fundos e execute novamente o ranking no terminal Strasmore para observar a mudança na ordenação.

#etfs#momentum#quant#factor models#attribution