Í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

Simplificando análises de dados manuais do Excel usando o Python

Tratar e analisar dados no Excel pode ser um verdadeiro caos, mesmo que você precise fazer coisas simples como cruzar duas tabelas de dados. Uma solução melhor é o uso de scripts em Python, que possibilitam a automação de tarefas repetitivas e manuais. Neste artigo mostramos um exemplo simples, comparando o Excel versus Python.

Como automatizar o tratamento de dados feito no Excel usando o Python?

Segundo a pesquisa “State of Data Science”, profissionais de dados gastam 3 horas/dia (38% do tempo) apenas preparando os dados, antes mesmo de analisá-los. Neste artigo advogamos que este gasto de tempo pode ser drasticamente reduzido ao utilizar ferramentas open source, como Pandas e Python, para automatizar tarefas repetitivas que costumam ser feitas em Excel.

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.