Índice de Sharpe

Um forma de medir o desempenho ou performance de um ativo, normalmente um fundo de investimento, ou mesmo uma carteira de investimento se dá através do Índice de Sharpe. O índice tem como propósito medir o desempenho do ativo por unidade de risco, ou seja, a cada 1 ponto de risco, quanto é adicionado de retorno do ativo. No post de hoje iremos trabalhar em como calcular o índice de Sharpe no R.

O Índice de Sharpe mede os retornos excedentes por unidade de risco, tomando aqui como medida de risco o *desvio padrão*. A fórmula do IS pode ser dada como:

Ou seja, a diferença entre o retorno do ativo e o retorno do ativo livre de risco, dividido pelo desvio padrão do respectivo ativo.

library(quantmod)
library(tidyquant)
library(timetk)
library(GetBCBData)
library(tidyverse)
library(xts)

Coletamos os preços dos ativos e calculamos o retorno do nosso portfólio.


# Define os ativos que irão ser coletados

tickers <- c("PETR4.SA", "ITUB4.SA", "ABEV3.SA", "JBSS3.SA")

# Define a data de início da coleta

start <- as.Date("2016-12-01")

# Realiza a coleta dos preços diários

prices <- getSymbols(tickers,
auto.assign = TRUE,
warnings = FALSE,
from = start,
src = "yahoo") %>%
map(~Cl(get(.))) %>%
reduce(merge) %>%
`colnames<-`(tickers)

# Transfroma os preços diários em mensais

prices_monthly <- to.monthly(prices,
indexAt = "lastof",
OHLC = FALSE)

# Calcula os retornos mensais

asset_returns <- Return.calculate(prices_monthly,
method = "log") %>%
na.omit()

&nbsp;

# Define os pesos de cada ativo

w <- c(0.50, 0.27, 0.13, 0.10)

# Calcula o retorno do portfolio baseado no peso de cada ativo

portfolio_return <- Return.portfolio(asset_returns,
weights = w) %>%
`colnames<-`("port_returns")

 

Podemos então calcular o índice de Sharpe. Para fins didáticos, iremos utilizar a taxa SELIC anual de 9,15%, mensurando o IS no ano de 2021. Como os dados estão mensais, devemos transformar a taxa selic em mensal.

rf = 9.15/100 # Define a taxa livre de risco

# Filtra os retornos para o ano de 2021

portfolio_return_2021 <- portfolio_return["2021"]

# Calcula o índice de Sharpe

SharpeRatio(R = portfolio_return_2021,
Rf = rf/12,
FUN = "StdDev")

É possível também que seja criado o Índice de Sharpe móvel, de forma que possamos acompanhar suas mudanças ao longo do tempo.

Para isso, utilizaremos as funções do pacote {tidyquant}.


# Cria a função do IS

sharpe_tq_roll <- function(df){
SharpeRatio(df,
Rf = rf,
FUN = "StdDev")
}

# Transforma de xts para tibble

portfolio_return_2021_tbl <- portfolio_return_2021 %>%
tk_tbl(preserve_index = TRUE,
rename_index = "date")

# Calcula o Índice de Sharpe móvel

rolling_sharpe_tq <-
portfolio_return_2021_tbl %>%
tq_mutate(
select = port_returns,
mutate_fun = rollapply,
width = 2,
FUN = sharpe_tq_roll,
col_rename = "sharpe") %>%
na.omit()

Por fim, visualizamos  o IS móvel.


rolling_sharpe_tq %>%
ggplot(aes(x = date, y = sharpe))+
geom_line(size = .8, color = "darkblue")+
labs(title = "Índice de Sharpe Móvel do Portfólio",
subtitle = "Ano de 2021, SELIC a 9,15 a.a%",
x = "",
y = "",
caption = "Elaborado por analisemacro.com.br")+
theme_minimal()

 

________________________

(*) Para entender mais sobre Mercado Financeiro e aprender como realizar a coleta, tratamento e visualização de dados financeiros, confira nosso curso de R para o Mercado Financeiro.
________________________

 

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que é um Vector Database e como criar um com LangChain

Nesta postagem, mostramos como construir um pipeline simples de RAG (Retrieval-Augmented Generation) usando o LangChain, o modelo Gemini 2.0 Flash e o Vector Database Chroma. Utilizamos como exemplo o Relatório de Inflação de junho de 2025 do Banco Central do Brasil. O fluxo envolve o download e leitura do PDF, divisão do texto com RecursiveCharacterTextSplitter, geração de embeddings com Gemini, armazenamento vetorial com Chroma e busca semântica para responder perguntas com base no conteúdo do relatório. É uma aplicação prática e didática para economistas que desejam integrar IA ao seu fluxo de análise.

Automatizando a Construção de Códigos em Python com LangGraph

Neste post, mostramos como construir um agente de código em Python utilizando LangGraph, LangChain e Gemini. A proposta é construir um protótipo para automatizar o ciclo completo de geração, execução e correção de código com o uso de LLMs, organizando o processo em um grafo de estados.

Análise de Dados com REPL Tool e LLM usando LangGraph

Neste post, vamos mostrar como você pode criar um agente que interpreta e executa código Python em tempo real, utilizando o REPL-Tool e um LLM da família Gemini. Começamos com um exemplo genérico e, em seguida, aplicamos a mesma estrutura à análise econômica de uma série histórica do IPCA.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.