Taxa livre de risco no índice de Sharpe
Entenda por que a taxa livre de risco varia, como alinhar o yield do título à frequência dos retornos e quanto um número fixo pode distorcer o índice.
A taxa livre de risco no índice de Sharpe é o retorno que poderia ter sido obtido no mesmo período sem assumir o risco que está sendo avaliado. É uma série, com uma observação por período, expressa na moeda dos retornos. A frequência deve ser compatível com a frequência dos retornos, e a taxa deve ser subtraída período a período. Faça a anualização uma única vez, no fim.
É justamente o descumprimento desse procedimento que faz a maioria dos índices de Sharpe publicados apresentar problemas. Usar um único número no início de um histórico de retornos de vinte anos, normalmente o que um Treasury bill paga nesta semana, aplica a 2009 o mesmo obstáculo que a 2024. Nosso guia sobre o índice de Sharpe explica o que o índice mede. Esta página trata do dado de entrada que quase ninguém documenta.
A taxa livre de risco não é constante
Um índice de Sharpe calculado para vinte anos abrange um histórico de taxas. O painel abaixo usa o Treasury bill de três meses e consolida cada ano-calendário em uma média e no intervalo ao redor dela.
O SQL exato por trás de cada número
SELECT
toString(toYear(date)) AS year,
round(avg(toFloat64(yield_3_month)), 2) AS avg_bill_pct,
round(min(toFloat64(yield_3_month)), 2) AS low_bill_pct,
round(max(toFloat64(yield_3_month)), 2) AS high_bill_pct
FROM global_markets.treasury_yields
WHERE date >= '2005-01-01'
AND yield_3_month IS NOT NULL
GROUP BY year
ORDER BY yearA média anual ficou em 3.22% em 2005 e em 3.74% em 2026, ao longo de 22 anos-calendário. O caminho entre essas duas leituras é o que importa. A linha cai até o piso, permanece ali durante a maior parte de uma década e depois volta a subir. As colunas de mínima e máxima mostram quanto a taxa variou dentro de cada ano. Por isso, até um índice de Sharpe de um ano exige uma série compatível, e não uma única cotação.
Qual taxa livre de risco deve ser usada no índice de Sharpe
Quatro características determinam a escolha.
- Vencimento curto. A taxa precisa ser praticamente certa durante um período de medição. Um bill de três meses serve para uma análise mensal. Uma Treasury note de dez anos não serve, porque seu preço varia durante o mês medido.
- A moeda dos próprios retornos. Uma estratégia denominada em euros deve ser avaliada contra um bill em euros.
- A frequência dos próprios retornos. Os rendimentos dos bills são cotados como taxas anuais, e uma cotação anual precisa ser convertida antes de ser aplicada a um retorno mensal.
- Definições comparáveis de retorno nos dois lados. O rendimento de um bill representa todo o seu retorno. Portanto, um retorno de estratégia que exclui dividendos não está sendo medido na mesma base. Retorno de preço versus retorno total explica essa diferença.
A conversão mencionada no terceiro ponto segue duas convenções usadas no mercado. A divisão simples divide a cotação anual por doze. A capitalização calcula a raiz décima segunda de um mais a taxa anual. Para um bill hipotético a 5%, esses métodos produzem 0,4167% e 0,4074% no mês. A diferença é de aproximadamente um ponto-base e se repete em todos os meses da amostra. Os painéis desta página usam capitalização. Se os juros do bill forem considerados um retorno de investimento, e não uma taxa de referência, rendimento de dividendos versus rendimentos de Treasuries e onde manter caixa ocioso tratam do tema.
Como construir uma série mensal de retornos excedentes
A construção é mecânica: use o fechamento do último dia de cada mês, calcule o retorno do mês, converta a cotação do bill daquele mês em uma taxa mensal e depois faça a subtração. O resultado é uma série de retornos excedentes, com um número por mês. Como os retornos mensais são calculados detalha a etapa do retorno.
O SQL exato por trás de cada número
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2019-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2019-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
)
SELECT
toString(cur.m) AS month,
round(100 * (cur.month_close / prv.prev_close - 1), 2) AS spy_ret_pct,
round(100 * rf.rf_month, 3) AS rf_pct,
round(100 * (cur.month_close / prv.prev_close - 1 - rf.rf_month), 2) AS excess_pct
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
ORDER BY cur.mSão fechamentos do SPY, portanto a coluna de retorno representa apenas o retorno de preço e exclui dividendos. A coluna livre de risco começa em 0.128% no primeiro mês exibido e termina em 0.359%. Perto de meses de ações que oscilam vários pontos percentuais, a faixa da taxa livre de risco parece apenas um arredondamento. Ao longo de 60 meses de subtração, porém, ela representa toda a diferença entre dois índices de Sharpe que afirmam medir a mesma coisa.
Subtraia primeiro e anualize depois
Depois que as séries são alinhadas, há duas ordens possíveis de cálculo, e elas produzem resultados diferentes. Primeiro o excedente: subtraia a taxa mensal do retorno mensal e depois anualize a série de retornos excedentes. Primeiro a anualização: capitalize os retornos até obter um valor anual, capitalize o bill até obter um valor anual e então subtraia um do outro.
O SQL exato por trás de cada número
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2004-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2004-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
),
excess AS
(
SELECT
cur.m AS m,
cur.month_close / prv.prev_close - 1 AS ret,
rf.rf_month AS rf_month,
cur.month_close / prv.prev_close - 1 - rf.rf_month AS exc
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
)
SELECT
concat(toString(intDiv(count(), 12)), '-year') AS horizon,
round(100 * (exp(12 * avg(log(1 + exc))) - 1), 2) AS excess_first_pct,
round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
- (exp(12 * avg(log(1 + rf_month))) - 1)), 2) AS annualize_first_pct,
round(100 * ((exp(12 * avg(log(1 + ret))) - 1)
- (exp(12 * avg(log(1 + rf_month))) - 1)
- (exp(12 * avg(log(1 + exc))) - 1)), 3) AS gap_pct
FROM excess
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY yearsNo período de 20-year, o resultado com o excedente calculado primeiro é 6.49% ao ano, contra 6.59% na outra ordem. A diferença é de 0.099 pontos percentuais. No período de 1-year, os mesmos dois cálculos ficam 0.814 pontos apartados. Em todos os períodos mostrados aqui, o valor anualizado primeiro aparece acima do valor com o excedente calculado primeiro. A diferença vem de um termo cruzado: capitalizar uma série de retornos até obter um número anual inclui o ganho da taxa do bill sobre o próprio prêmio de risco. Subtrair depois um bill anualizado não remove essa parcela. O termo cruzado cresce com o produto dos dois números anualizados, portanto é maior quando os bills pagam mais.
A anualização também tem duas abordagens. A anualização aritmética multiplica o excedente mensal médio por doze. A anualização geométrica capitaliza os períodos e calcula a taxa anual constante que reproduz o resultado acumulado. Considere uma sequência hipotética de dois períodos, com +50% seguido de -33,3%, que termina exatamente no ponto de partida. A média aritmética é de +8,35% por período, enquanto a média geométrica é zero. Os painéis desta página usam capitalização. Vale manter uma observação: na anualização aritmética, doze vezes o retorno médio menos doze vezes a taxa média do bill é algebricamente igual a doze vezes o excedente médio. Nessa convenção, a ordem da subtração não altera o numerador. O denominador continua mudando, porque o desvio-padrão dos retornos excedentes se diferencia do desvio-padrão dos retornos brutos quando a própria taxa varia.
O custo de uma taxa fixa para o resultado
O atalho mais comum é usar o rendimento atual do bill e subtraí-lo de todos os períodos do histórico. O painel abaixo calcula o índice de Sharpe das duas formas em cinco períodos que terminam na mesma data: uma vez contra a série mensal compatível e outra contra o rendimento do bill vigente no fim de cada período.
O SQL exato por trás de cada número
WITH
monthly_px AS
(
SELECT
toStartOfMonth(date) AS m,
argMax(toFloat64(close), date) AS month_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2004-12-01'
AND date < '2025-01-01'
GROUP BY m
),
prior_px AS
(
SELECT
addMonths(m, 1) AS m,
month_close AS prev_close
FROM monthly_px
),
monthly_rf AS
(
SELECT
toStartOfMonth(date) AS m,
pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_month
FROM global_markets.treasury_yields
WHERE date >= '2004-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
GROUP BY m
),
excess AS
(
SELECT
cur.m AS m,
cur.month_close / prv.prev_close - 1 AS ret,
rf.rf_month AS rf_month
FROM monthly_px AS cur
INNER JOIN prior_px AS prv ON prv.m = cur.m
INNER JOIN monthly_rf AS rf ON rf.m = cur.m
)
SELECT
concat(toString(intDiv(count(), 12)), '-year') AS horizon,
round(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month), 2) AS sharpe_matched_rf,
round(sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed), 2) AS sharpe_fixed_rf,
round(abs(sqrt(12) * avg(ret - rf_month) / stddevSamp(ret - rf_month)
- sqrt(12) * avg(ret - rf_fixed) / stddevSamp(ret - rf_fixed)), 2) AS abs_gap
FROM excess
CROSS JOIN
(
SELECT pow(1 + avg(toFloat64(yield_3_month)) / 100, 1.0 / 12) - 1 AS rf_fixed
FROM global_markets.treasury_yields
WHERE date >= '2024-12-01'
AND date < '2025-01-01'
AND yield_3_month IS NOT NULL
) AS fixed_rate
CROSS JOIN (SELECT arrayJoin([1, 3, 5, 10, 20]) AS years) AS hz
WHERE m >= subtractYears(toDate('2025-01-01'), years)
GROUP BY years
ORDER BY yearsNo período de 1-year, as duas leituras ficam 0.07 apartadas. Em doze meses, a taxa fixa tem pouco espaço para se afastar da própria média do período. No período de 20-year, a diferença chega a 0.18: 0.49 na série compatível contra 0.32 na taxa fixa. O erro acompanha a distância entre a taxa escolhida e a taxa média que de fato prevaleceu. Essa distância pode aumentar à medida que o período se alonga. Tudo que vier depois incorpora esse erro, e definição de meta de volatilidade e dimensionamento de posições usa exatamente esse tipo de dado de entrada.
A armadilha da moeda
Uma estratégia que gera retorno em uma moeda e é avaliada contra o bill de outra moeda produz um número que tem pouco significado em qualquer uma delas. Calcule o retorno excedente dentro de uma única moeda: retornos em euros contra um bill em euros, retornos em ienes contra um bill em ienes. Estratégias com hedge cambial trazem uma segunda armadilha. Um hedge cambial é precificado com base no forward, e os pontos a termo ficam próximos do diferencial de juros entre as duas moedas. Isso já incorpora parte da taxa doméstica ao retorno estrangeiro com hedge. Subtrair também o bill estrangeiro aplica a mesma taxa duas vezes. Identifique a moeda ao lado da taxa para eliminar a ambiguidade.
Publique a taxa junto com o índice
Um índice de Sharpe publicado sem a fonte e a frequência da taxa livre de risco não pode ser verificado. Duas mesas podem calcular 0,8 e 1,1 a partir da mesma série de retornos e ambas estarem corretas, usando séries de taxas e convenções de conversão diferentes. Quatro informações devem acompanhar o número: o instrumento de onde veio a taxa, sua frequência, a convenção de conversão e o período exato. Essa é a diferença entre um número que o leitor consegue auditar e um número que precisa ser aceito sem verificação.
Notas sobre os dados e reprodutibilidade
A série de taxas usada em todos os painéis é a do Treasury bill de três meses, obtida da curva diária de rendimentos do Treasury, calculada como média dentro de cada mês-calendário e convertida em taxa mensal pela raiz décima segunda de um mais a cotação anual. Os retornos são os fechamentos do SPY no fim de cada mês, somente retorno de preço, com dividendos excluídos. Os índices usam o desvio-padrão amostral dos retornos mensais excedentes e a raiz quadrada de doze para a anualização. Os dois últimos painéis usam períodos que terminam na mesma data, e a coluna de taxa fixa usa a cotação média do bill no mês final de cada período. Todos os números apresentados no texto acima vêm do painel ao lado.
Perguntas frequentes
Qual taxa livre de risco devo usar no índice de Sharpe?
Um bill governamental de curto prazo na mesma moeda dos retornos, convertido para a mesma frequência dos retornos. Para retornos mensais em USD, isso significa o Treasury bill de um ou três meses. Vencimentos mais longos carregam risco de preço durante o período de medição, o que os desqualifica como componente livre de risco.
Posso subtrair o rendimento atual do Treasury bill de um histórico longo de retornos?
Esse é o erro mais comum nos índices de Sharpe publicados. No período de 20-year acima, uma taxa fixa vigente no fim do período e a série mensal compatível produzem leituras 0.18 apartadas sobre exatamente os mesmos retornos.
Devo anualizar a taxa livre de risco antes de subtraí-la?
Não. Converta a cotação anual do bill para a frequência do retorno, faça a subtração período a período e anualize a série de retornos excedentes uma única vez, no fim. Anualizar cada componente separadamente e subtrair depois deixa um termo cruzado no resultado.
Quanto a taxa livre de risco altera um índice de Sharpe?
Aproximadamente a variação da taxa dividida pela volatilidade anualizada. Em uma estratégia hipotética com volatilidade anualizada de 15%, uma diferença de 4% na taxa assumida altera o índice em cerca de 0,27. Essa é a distância entre um histórico comum e um histórico celebrado.
Qual é a diferença entre anualização aritmética e geométrica?
A anualização aritmética multiplica o excedente médio por período pelo número de períodos em um ano. A geométrica capitaliza os períodos até chegar à taxa constante que reproduz o resultado acumulado. Por período, o valor geométrico fica no máximo igual ao aritmético, e a diferença entre eles aumenta com a volatilidade.
Cada painel desta página traz o SQL que o produziu, de modo que a série de taxas e o período ficam visíveis. Para aplicar a mesma construção a outro ticker ou a outro intervalo histórico, solicite isso em inglês simples no terminal da Strasmore.