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 |
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")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")Calcular o VaR dessa carteira em 15/05/2019 (abertura)
## 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 )
fatoressigma <- cov_ewma(fatores)
df_sigma <- round(as.data.frame(sigma),6)
df_sigmaO 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
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_indPrimeiro 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"
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
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
# 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
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)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_histComparativo 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 ))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
# 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_ntnbn <- length(PL_carteira)
ind_cenarios <- (n-499):n
VaR_Historico <- quantile(PL_carteira[ind_cenarios], 0.05)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"
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
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"
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"
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
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
# 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.
# 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"
| 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) |
| 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 |
| 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 |
| 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 |
| 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 |
VaR Paramétrico: -60912 | VaR Histórico: -72363 | VaR TVE: -82114
Expected Shortfall: -113602
| 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 |