Value At Risk no R

O Value At Risk é uma importante medida de risco no mundo das finanças, que estima a probabilidade de perda monetária em um dado horizonte de tempo. Se tornou famosa por sua simplicidade e pelo fato de estimar as perdas ao longo do tempo dado um nível de confiança. Existem diversas formas de se calcular o VaR, e no post de hoje mostraremos duas formas, a forma gaussiana (normal) e a histórica.

Há diversos métodos para se calcular o VaR, dentre aqueles relativamente mais simples, que podem ser o ponto inicial para aqueles que estão iniciando os estudos e a prática com medidas de risco, até aqueles que possuem uma maior nível de complexidade. Como diversas outras medidas de risco, o cálculo do VaR deve ser feito a partir dos retornos dos ativos, mais comumente os retornos contínuos, por conta de suas medidas estatísticas.

Historical Value at Risk

A primeira forma de calcular o VaR que elencaremos aqui pode ser através do Historical VaR, que calcula a perda monetária com base em um nível de probabilidade dado um quantil do retornos negativos passados. Esse método é útil quando se obtém um nível grande de dados passados, ou seja, por definição é uma analise ex-post da distribuição de retorno.

    $$VaR = q_p$$

Em que $q_p$ é o quantil empírico dos retornos negativos da série.

Gaussian Value At Risk

Outra forma de calcular o VaR é assumindo que os seus retornos são normais, isto é, possui um distribuição Gaussiana

    $$R \sim N(\mu, \sigma)$$

. Deste modo, é necessário estimação da média dos retornos, a variância (e consequentemente o desvio padrão) e os retornos passados da série.

    $$VaR = -\overline{R} - \sqrt{\sigma}\bullet z_c$$

onde z_c é o quantil da distribuição normal

Outros métodos de estimação de VaR levam em consideração as características das séries de retornos, bem como outro meios estimação para a volatilidade e a média.

library(quantmod)
library(PerformanceAnalytics)
library(magrittr)
library(timetk)
library(ggplot2)

Para calcular o VaR devemos ter em mãos os retornos passados dos ativos.

# Retiramos os preços

tickers <- c("PETR4.SA", "VALE3.SA", "LAME3.SA")

env <- new.env()

getSymbols(tickers,
auto.assign = TRUE,
warnings = FALSE,
src = "yahoo",
env = env)

prices_list <- lapply(env, Ad)

prices <- do.call(merge, prices_list)


# Transformamos em log retornos

returns <- Return.calculate(prices, method = "log") %>%
na.omit() %>%
`colnames<-`(tickers)

Com os retornos diários em mãos, podemos utilizar o pacote {PerformanceAnalytics} para auxiliar no cálculo do VaR. A função VaR possibilita calcular a medida em diferentes métodos (no qual utilizaremos somente o historical e gaussian) e também a um dado nível de confiança. É possível também adicionar diferentes parâmetros na função, o que deixaremos para outro momento.

# utilizamos o Portfolio Analytics para calcular o VaR

## Historical

var_historical <- VaR(R = returns, p = 0.99, method = "historical")

var_historical

## Gaussian

var_gaussian <- VaR(R = returns, p = 0.95, method = "gaussian")

var_gaussian

É possível também juntar os retornos das ações em torno de um portfólio dentro da função, possibilitando conferir a contribuição de cada ativo para o risco. Para isso, definimos de forma aleatórias os pesos de cada ação e inserimos nos argumentos da função.


# Definimos os pesos do portfólio

w <- c(0.65, 0.15, 0.20)

# Calcula o VaR com o portfolio

VaR(returns, p = 0.99, weights = w,
portfolio_method = "component")

Uma forma interessante de averiguar os resultados dos diferentes métodos com diversos níveis de confiança, pode ser visto utilizando a função chart.VaRSensitivity.

chart.VaRSensitivity(R = returns$LAME3.SA,
methods = c("GaussianVaR",
"HistoricalVaR"))

Por fim, vemos através de um gráfico de densidade dos retornos onde a possibilidade de perda.


returns_tbl <- tk_tbl(returns,
preserve_index = TRUE,
rename_index = "date")

ggplot(returns_tbl, aes(x = LAME3.SA))+
geom_density(color = "darkblue",
size = .8)+
geom_vline(xintercept = var_historical[,"LAME3.SA"],
linetype = "dotted",
color = "red",
size = 1)+
annotate(geom = "text",
x = var_historical[,"LAME3.SA"],
y = 6,
label = paste("99% Historical VaR"),
color = "red",
angle = 90,
alpha = .8,
vjust = -1.75)+
geom_vline(xintercept = var_gaussian[,"LAME3.SA"],
linetype = "dotted",
color = "black",
size = 1)+
annotate(geom = "text",
x = var_gaussian[,"LAME3.SA"],
y = 6,
label = paste("95% Gaussian VaR"),
color = "black",
angle = 90,
alpha = .8,
vjust = -1)+
theme_minimal()+
labs(title = "Densidade de retornos da LAME3",
subtitle = "99% Historical Var e 95% Gaussian VaR",
caption = "Dados: Yahoo Finance | Elaboração: analisemacro.com.br",
x = "",

y = "")

________________________

(*) Para conhecer mais sobre medidas de risco do mundo das finanças, veja nossos de Cursos de Finanças Quantitativas.

________________________

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Criando um Dashboard de análise de Ações no Python

Um Dashboard é um painel de controle que consolida uma variedade de informações sobre um determinado objeto de estudo em um ou mais painéis. Ele simplifica significativamente o processo de análise de dados, oferecendo uma visão global e fácil de entender. Uma maneira simples de construir um Dashboard para acompanhar uma ação específica é utilizando duas ferramentas: Quarto e Python. Neste post, mostramos o resultado da criação de um Dashboard de Ação.

Analisando séries temporais no Python e esquecendo de vez o Excel

Séries temporais representam uma disciplina extremamente importante em diversas áreas, principalmente na economia e na ciência de dados. Mas, afinal, como lidar com esses dados que se apresentam ao longo do tempo? Neste exercício, demonstraremos como compreender uma série temporal e como o Python se destaca como uma das melhores ferramentas para analisar esse tipo de dado.

Cálculo do Retorno Econômico de uma Política Pública

Como podemos traduzir os efeitos de uma política pública para valores monetários? Essa é uma tarefa árdua que requer algumas premissas, entretanto, com métodos bem definidos, é possível obter estimativas precisas dos ganhos e os gastos de uma política pública.

Neste exercício, demonstramos tal método usando a política hipotética "Mãe Paranense”, um conjunto de ações que visam reduzir a mortalidade materna e infantil no estado. Usamos a linguagem R como ferramenta para analisar os 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.