1 Parte I:

1.1 INTRODUÇÃO

O objetivo deste trabalho foi calcular o VaR utilizando a linguagem R. A carteira proposta foi a de número 18, conforme abaixo:

Nome Quantidade
Ação da GOL 50.000
Ação do Banrisul - 60.000
Ação da Amazon 180
Put sobre USD 10
Futuro de USD 6
Eurodollar 5
NTN-B 120

1.2 PACOTES

Comando que verifica se o pacote está instalado. Se não estiver, instala e carrega.

if(!require(readxl)) {install.packages("readxl")}
require(readxl)
if(!require(derivmkts)) {install.packages("derivmkts")}
require(derivmkts)
if(!require(tidyverse)) {install.packages("tidyverse")}
require(tidyverse)
if(!require(bizdays)) {install.packages("bizdays")}
require(bizdays)
if(!require(eva)) {install.packages("eva")}
require(eva)
if(!require(knitr)) {install.packages("knitr")}
require(knitr)
if(!require(kableExtra)) {install.packages("kableExtra")}
require(kableExtra)


source("cov_ewma.R")
source("cov_ewma_hist.R")
source("bond_fluxo_map.R")

1.3 BASE DE DADOS

BZ_acoes <- read_excel(path = "dados trabalho.xlsx",
                       sheet = "Acoes BZ Fut",
                       range = "B2:AL1924")

US_acoes <- read_excel(path = "dados trabalho.xlsx",
                       sheet = "Acoes US",
                       range = "B2:R1924", col_types = "numeric")

BZ_juros_real <- read_excel(path = "dados trabalho.xlsx",
                           sheet = "Juros Real Brasil",
                           range = "B3:X1925")/100

BZ_juros_nom <- read_excel(path = "dados trabalho.xlsx",
                           sheet = "Juros nominal Brasil",
                           range = "B3:X1925")/100

fx <- read_excel(path = "dados trabalho.xlsx", 
                 sheet = "fx", 
                 range = "B2:H1924")

forex <- read_excel(path = "dados trabalho.xlsx", 
                    sheet = "Forex Rates", 
                    range = "B2:P1925",
                    col_types = "numeric")/100

libor <- read_excel(path = "dados trabalho.xlsx", 
                    sheet = "US Libor", 
                    range = "B3:K1925")/100

di <- read_excel(path = "dados trabalho.xlsx", 
                    sheet = "DI", 
                    range = "B3:q1925")/100

cc <- read_excel(path = "dados trabalho.xlsx", 
                 sheet = "Cupom Cambial", 
                 range = "B3:N1925")/100

feriados <- read_excel("dados trabalho.xlsx", 
                       sheet = "Feriados Brasil",
                       col_types = c("date"))

feriados <- create.calendar(feriados$data, weekdays=c('saturday', 'sunday'), name='feriados')
d0 <- as.Date("2019-05-15")

2 Parte II:

Calcular o VaR dessa carteira em 15/05/2019 (abertura)

2.1 A) Fatores de risco da sua carteira

## fatores de risco de acoes BZ
BZ_acoes_ret <- as.data.frame(BZ_acoes[2:dim(BZ_acoes)[1],]/BZ_acoes[1:(dim(BZ_acoes)[1]-1),]-1)
fatores_acoes <- as.data.frame(BZ_acoes_ret[,c(29,37)]) # GOL e BANCO EST DO RS

ind_gol <- which(str_detect(names(BZ_acoes_ret), "GOL"))
ind_banrisul <- which(str_detect(names(BZ_acoes_ret), "BRSR"))

## fatores de risco de acoes US
fx_ret <- as.data.frame(fx[2:dim(fx)[1],] / fx[1:(dim(fx)[1]-1),] -1) #Retorno do c?mbio USD/BRL

US_acoes_ret <- US_acoes[2:dim(US_acoes)[1],]/US_acoes[1:(dim(US_acoes)[1]-1),]-1 # Retorno de a??es americanas

ind_moeda <- which(names(fx_ret) == "USDBRL Curncy")
ind_amazon <- which(names(US_acoes_ret) == "AMZN US Equity")

fatores_acoes_us <- as.data.frame(cbind(US_acoes_ret[,ind_amazon],
                                        fx_ret[,ind_moeda])) # AMAZON
colnames(fatores_acoes_us) <- c("AMZN US Equity", "USDBRL Curncy")
# fatores de risco de NTNB
BZ_juros_real_dif <- BZ_juros_real[2:dim(BZ_juros_real)[1],] - BZ_juros_real[1:(dim(BZ_juros_real)[1]-1),]
fatores_ntnb <- BZ_juros_real_dif 
  #select("63", "126",  "252",  "378"   ,"504", "630"   ,"756", "882"   ,"1008",    "1134", "1260", "1386", "1512", "1638", "1764", "1890")

# fatores de risco de opcao PUT de USD/BRL
fx_ret <- fx[2:dim(fx)[1],] / fx[1:(dim(fx)[1]-1),]-1
Sigma_hist <- cov_ewma_hist(fx_ret)

ind_opcao <- which(names(fx_ret) == "USDBRL Curncy")

fatores_opcoes <- as.data.frame(cbind(fx_ret[,ind_opcao],                                                                c(0,diff(sqrt(Sigma_hist[ind_opcao,ind_opcao,])))))

colnames(fatores_opcoes) <- c("Opcao Retorno USDBRL Curncy", "Opcao Vol USDBRL Curncy")
# fatores de risco de futuro de USD/BRL
di_dif <- di[2:dim(di)[1],] - di[1:(dim(di)[1]-1),]
cc_dif <- cc[2:dim(cc)[1],] - cc[1:(dim(cc)[1]-1),]

ind_moeda <- which(names(fx_ret) == "USDBRL Curncy")
ind_di <- which(names(di_dif) == "21")
ind_cc <- which(names(cc_dif) == "30") 

fatores_fut_usdbrl <- as.data.frame(cbind(fx_ret[,ind_moeda],
                                          di_dif[,ind_di],
                                          cc_dif[,ind_cc]))

colnames(fatores_fut_usdbrl) <- c("Fut FX Retorno USDBRL Curncy", "Fut FX Dif DI", "Fut FX Dif CC")
# fatores de risco para o Eurodollar
libor_dif <- libor[2:dim(libor)[1],] - libor[1:(dim(libor)[1]-1),]
fatores_eurodollar <- as.data.frame(libor_dif %>% select( "7.1333333333333337","4.1333333333333337"))

libor_eurodollar <- as.data.frame(libor %>% select("7.1333333333333337","4.1333333333333337"))
colnames(fatores_eurodollar) <- c("Eurodollar Longo", "Eurodollar Curto")
# B) fatores de risco totais
fatores <- cbind(fatores_acoes_us,
                 fatores_acoes,
                 fatores_opcoes,
                 fatores_fut_usdbrl,
                 fatores_eurodollar,
                 fatores_ntnb )

fatores

2.2 B) Matriz de variância dos fatores de risco por EWMA.

sigma <- cov_ewma(fatores)
df_sigma <- round(as.data.frame(sigma),6)
df_sigma

2.3 C) VaR paramétrico de cada posição.

2.3.1 Cálculo das exposições

O Cálculo do VaR paramétrico requer a multiplicação de matrizes entre a a matriz dos fatores e a exposição aos fatores de risco que será mostrada abaixo:

## EXPOSICAO ACOES BRASIL
qtd_acoes_banrisul <- -60000
qtd_acoes_gol <- 50000
preco_acoes_banrisul <-  BZ_acoes[dim(BZ_acoes)[1], 29]
preco_acoes_gol <- BZ_acoes[dim(BZ_acoes)[1], 37] 
exposicao_acoes_banrisul <- as.numeric(qtd_acoes_banrisul*preco_acoes_banrisul)
exposicao_acoes_gol <- as.numeric(qtd_acoes_gol*preco_acoes_gol)

## EXPOSICAO ACOES USA
qtd_acoes_usa <- 180
preco_acoes_usa <- US_acoes[dim(US_acoes)[1],3]
cotacao_dolar <- as.numeric(tail(fx[,ind_moeda],1))
exposicao_acoes_usa <- as.numeric(qtd_acoes_usa*preco_acoes_usa*cotacao_dolar)
 exposicao_acoes_amazon <- c(exposicao_acoes_usa, exposicao_acoes_usa)

## EXPOSICAO PUT DE USD/BRL
qtd_opcao <- 10
data_vencimento_opcao <- as.Date("2019-07-01") 
prazo_opcao <- as.numeric(bizdays(from = d0, to = data_vencimento_opcao, cal = feriados)/252)
strike <- 3.925
preco_ativo_objeto <- as.numeric(tail(fx[,ind_moeda],1))
preco_opcao <- 114.83252628092/1000
risk_free_rate <- 0.064
d <- tail(cc$`30`,1)
vol_implicita <- bsputimpvol(s = preco_ativo_objeto,
                             k = strike,
                             r = risk_free_rate,
                             tt = prazo_opcao,
                             d = d,
                             price = preco_opcao)


gregas <- greeks(bsput(s = preco_ativo_objeto,
                        k = strike,
                        v = vol_implicita,
                        r = risk_free_rate,
                        tt = prazo_opcao,
                        d = d))
delta <- gregas[2]
vega <- gregas[4]

    exposicao_opcao <- 50000*qtd_opcao*c(delta*preco_ativo_objeto,vega)

## EXPOSICAO FUTURO DE USD/BRL
qtd_futfx <- 6
Notional_fx <- 50000
data_vencimento_futfx <- as.Date("2019-06-03")
prazo_futfx_dc <- (as.numeric( data_vencimento_futfx - d0))/360
prazo_futfx_du <- as.numeric(bizdays(from = d0, to = data_vencimento_futfx, cal = feriados)/252)

exposicao_futfx_di <- qtd_futfx*Notional_fx*tail(fx$`USDBRL Curncy`,1)*prazo_futfx_du*
    (((1+tail(di$`21`,1))^(prazo_futfx_du-1))/
  (1+(tail(cc$`30`,1))*prazo_futfx_dc))

exposicao_futfx_cc <- -qtd_futfx * Notional_fx * tail(fx$`USDBRL Curncy`,1)*prazo_futfx_dc*
                          ((1+tail(di$`21`,1))^prazo_futfx_du)/
                          ((1+tail(cc$`30`,1)*prazo_futfx_dc)^2)

exposicao_futfx_cambio <-  qtd_futfx * Notional_fx * tail(fx$`USDBRL Curncy`,1)*
                              (((1+tail(di$`48`,1))^prazo_futfx_du)/
                              (1+tail(cc$`70`,1)*prazo_futfx_dc))


exposicao_futfx <- c(exposicao_futfx_cambio, exposicao_futfx_di, exposicao_futfx_cc )
                                                 
## EXPOSICAO EURODOLLAR
qtde_eurodolar <- 5
data_vencimento_eurodollar <- as.Date("2019-09-16")
prazo_eurodolar_curto <- as.numeric((data_vencimento_eurodollar - d0))/360
prazo_eurodolar_longo <- prazo_eurodolar_curto + 90/360
Notional <- 1000000*0.0025

exposicao_eurodolar <- c(-qtde_eurodolar*Notional*tail(fx$`USDBRL Curncy`,1)*100*
                           (prazo_eurodolar_longo/(prazo_eurodolar_longo-prazo_eurodolar_curto))
                         *(1/(1+tail(libor_eurodollar$`4.1333333333333337`,1)*prazo_eurodolar_curto)),
                         
                 qtde_eurodolar*Notional*tail(fx$`USDBRL Curncy`,1)*100*(prazo_eurodolar_curto/
                   (prazo_eurodolar_longo-prazo_eurodolar_curto))*
((1+tail(libor_eurodollar$`7.1333333333333337`,1)*prazo_eurodolar_longo)/
((1+ tail(libor_eurodollar$`4.1333333333333337`,1)*prazo_eurodolar_curto)^2)))


## EXPOSICAO NTN-B
prazo_0 <- c( bizdays(from = d0, to = as.Date("2019-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2020-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2020-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2021-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2021-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2022-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2022-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2023-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2023-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2024-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2024-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2025-02-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2025-08-15"), cal = feriados),
              bizdays(from = d0, to = as.Date("2026-02-15"), cal = feriados), 
              bizdays(from = d0, to = as.Date("2026-08-15"), cal = feriados) )

vna_d0 <- 3223.978714
cupom_ntnb <- (sqrt(1.06)-1)*vna_d0
qtde_titulos <- 120
fluxo <- c(rep(cupom_ntnb, length(prazo_0)-1),cupom_ntnb+vna_d0)
prazo_1 <- as.numeric(names(BZ_juros_real))
  #c(63,    126,    252,    378 ,504,   630 ,756,   882 ,1008,  1134,   1260,   1386,   1512,   1638,   1764,   1890)
ytm <- 0.040071
fluxo_vp <- fluxo/((1+ytm)^(prazo_0/252))
preco_titulo <- sum(fluxo_vp)

fluxo_vp_novo <- bond_fluxo_map(fluxo_vp,prazo_0,prazo_1)
dur_p <- (prazo_1/252)*(fluxo_vp_novo/preco_titulo)
dur_p_mod <- dur_p/(1+ytm)

exposicao_ntnb <- - qtde_titulos*preco_titulo*dur_p_mod

## EXPOSICAO TOTAL
exposicoes <- c(exposicao_acoes_amazon, 
                 exposicao_acoes_banrisul, 
                 exposicao_acoes_gol, 
                exposicao_opcao, 
                exposicao_futfx, 
                exposicao_eurodolar,  
                 exposicao_ntnb )
df_exposicoes <- list(exposicao_acoes_amazon, 
                 exposicao_acoes_banrisul, 
                 exposicao_acoes_gol, 
                exposicao_opcao, 
                exposicao_futfx, 
                exposicao_eurodolar,  
                 exposicao_ntnb )

names(df_exposicoes) <- c("exposicao_acoes_amazon", 
                 "exposicao_acoes_banrisul", 
                 "exposicao_acoes_gol", 
                "exposicao_opcao", 
                "exposicao_futfx", 
                "exposicao_eurodolar",  
                 "exposicao_ntnb" )
df_exposicoes
## $exposicao_acoes_amazon
## [1] 1316705 1316705
## 
## $exposicao_acoes_banrisul
## [1] -1434000
## 
## $exposicao_acoes_gol
## [1] 1152500
## 
## $exposicao_opcao
## [1] -813036.355    2743.048
## 
## $exposicao_futfx
## [1] 1194388.38   57903.39  -62921.40
## 
## $exposicao_eurodolar
## [1] -11713412   6829502
## 
## $exposicao_ntnb
##  [1]        0.000        0.000    -2635.040    -2671.078   -10741.117
##  [6]   -15675.020   -20493.513   -24525.429   -29788.526   -33012.747
## [11]   -38486.173   -42126.186   -44820.038   -47956.333   -52953.454
## [16]   -54492.113 -1070000.592 -1046195.081        0.000        0.000
## [21]        0.000        0.000        0.000

2.3.2 VaR Paramétrico para cada ativo

z <- qnorm(0.05)
## acoes Banrisul
VaR_acoes_banrisul <- z*sqrt(exposicao_acoes_banrisul%*%
                          cov_ewma(as.data.frame(fatores_acoes$`BRSR6 BZ Equity`))%*%
                          exposicao_acoes_banrisul)
VaR_acoes_banrisul/sum(exposicao_acoes_banrisul)
##           [,1]
## [1,] 0.0266056
## acoes GOL
(VaR_acoes_gol <- z*sqrt(exposicao_acoes_gol%*%
                          cov_ewma(as.data.frame(fatores_acoes$`GOLL4 BZ Equity`))%*%
                          exposicao_acoes_gol))
##           [,1]
## [1,] -61540.03
VaR_acoes_gol/sum(exposicao_acoes_gol)
##             [,1]
## [1,] -0.05339699
## acoes USA
VaR_acoes_amazon <- z*sqrt(exposicao_acoes_amazon%*%
                               cov_ewma(as.data.frame(fatores_acoes_us))%*%
                               exposicao_acoes_amazon)
VaR_acoes_amazon/sum(exposicao_acoes_amazon)
##             [,1]
## [1,] -0.01045111
## Op??o PUT USD/BRL
VaR_opcao <- z*sqrt(exposicao_opcao%*%
                             cov_ewma(as.data.frame(fatores_opcoes))%*%
                      exposicao_opcao)
VaR_opcao/sum(exposicao_opcao)
##            [,1]
## [1,] 0.01357201
## Futuro USD/BRL
VaR_fut_usdbrl <- z*sqrt(exposicao_futfx%*%
                      cov_ewma(as.data.frame(fatores_fut_usdbrl))%*%
                        exposicao_futfx)
VaR_fut_usdbrl/sum(exposicao_futfx)
##             [,1]
## [1,] -0.01351189
## Eurodollar
VaR_eurodollar <- z*sqrt(exposicao_eurodolar%*%
                           cov_ewma(as.data.frame(fatores_eurodollar))%*%
                           exposicao_eurodolar)
VaR_eurodollar/sum(exposicao_eurodolar)
##              [,1]
## [1,] 0.0003740077
## NTN-B
VaR_ntnb <- z*sqrt(exposicao_ntnb%*%
                           cov_ewma(as.data.frame(fatores_ntnb))%*%
                     exposicao_ntnb)
VaR_ntnb/sum(exposicao_ntnb)
##              [,1]
## [1,] 0.0006495012
VaR_par_ind <- (data.frame(VaR_acoes_amazon,VaR_acoes_banrisul,VaR_acoes_gol, VaR_fut_usdbrl,VaR_eurodollar,VaR_ntnb, VaR_opcao))
VaR_par_ind

2.4 D) VaR Paramétrico da Carteira

Primeiro vamos verificar se as matrizes estão aptas para multiplicação

dim(fatores)
## [1] 1921   34
length(exposicoes)
## [1] 34

Tudo ok. Por fim, calcularemos o VaR Paramétrico

Sigma <- cov_ewma(fatores)
z <- qnorm(0.05)
sig <- as.numeric(sqrt(exposicoes%*%Sigma%*%exposicoes))
VaR <- z*sig
paste("VaR Paramétrico da Carteira:",round(VaR,2))
## [1] "VaR Paramétrico da Carteira: -60912.03"

2.5 E) Aumento de uma unidade (quantidade) em cada uma das posições da carteira o respectivo VaR Incremental, partindo do VaR Marginal.

2.5.1 VaR Marginal

Primeiro para encontrar o VaR Incremental, precisamos calcular o VaR Marginal

VaR_marginal <- z*Sigma%*%exposicoes/sig
round(VaR_marginal,4)
##                                 [,1]
## AMZN US Equity               -0.0131
## USDBRL Curncy                 0.0007
## BRSR6 BZ Equity               0.0020
## GOLL4 BZ Equity              -0.0363
## Opcao Retorno USDBRL Curncy   0.0007
## Opcao Vol USDBRL Curncy       0.0001
## Fut FX Retorno USDBRL Curncy  0.0007
## Fut FX Dif DI                 0.0000
## Fut FX Dif CC                 0.0020
## Eurodollar Longo              0.0000
## Eurodollar Curto              0.0000
## 21                            0.0001
## 42                            0.0001
## 63                            0.0001
## 126                           0.0001
## 252                           0.0001
## 378                           0.0001
## 504                           0.0002
## 630                           0.0002
## 756                           0.0002
## 882                           0.0002
## 1008                          0.0001
## 1134                          0.0001
## 1260                          0.0001
## 1386                          0.0001
## 1512                          0.0001
## 1638                          0.0001
## 1764                          0.0001
## 1890                          0.0001
## 2016                          0.0001
## 2142                          0.0001
## 2268                          0.0001
## 2394                          0.0001
## 2520                          0.0001

2.5.2 VaR Incremental

qtde_total <- c(exposicao_acoes_amazon*0 + qtd_acoes_usa,
                exposicao_acoes_banrisul*0 + qtd_acoes_banrisul,
                exposicao_acoes_gol*0 + qtd_acoes_gol,
                exposicao_opcao*0 + qtd_opcao,
                exposicao_futfx*0 + qtd_futfx,
                exposicao_eurodolar*0 + qtde_eurodolar,
                exposicao_ntnb*0 + qtde_titulos)



VaR_incremental <- VaR_marginal*exposicoes/qtde_total
sum(VaR_incremental[3])  # Açãoo BANRISUL
## [1] 0.04853692
sum(VaR_incremental[4])  # Ação GOL
## [1] -0.8364161
sum(VaR_incremental[7:9])  # Futuro de USD/BRL
## [1] 116.0225
sum(VaR_incremental[1:2])  # A??O AMAZON USA
## [1] -91.04736
sum(VaR_incremental[12:34]) # NTN-B
## [1] -2.12677
sum(VaR_incremental[10:11]) # Eurodollar
## [1] 65.28438
sum(VaR_incremental[5:6]) # Op??o PUT USD/BRL
## [1] -55.78332

2.5.3 VaR Component

# 3 - VaR component
VaR_component <- VaR_marginal*exposicoes
VaR_component
##                                       [,1]
## AMZN US Equity               -1.729222e+04
## USDBRL Curncy                 9.036972e+02
## BRSR6 BZ Equity              -2.912215e+03
## GOLL4 BZ Equity              -4.182080e+04
## Opcao Retorno USDBRL Curncy  -5.580130e+02
## Opcao Vol USDBRL Curncy       1.798630e-01
## Fut FX Retorno USDBRL Curncy  8.197472e+02
## Fut FX Dif DI                -7.961664e-01
## Fut FX Dif CC                -1.228162e+02
## Eurodollar Longo              4.459155e+02
## Eurodollar Curto             -1.194936e+02
## 21                            0.000000e+00
## 42                            0.000000e+00
## 63                           -2.455931e-01
## 126                          -2.489429e-01
## 252                          -9.993957e-01
## 378                          -1.729324e+00
## 504                          -3.122142e+00
## 630                          -4.039325e+00
## 756                          -5.271793e+00
## 882                          -5.666848e+00
## 1008                         -5.418412e+00
## 1134                         -5.555913e+00
## 1260                         -5.589638e+00
## 1386                         -5.714730e+00
## 1512                         -5.939734e+00
## 1638                         -5.730804e+00
## 1764                         -1.050379e+02
## 1890                         -9.490191e+01
## 2016                          0.000000e+00
## 2142                          0.000000e+00
## 2268                          0.000000e+00
## 2394                          0.000000e+00
## 2520                          0.000000e+00

2.6 F) Contribuição percentual do VaR

Calculada a través do VaR Component calculado acima

VaR_percentual <- round(round(VaR_component,4)/VaR,4)*100

paste("VaR Percentual - Ações BANRISUL:", sum(VaR_percentual[3]),"%")
## [1] "VaR Percentual - Ações BANRISUL: 4.78 %"
paste("VaR Percentual - Ações GOL:", sum(VaR_percentual[4]),"%")   
## [1] "VaR Percentual - Ações GOL: 68.66 %"
paste("VaR Percentual - Ações AMAZON:", sum(VaR_percentual[1:2]),"%")  
## [1] "VaR Percentual - Ações AMAZON: 26.91 %"
paste("VaR Percentual - Futuro de USD/BRL:", sum(VaR_percentual[7:9]),"%")   
## [1] "VaR Percentual - Futuro de USD/BRL: -1.15 %"
paste("VaR Percentual - NTN-B:", sum(VaR_percentual[12:34]),"%")  
## [1] "VaR Percentual - NTN-B: 0.43 %"
paste("VaR Percentual - Eurodollar:", sum(VaR_percentual[10:11]),"%")  
## [1] "VaR Percentual - Eurodollar: -0.53 %"
paste("VaR Percentual - PUT de USD/BRL:", sum(VaR_percentual[5:6]),"%")
## [1] "VaR Percentual - PUT de USD/BRL: 0.92 %"

Plotando o VaR Precentual e verificando sua soma

sum(VaR_percentual)
## [1] 100.02
barplot(VaR_percentual,beside = T , main = "VaR Percentual", ylab = " % " , xlab = " Ativos " , border = "red", col= "blue" , density = 10)

2.7 G) VaR histórico de cada posição usando uma janela de 500 dados.

Para calcular o VaR Histórico de cada posição devemos reprecificar cada ativo da carteira para a janela proposto

# novos cenários de preços de ações
P1_acoes_banrisul <- as.numeric(preco_acoes_banrisul)*(1+fatores_acoes[1])
PL_acoes_banrisul <-   qtd_acoes_banrisul*(unlist(P1_acoes_banrisul) - as.numeric(preco_acoes_banrisul))
n <- length(PL_acoes_banrisul)
ind_cenarios <- (n-499):n
VaR_hist_acoes_banrisul <- quantile(PL_acoes_banrisul[ind_cenarios], 0.05)
VaR_hist_acoes_banrisul1 <- round(VaR_hist_acoes_banrisul, 3)

P1_acoes_gol <- as.numeric(preco_acoes_gol)*(1+fatores_acoes[2])
PL_acoes_gol <- unlist(qtd_acoes_gol*(P1_acoes_gol - as.numeric(preco_acoes_gol)))
n <- length(PL_acoes_gol)
ind_cenarios <- (n-499):n
VaR_hist_acoes_gol <- quantile(PL_acoes_gol[ind_cenarios], 0.05)
VaR_hist_acoes_gol1 <- round(VaR_hist_acoes_gol,3)

Po_acoes_amazon <-   as.numeric(preco_acoes_usa)*as.numeric(tail(fx[,ind_moeda],1))
P1_acoes_amazon <- Po_acoes_amazon * (1+US_acoes_ret[,ind_amazon]) *(1+fx_ret$`USDBRL Curncy`)
PL_acoes_amazon <- qtd_acoes_usa*(P1_acoes_amazon - Po_acoes_amazon)
n <- length(PL_acoes_amazon)
ind_cenarios <- (n-499):n
VaR_hist_acoes_amazon <- quantile(PL_acoes_amazon[ind_cenarios], .05) 
VaR_hist_acoes_amazon1 <- round(VaR_hist_acoes_amazon,3                               )
# novos preços para opção

P1_opcoes <- {}

for(i in 1:dim(fatores_opcoes)[1]){
  
  P1_opcoes[i] <- bsput(s = preco_ativo_objeto*(1 + fatores_opcoes[,1][i]),
                         k = strike,
                         v = vol_implicita + fatores_opcoes[,2][i],
                         r = risk_free_rate,
                         tt = prazo_opcao,
                         d = d)
}

PL_opcoes <- 50000*qtd_opcao*as.numeric(P1_opcoes - preco_opcao)

n <- length(PL_opcoes)
ind_cenarios <- (n-499):n
VaR_hist_opcoes <- quantile(PL_opcoes[ind_cenarios], .05)
VaR_hist_opcoes1 <- round(VaR_hist_opcoes,3)

# novo preço para fut usd
preco_fut_usdbrl_dado <- 3985.538/1000*50000
preco_fut_usdbrl      <- as.numeric(tail(fx[,ind_moeda],1))*(((1+tail(di$`21`,1))^prazo_futfx_du)/
                                                                  (1+tail(cc$`30`,1)*prazo_futfx_dc)) *50000
P1_fut_usdbrl <- (as.numeric(tail(fx[,ind_moeda],1)))*(1+fx_ret[,ind_moeda])*
                       ((1+tail(di$`21`,1)+di_dif[,ind_di])^prazo_futfx_du)/
                        (1+(tail(cc$`30`,1)+cc_dif[,ind_cc])*prazo_futfx_dc) *50000


PL_fut_usdbrl <- (qtd_futfx*(P1_fut_usdbrl - preco_fut_usdbrl))
n <- length(PL_fut_usdbrl)
ind_cenarios <- (n-499):n
VaR_hist_fut_usdbrl <- quantile(PL_fut_usdbrl[ind_cenarios], 0.05)
VaR_hist_fut_usdbrl1 <- round(VaR_hist_fut_usdbrl,3)

# Eurodollar em d0 (NOVA PRECIFICAÇÃO) ----------

preco_eurodollar_dado <- 97.61
preco_eurodollar      <- 100 - (((1 + tail(libor_eurodollar$`7.1333333333333337`,1) *                             prazo_eurodolar_longo)/
                                  (1 + tail(libor_eurodollar$`4.1333333333333337`,1) *                prazo_eurodolar_curto)-1)*
                                 (1/(prazo_eurodolar_longo - prazo_eurodolar_curto)))*100

P1_eurodollar <- 100 -(((1 + (tail(libor_eurodollar$`7.1333333333333337`,1) + libor_dif$`7.1333333333333337`) * prazo_eurodolar_longo )/
                        (1 + (tail(libor_eurodollar$`4.1333333333333337`,1) + libor_dif$`4.1333333333333337`) * prazo_eurodolar_curto ))-1)*
                         (1/(prazo_eurodolar_longo - prazo_eurodolar_curto))*100
PL_eurodollar <- Notional*qtde_eurodolar*as.numeric(tail(fx[,ind_moeda],1)) * (P1_eurodollar - preco_eurodollar)

n <- length(PL_eurodollar)
ind_cenarios <- (n-499):n
VaR_hist_eurodollar <- quantile(PL_eurodollar[ind_cenarios], .05)
VaR_hist_eurodollar1 <- round(VaR_hist_eurodollar,3)

# novo preco NTN-B
fluxo_novo <- fluxo_vp_novo*(1+ytm)^(prazo_1/252)

# pre?o do per??odo 0
P_0_star <- sum(fluxo_novo/((1 + tail(BZ_juros_real,1))^(prazo_1/252)))

# preço nos 500 cenários do per??odo 1
P_1_star <- {}
for(i in 1:as.numeric(dim(fatores_ntnb[1]))[1]){
  P_1_star[i] <- sum(fluxo_novo/((1 + tail(BZ_juros_real,1) + fatores_ntnb[i,])^(prazo_1/252)))
}

PL_ntnb <- qtde_titulos*(P_1_star - P_0_star)
n <- length(PL_ntnb)
ind_cenarios <- (n-499):n
VaR_hist_ntnb <- as.numeric(quantile(PL_ntnb[ind_cenarios],0.05))
VaR_hist_ntnb1 <- round(VaR_hist_ntnb,3)

VaR_ind_hist <- (data_frame(VaR_hist_acoes_amazon,
VaR_hist_acoes_banrisul,
VaR_hist_acoes_gol,
VaR_hist_opcoes,
VaR_hist_ntnb,
VaR_hist_eurodollar,
VaR_hist_fut_usdbrl))
#names(VaR_ind_hist) <- c("VaR_hist_acoes_amazon",
#"VaR_hist_acoes_banrisul",
#"VaR_hist_acoes_gol",
#"VaR_hist_opcoes",
#"VaR_hist_ntnb",
#"VaR_hist_eurodollar",
#"VaR_hist_fut_usdbrl")
VaR_ind_hist

Comparativo entre os VaR Paramétrico e Histórico de ativos indivíduais

names_df <- c("Acoes Amazon", 
                 "Acoes Banrisul", 
                 "Acoes Gol", 
                "Opcao", 
                "FutFX", 
                "Eurodolar",  
                 "NTN-B" )
data.frame("Nome" = names_df, 
           "VaR Paramétrico" = c(VaR_acoes_amazon,VaR_acoes_banrisul,VaR_acoes_gol, VaR_opcao, VaR_fut_usdbrl,VaR_eurodollar,VaR_ntnb ),
           "VaR Histórico" = c(VaR_hist_acoes_amazon1,VaR_hist_acoes_banrisul1,
VaR_hist_acoes_gol1,VaR_hist_opcoes1,VaR_hist_fut_usdbrl1, VaR_hist_eurodollar1,VaR_hist_ntnb1 ))

2.8 H) VaR histórico da carteira usando uma janela de 500 dados.

Basicamente, repete-se o procedimento utilzado para o individual. Porém, primeiramente deve-se encontrar o Preço e Lucro da carteira para cada dia, somando os vetores PL já encontrados anteriormente

2.8.1 PL da Carteira

# C?lculo do PL da carteira
PL_carteira <- PL_acoes_amazon + PL_acoes_banrisul + PL_acoes_gol + PL_opcoes + PL_fut_usdbrl + PL_eurodollar + PL_ntnb

2.8.2 VaR Histórico da carteira

n <- length(PL_carteira)
ind_cenarios <- (n-499):n
VaR_Historico <- quantile(PL_carteira[ind_cenarios], 0.05)

2.8.3 Comparando os dois valores de VaR para CARTEIRA

paste("VaR Histórico:",round(VaR_Historico,2))
## [1] "VaR Histórico: -72362.94"
paste("VaR Paramétrico:", round(VaR,2))
## [1] "VaR Paramétrico: -60912.03"

2.9 I) VaR através de TVE, usando os 1900 últimos cenários históricos.

2.9.1 VaR TVE

alpha <- 0.05

# defino a quantidade de cenarios
ind_cenarios <- (n-1899):n

# Threshold como sendo 10%
limite <- quantile(PL_carteira[ind_cenarios],0.1)
PL_extremos <- PL_carteira[ind_cenarios][PL_carteira[ind_cenarios] < limite]
 #plot(density(PL_carteira) ,"Distribuição Emp??rica")
 #plot(density(PL_extremos),main = "Modelagem da cauda")
n_extremos <- length(PL_extremos)
# estimando os parametros da GPD
fit <- gpdFit(data = PL_carteira[ind_cenarios],
              threshold = limite)
fit <- gpdFit(data = PL_carteira[ind_cenarios] * -1 ,threshold = limite * -1)


VaR_TVE <- limite - fit$par.ests[1]/fit$par.ests[2]*
                    (1-(alpha*1900/n_extremos)^fit$par.ests[2])
VaR_TVE
##       10% 
## -82113.55

2.9.2 Paramétrico x Histórico x TVE (Carteira)

paste("VaR Histórico:",VaR_Historico)
## [1] "VaR Histórico: -72362.9384142595"
paste("VaR Paramétrico:", VaR)
## [1] "VaR Paramétrico: -60912.0327805763"
paste("VaR TVE:", VaR_TVE)
## [1] "VaR TVE: -82113.5466836228"

2.10 J) Perda esperada.

ES_TVE <- VaR_TVE - (fit$par.ests[1] + fit$par.ests[2]*(VaR_TVE - limite))                                   /       (1+fit$par.ests[2])

paste("ES TVE:", round(ES_TVE,3))
## [1] "ES TVE: -113601.868"

3 Parte III:

Considere agora apenas a parte da carteira formada pelas ações (posições 1 a 3). Assuma que essa parte da carteira está fixa desde 16/03/2018. Calcule o VaR diário dessa parte da carteira entre 19/03/2018 e 14/05/2019 (abertura), totalizando 300 VaR’s.

As posições de 1 a 3 são as posições em ações. Neste caso, Gol, Banrisul e Amazon ## K) Simulação histórica com 500 cenários.

VaR_Hist_2 <- {}
for(i in 1:300){
  P0_acao_banrisul <- as.numeric(BZ_acoes[n - i, ind_banrisul])
  P1_acao_banrisul <- P0_acao_banrisul*t(1 + BZ_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_banrisul])
  
  P0_acao_gol <- as.numeric(BZ_acoes[n - i, ind_gol])
  P1_acao_gol <- P0_acao_gol*t(1 + BZ_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_gol])
  
  P0_acao_amazon <- as.numeric(US_acoes[n - i, ind_amazon]*fx[n - i, ind_moeda])
  P1_acao_amazon <- P0_acao_amazon*t(1 + US_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_amazon])*(1 + fx_ret[(n - 1 - 499 - i):(n - 1 - i), ind_moeda])
  
  PnL_Acoes_Total <- qtd_acoes_usa*(P1_acao_amazon - P0_acao_amazon) + qtd_acoes_gol*(P1_acao_gol - P0_acao_gol) + qtd_acoes_banrisul*(P1_acao_banrisul - P0_acao_banrisul)
  VaR_Hist_2[i] <- quantile(PnL_Acoes_Total, alpha)
}

VaR_Hist_2
##   [1] -76291.54 -76328.25 -76145.71 -73405.14 -73117.96 -73787.63 -71962.92
##   [8] -71716.55 -72050.34 -71057.30 -70879.35 -72517.37 -71433.54 -72454.05
##  [15] -71982.80 -71306.63 -71306.63 -68997.05 -71461.27 -71487.78 -72086.73
##  [22] -72691.54 -73589.45 -73590.44 -74772.01 -76744.37 -75934.30 -75104.47
##  [29] -74689.43 -75124.63 -75200.02 -74394.00 -75315.53 -78270.78 -78718.30
##  [36] -77373.12 -82797.49 -84621.12 -83966.48 -81828.99 -78721.18 -76156.19
##  [43] -78303.06 -75482.12 -74804.11 -76148.50 -74956.73 -75106.40 -75161.15
##  [50] -75133.50 -75312.59 -76413.07 -77001.42 -77275.77 -76565.30 -77298.28
##  [57] -76833.09 -77384.50 -77628.63 -78727.96 -78831.21 -78557.21 -78065.91
##  [64] -77780.42 -75789.03 -74939.96 -73048.27 -74209.29 -76794.38 -75177.30
##  [71] -71090.85 -71825.56 -69619.11 -67747.20 -67786.15 -68509.56 -68291.62
##  [78] -67770.06 -66378.84 -70023.93 -71477.49 -71429.55 -70593.30 -70840.91
##  [85] -71804.48 -71027.35 -68567.76 -68696.24 -69567.88 -69061.88 -69930.36
##  [92] -71626.34 -72382.35 -71661.70 -71661.70 -71043.50 -69676.97 -70143.15
##  [99] -69757.92 -69757.92 -69343.10 -70601.53 -70550.49 -72271.91 -70855.45
## [106] -71392.55 -69774.84 -67607.09 -66526.00 -64914.11 -65553.18 -67401.53
## [113] -66845.51 -66745.06 -67641.03 -67665.42 -67613.41 -66533.00 -64228.63
## [120] -64157.37 -65174.98 -65556.68 -63673.04 -61696.75 -62142.94 -63163.89
## [127] -62135.50 -61957.19 -61568.39 -61951.58 -61508.54 -60201.20 -60919.75
## [134] -61683.40 -61437.48 -58863.94 -60449.99 -59685.81 -57810.23 -56754.40
## [141] -56383.43 -57143.92 -55290.98 -52767.14 -53481.39 -52543.74 -53177.82
## [148] -54156.48 -53719.15 -55163.16 -54284.49 -54229.54 -54184.11 -56871.45
## [155] -56212.00 -52641.18 -53160.37 -54095.70 -52063.52 -51416.99 -51532.61
## [162] -51844.41 -50988.53 -51252.07 -50606.76 -50788.90 -50684.10 -50615.30
## [169] -51206.32 -50095.19 -50919.93 -51561.04 -51818.78 -51507.13 -50293.22
## [176] -49977.86 -50083.94 -51602.65 -50305.66 -51482.32 -51255.60 -51027.74
## [183] -51679.70 -50345.15 -50808.28 -50344.31 -50163.62 -50864.95 -51086.66
## [190] -50287.59 -50473.51 -50394.36 -50399.41 -51204.31 -50835.11 -49199.84
## [197] -50633.69 -51958.07 -51767.07 -51960.08 -51203.53 -50873.07 -49925.32
## [204] -49710.36 -50291.13 -50997.11 -51367.86 -52058.58 -51565.57 -51307.03
## [211] -51633.45 -50751.56 -51964.84 -51051.50 -49825.66 -49390.27 -48886.98
## [218] -48223.39 -47277.31 -47978.35 -47392.02 -47429.93 -47427.88 -47528.54
## [225] -46958.49 -46970.50 -46495.50 -45671.81 -45581.53 -45266.29 -44710.94
## [232] -45261.67 -46324.37 -46197.47 -43981.28 -45375.23 -47459.48 -48025.43
## [239] -47700.94 -46423.25 -47237.72 -47373.18 -49150.94 -50761.30 -52536.49
## [246] -50928.80 -49709.47 -49706.45 -51198.18 -49235.70 -52454.52 -52498.71
## [253] -50887.05 -52798.22 -51748.84 -50673.38 -51755.54 -54590.09 -53793.64
## [260] -54931.42 -56557.32 -57317.13 -55416.24 -56719.24 -56818.76 -57054.23
## [267] -56701.28 -58027.49 -59120.85 -59044.93 -58737.48 -57520.12 -56745.87
## [274] -60615.08 -62970.85 -61818.45 -61783.85 -64425.14 -62742.68 -59117.87
## [281] -60624.74 -62195.26 -61372.39 -61158.88 -61042.77 -62464.77 -59792.01
## [288] -60349.99 -62021.56 -61158.84 -62457.12 -62457.12 -60774.80 -62789.38
## [295] -63769.31 -61750.09 -60118.97 -61361.93 -61893.59 -61972.16

3.1 L) Simulação histórica com 500 cenários usando o método de Hull e White (1998).

VaR_Hist_2_HW <- {}

sigma_hist_acoes_br <- cov_ewma_hist(BZ_acoes_ret)
sigma_hist_banrisul <- sqrt(sigma_hist_acoes_br[ind_banrisul,ind_banrisul,])

sigma_hist_gol <- sqrt(sigma_hist_acoes_br[ind_gol,ind_gol,])

sigma_hist_acoes_usa <- cov_ewma_hist(US_acoes_ret)
sigma_hist_acoes_amazon <- sqrt(sigma_hist_acoes_usa[ind_amazon,ind_amazon,])

sigma_hist_fx_0 <- cov_ewma_hist(fx_ret)
sigma_hist_fx <- sqrt(sigma_hist_fx_0[ind_moeda,ind_moeda,])


for(i in 1:300){
  mult_HW_barisul <- sigma_hist_banrisul[n-1-i] / sigma_hist_banrisul[(n - 1 - 499 - i):(n - 1 - i)]
  mult_HW_gol <- sigma_hist_gol[n-1-i] / sigma_hist_gol[(n - 1 - 499 - i):(n - 1 - i)]
  mult_HW_amazon <- sigma_hist_acoes_amazon[n-1-i] / sigma_hist_acoes_amazon[(n - 1 - 499 - i):(n - 1 - i)]
  mult_HW_FX <- sigma_hist_fx[n-1-i] / sigma_hist_fx[(n - 1 - 499 - i):(n - 1 - i)]
  
  P0_acao_banrisul <- as.numeric(BZ_acoes[n - i, ind_banrisul])
  P1_acao_banrisul <- P0_acao_banrisul*(1 + mult_HW_barisul*BZ_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_banrisul])
  
  P0_acao_gol <- as.numeric(BZ_acoes[n - i, ind_gol])
  P1_acao_gol <- P0_acao_gol*(1 + mult_HW_gol*BZ_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_gol])
  
  P0_acao_amazon <- as.numeric(US_acoes[n - i, ind_amazon]*fx[n - i, ind_moeda])
  P1_acao_amazon <- P0_acao_amazon*(1 + mult_HW_amazon*US_acoes_ret[(n - 1 - 499 - i):(n - 1 - i), ind_amazon])*(1 + mult_HW_FX*fx_ret[(n - 1 - 499 - i):(n - 1 - i), ind_moeda])
  
  PnL_Acoes_HW <- qtd_acoes_usa*(P1_acao_amazon - P0_acao_amazon) + qtd_acoes_gol*(P1_acao_gol - P0_acao_gol) + qtd_acoes_banrisul*(P1_acao_banrisul - P0_acao_banrisul)
  VaR_Hist_2_HW[i] <- quantile(PnL_Acoes_HW, alpha)
  
  }

VaR_Hist_2_HW
##   [1]  -53510.08  -53875.20  -55133.35  -53328.94  -54518.14  -56545.27
##   [7]  -49732.48  -51215.38  -52680.34  -52365.13  -53540.15  -54624.53
##  [13]  -56294.19  -57486.90  -55977.57  -56327.47  -58097.40  -51653.77
##  [19]  -53990.51  -54599.22  -56368.75  -58088.75  -59845.99  -59845.07
##  [25]  -61926.50  -62744.82  -63949.84  -65722.34  -67302.85  -69778.44
##  [31]  -70952.36  -72180.07  -71993.00  -67324.11  -69174.23  -70820.99
##  [37]  -65567.04  -66835.56  -66487.05  -60459.21  -59493.80  -59750.49
##  [43]  -61669.84  -62666.09  -63145.06  -55978.61  -56162.24  -55948.18
##  [49]  -55922.23  -57735.10  -58515.08  -58459.43  -59881.26  -61732.97
##  [55]  -62877.28  -64703.64  -65889.72  -67215.66  -68979.44  -71582.92
##  [61]  -73339.00  -75747.37  -74752.72  -76780.64  -72616.72  -73685.19
##  [67]  -73778.73  -76301.13  -77434.62  -77477.95  -69830.66  -68192.68
##  [73]  -68224.42  -64463.47  -64192.07  -66524.10  -68167.19  -69380.07
##  [79]  -68536.24  -70010.09  -72057.79  -73904.52  -75677.98  -77872.07
##  [85]  -77319.78  -80040.34  -76912.04  -79145.60  -81422.86  -82265.13
##  [91]  -81841.45  -81792.64  -85024.31  -86609.33  -89328.01  -90595.16
##  [97]  -90645.44  -93017.28  -83485.76  -86109.48  -88860.29  -91558.84
## [103]  -92494.22  -96212.27  -92899.13  -94758.61  -90966.27  -90103.42
## [109]  -91537.62  -83530.90  -84790.96  -87141.88  -88057.44  -90030.90
## [115]  -91653.86  -89718.26  -90905.44  -94065.76  -85000.17  -85561.71
## [121]  -78470.32  -81050.46  -82377.56  -80186.98  -82690.52  -84485.74
## [127]  -85875.72  -87669.70  -89360.54  -91551.95  -94010.63  -96199.08
## [133]  -99300.28  -95361.53  -98745.87  -98195.75 -101275.88  -97120.63
## [139]  -93587.80  -93990.98  -93405.02  -86977.00  -76085.06  -75780.94
## [145]  -78186.19  -78949.68  -81530.95  -81946.33  -83634.31  -75687.52
## [151]  -78263.51  -74135.67  -75682.17  -73934.43  -76947.99  -54451.46
## [157]  -56081.40  -57001.06  -49024.49  -43008.90  -44337.32  -46898.58
## [163]  -44026.68  -45827.71  -45337.87  -45558.43  -44470.78  -44949.46
## [169]  -46685.21  -46805.90  -44507.51  -45924.62  -45893.36  -47417.55
## [175]  -44362.97  -43870.63  -45246.49  -46252.01  -45418.08  -45296.74
## [181]  -45703.79  -45649.26  -45977.71  -41339.62  -42307.91  -41031.51
## [187]  -42391.15  -43740.41  -43702.44  -42807.65  -42355.79  -43853.74
## [193]  -45340.79  -45941.20  -47037.19  -45773.58  -46192.78  -47807.54
## [199]  -49323.71  -51050.16  -51305.43  -48245.57  -47637.42  -48771.25
## [205]  -50529.23  -50670.29  -52195.69  -50662.31  -48348.72  -47929.85
## [211]  -48816.46  -47796.26  -48501.67  -48790.34  -48543.65  -45360.14
## [217]  -44729.08  -43911.77  -43091.81  -45317.89  -47139.80  -46521.02
## [223]  -47928.01  -48061.78  -48835.47  -50244.26  -50321.51  -49395.49
## [229]  -49463.54  -49360.38  -48900.16  -47079.92  -48847.51  -50392.64
## [235]  -49539.73  -50172.90  -49627.19  -51991.02  -53491.13  -51962.89
## [241]  -53506.74  -51950.91  -52567.76  -53415.41  -52074.87  -48809.81
## [247]  -48807.19  -50258.41  -53485.81  -51941.50  -51536.86  -51977.82
## [253]  -53326.76  -54720.35  -55246.36  -55130.53  -56542.30  -55663.89
## [259]  -57240.04  -58766.43  -60968.37  -63158.75  -59799.67  -55663.92
## [265]  -57592.17  -58344.40  -58834.26  -60596.06  -59648.79  -61036.49
## [271]  -62465.91  -61568.46  -60147.16  -60784.33  -61338.81  -62857.12
## [277]  -62572.27  -63014.78  -62673.58  -55526.68  -57035.12  -58897.37
## [283]  -58671.79  -61276.45  -63084.58  -63397.39  -49459.82  -47540.43
## [289]  -47988.03  -48372.84  -47676.72  -49173.77  -49142.20  -47625.62
## [295]  -48138.41  -44986.64  -42271.65  -42398.95  -42706.70  -41169.45

3.2 M) Gráfico:

  1. série do VaR’s obtido por cada um dos métodos anteriores.
  2. série temporal da variação diária da carteira entre 19/03/2018 e 14/05/2019.
    => Qual é o melhor?
# flip dos vetores
VaR_Hist_2_Grafico <- VaR_Hist_2[300:1]
VaR_Hist_2_HW_Grafico <- VaR_Hist_2_HW[300:1]

PL_Acoes_Grafico <- PL_acoes_amazon + PL_acoes_banrisul + PL_acoes_gol


ggplot()+
  geom_line(mapping = aes(x = 1:300, y = tail(PL_Acoes_Grafico, 300), colour = "PnL"))+
  geom_line(mapping = aes(x = 1:300, y = VaR_Hist_2_Grafico, colour = "VaR"))+
  geom_line(mapping = aes(x = 1:300, y = VaR_Hist_2_HW_Grafico, colour = "VaR HW"))+
  xlab("Observações")+
  ylab("Valores do PnL e VaR's")+
  #labs( PL_Acoes_Grafico = "PnL", VaR_Hist_2_Grafico = "VaR Histórico", VaR_Hist_2_HW_Grafico = "VaR Histórico HW" )
  #scale_color_discrete(name = "Legenda", labels = c("PnL", "VaR Hist", "VaR Hist HW"))
  scale_color_manual(values = c("black","springgreen4","coral3" ))+
  labs(title = "Análise do modelo", subtitle = "Série temporal da variação diária da Carteira x Série temporal do VaR")

Infere-se da análise gráfica que o VaR Histórico de HW tem uma robustez maior que o modelo tradicional de VaR Histórico. Porém, é necessário uma análise estatística para poder ratificar esta hipótese.

3.3 N) Cobertura incondicional (via Kupiec) e independência (via Christoffersen) da seqüência de violações para essas duas séries de VaR.

# Valor Cr?tico
Valor_Critico <- qchisq(0.95,1)


# //------
# Teste de Kupiec
# //------


# Estat?stica de teste VaR Hist?rico
I <- sum(VaR_Hist_2 > tail(PL_Acoes_Grafico,300))
alpha_hat <- I/300
pof <- 2*log(((1-alpha_hat)/(1-alpha))^(300-I) * (alpha_hat/alpha)^I)


# Estat?stica de teste VaR Hist?rico HW
I <- sum(VaR_Hist_2_HW > tail(PL_Acoes_Grafico,300))
alpha_hat <- I/300
pof_hw <- 2*log(((1-alpha_hat)/(1-alpha))^(300-I) * (alpha_hat/alpha)^I)



# //-----
# Teste de Christoffersen 
# //-----


# Estat?stica de teste VaR Hist?rico
I_t <- VaR_Hist_2 > tail(PL_Acoes_Grafico,300)
I_t0 <- I_t[1:299]
I_t1 <- I_t[2:300]

T00 <- sum(I_t0 == 0 & I_t1 == 0)
T01 <- sum(I_t0 == 0 & I_t1 == 1)
T10 <- sum(I_t0 == 1 & I_t1 == 0)
T11 <- sum(I_t0 == 1 & I_t1 == 1)

pi_01 <- T01/(T00 + T10)
pi_11 <- T11/(T01 + T11)
pi <- (T01 + T11)/300

L_A <- ((1 - pi_01)^T00)*(pi_01^T01)*((1-pi_11)^T10)*((pi_11)^T11)
L_0 <- ((1 - pi)^(T00 + T10))*(pi^(T01 + T11))

Est_Test_Cris_Hist <- 2*log(L_A/L_0)


# Estat?stica de teste VaR Hist?rico HW
I_t <- VaR_Hist_2_HW > tail(PL_Acoes_Grafico,300)
I_t0 <- I_t[1:299]
I_t1 <- I_t[2:300]


T00 <- sum(I_t0 == 0 & I_t1 == 0)
T01 <- sum(I_t0 == 0 & I_t1 == 1)
T10 <- sum(I_t0 == 1 & I_t1 == 0)
T11 <- sum(I_t0 == 1 & I_t1 == 1)

pi_01 <- T01/(T00 + T10)
pi_11 <- T11/(T01 + T11)
 pi <- (T01 + T11)/300

L_A <- ((1 - pi_01)^T00)*(pi_01^T01)*((1-pi_11)^T10)*((pi_11)^T11)
L_0 <- ((1 - pi)^(T00 + T10))*(pi^(T01 + T11))

Est_Test_Cris_HW <- 2*log(L_A/L_0)


# AVALIANDO MODELO DE KUPIEC
if(pof>Valor_Critico){
  paste("KUPIEC:: Para o VaR Histórico, observa-se que:", round(pof,2),">",round(Valor_Critico,2),"Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO")
}else{
  paste("KUPIEC:: Para o VaR Histórico, observa-se que:", round(pof,2),"<",round(Valor_Critico,2),"Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO")
}
## [1] "KUPIEC:: Para o VaR Histórico, observa-se que: 7.03 > 3.84 Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO"
if(pof_hw>Valor_Critico){
  paste("KUPIEC:: Para o VaR Histórico HW, observa-se que:", round(pof_hw,2),">",round(Valor_Critico,2),"Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO")
}else{
  paste("KUPIEC:: Para o VaR Histórico HW, observa-se que:", round(pof_hw,2),"<",round(Valor_Critico,2),"Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO")
}
## [1] "KUPIEC:: Para o VaR Histórico HW, observa-se que: 9.55 > 3.84 Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO"
# AVALIANDO MODELO DE CHRISTOFFERSEN
if(Est_Test_Cris_Hist>Valor_Critico){
  paste("CHRISTOFFERSEN:: Para o VaR Histórico, observa-se que:", round(Est_Test_Cris_Hist,2),">",round(Valor_Critico,2),"Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO")
}else{
  paste("CHRISTOFFERSEN:: Para o VaR Histórico, observa-se que:", round(Est_Test_Cris_Hist,2),"<",round(Valor_Critico,2),"Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO")
}
## [1] "CHRISTOFFERSEN:: Para o VaR Histórico, observa-se que: 0.04 < 3.84 Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO"
if(Est_Test_Cris_HW>Valor_Critico){
  paste("CHRISTOFFERSEN:: Para o VaR Histórico HW, observa-se que:", round(Est_Test_Cris_HW,2),">",round(Valor_Critico,2),"Verificando que a estatística do teste é maior que o valor crítico. Portanto, o modelo é INADEQUADO")
}else{
  paste("CHRISTOFFERSEN:: Para o VaR Histórico HW, observa-se que:", round(Est_Test_Cris_HW,2),"<",round(Valor_Critico,2),"Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO")
}
## [1] "CHRISTOFFERSEN:: Para o VaR Histórico HW, observa-se que: 0.14 < 3.84 Verificando que a estatística do teste é menor que o valor crítico. Portanto, o modelo é ADEQUADO"

4 RESUMO EM QUADROS DOS RESULTADOS ENCONTRADOS

4.1 Exposições

Ativo Exposição
Ação da GOL + 1.152.500
Ação do Banrisul - 1.434.000
Ação da Amazon + 1.316.705 e + 1.316.705
Put sobre USD - 813.036 e + 2.743
Futuro de USD + 1.194.488, + 57.903 e - 62.921
Eurodollar - 11.713.412 e 6.829.502
NTN-B - 2.536.572 (SOMA)

4.2 VaR Paramétrico Individual

Ativo VaR Paramétrico
Ação da GOL - 61540
Ação do Banrisul - 38152
Ação da Amazon - 27522
Put sobre USD - 10997
Futuro de USD - 16071
Eurodollar - 1827
NTN-B - 1648
CARTEIRA - 60912

4.3 VaR Incremental

Ativo VaR Incremental
Ação da GOL - 0.83
Ação do Banrisul + 0.048
Ação da Amazon - 91.04
Put sobre USD - 55.78
Futuro de USD + 116.02
Eurodollar + 65.28
NTN-B - 2.12

4.4 VaR %

Ativo VaR Percentual (em %)
Ação da GOL 68.66
Ação do Banrisul 4.78
Ação da Amazon 26.91
Put sobre USD 0.92
Futuro de USD -1.15
Eurodollar -0.53
NTN-B 0.43

4.5 VaR Histórico

Ativo VaR Paramétrico VaR Histórico
Ação da GOL - 61540 - 58213
Ação do Banrisul - 38152 - 53314
Ação da Amazon - 27522 - 44039
Put sobre USD - 10997 - 10557
Futuro de USD - 16071 - 15434
Eurodollar - 1827 - 1606
NTN-B - 1648 - 2165
CARTEIRA - 60912 - 72363

4.6 TVE

VaR Paramétrico: -60912 | VaR Histórico: -72363 | VaR TVE: -82114

4.7 ES

Expected Shortfall: -113602

4.8 Backtesting

Kupiec Christoffersen
PoF do VaR Histórico: 7.03 -> REJEITA PoF do VaR Histórico: 0.037 -> NÃO REJEITA
PoF do VaR HW: 9.55 -> REJEITA PoF do VaR HW: 0.139 -> NÃO REJEITA