Risk Measures
rm(list = ls())
# Required packages
library(quantmod)
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.0.2
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 4.0.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# Load stock data (e.g., Apple and Google)
getSymbols(c("AAPL", "GOOG"), from = "2022-01-01", to = "2022-12-31")
## [1] "AAPL" "GOOG"
n1 <- 500 #AAPL Num Stocks
n2 <- 1000 #GOOG Num Stocks
portfolio <- n1*Ad(AAPL) + n2*Ad(GOOG)
# Calculate portfolio returns
returns <- diff(log(portfolio))
returns <- na.omit(returns)
hist(returns)

plot(portfolio)

# 1. VaR Calculation
# Set the confidence level
confidence <- 0.95
# 1.1 Calculate VaR: Historical Return Approach
VaR1 <- quantile(returns, 1 - confidence)
# 1.2 Calculate VaR: Parametric Approach Using Normal Approximation
mean_return <- mean(returns)
std_dev <- sd(returns)
z_score <- qnorm(1 - confidence)
VaR1_norm <- mean_return + z_score * std_dev
# 2. TVaR Calculation
# 2.1 Calculate TVaR: Historical Return Approach
TVaR1 <- mean(returns[returns <= VaR1])
# 2.2 Calculate TVaR: Parametric Approach Using Normal Approximation
TVaR1_norm <- mean_return - std_dev * dnorm(z_score)/(1-confidence)
# Economic Capital
initial_investment <- 1000000
EC_VaR <- - VaR1 * initial_investment
EC_TVaR <- - TVaR1 * initial_investment
# Print results
cat("VaR:", VaR1, "at", (1 - confidence)*100, "% probability", "\n")
## VaR: -0.0375577 at 5 % probability
cat("TVaR:", TVaR1, "at", (1 - confidence)*100, "%", "\n")
## TVaR: -0.04587184 at 5 %
cat("At your initial investment =", initial_investment, "USD,", "you could lose more than", EC_VaR, "USD at", (1 - confidence)*100, "% probability. The average worst loss is", EC_TVaR, "with", (1 - confidence)*100, "% probability", "\n")
## At your initial investment = 1e+06 USD, you could lose more than 37557.7 USD at 5 % probability. The average worst loss is 45871.84 with 5 % probability
Marginal VaR and Marginal TVaR
# Calculate Marginal VaR (MVaR)
n1 <- 500 #AAPL Num Stocks
n2 <- 2000 #GOOG Num Stocks... increased from 1000 stocks
portfolio2 <- n1*Ad(AAPL) + n2*Ad(GOOG)
# Calculate portfolio returns 2
returns2 <- diff(log(portfolio2))
returns2 <- na.omit(returns2)
# Calculate VaR2
confidence <- 0.95
VaR2 <- quantile(returns2, 1 - confidence)
# Calculate TVaR2
TVaR2 <- mean(returns2[returns2 <= VaR2])
# Economic Capital
EC_VaR2 <- - VaR2 * initial_investment
EC_TVaR2 <- - TVaR2 * initial_investment
# Marginal VaR and Marginal TVaR
MVaR <- VaR2 - VaR1
MTVaR <- TVaR2 - TVaR1
# Additional Economic Capital Required
EC_MVaR <- initial_investment * MVaR
EC_MTVaR <- initial_investment * MTVaR
# Print results
cat("VaR:", VaR2, "at", (1 - confidence)*100, "% probability", "\n")
## VaR: -0.03880669 at 5 % probability
cat("TVaR:", TVaR2, "at", (1 - confidence)*100, "%", "\n")
## TVaR: -0.0481257 at 5 %
cat("MVaR:", MVaR, "at", (1 - confidence)*100, "% probability", "\n")
## MVaR: -0.001248984 at 5 % probability
cat("MTVaR:", MTVaR, "at", (1 - confidence)*100, "%", "\n")
## MTVaR: -0.00225386 at 5 %
cat("Additional Economic Capital Required for Additional Investment =", EC_MVaR, "\n")
## Additional Economic Capital Required for Additional Investment = -1248.984
cat("Additional Economic Capital Required for Additional Investment =", EC_MTVaR, "\n")
## Additional Economic Capital Required for Additional Investment = -2253.86
Appendix: Maximum Drawdown (MDD)
# Calculate Maximum Drawdown
peak <- cummax(portfolio)
drawdown_usd <- (peak - portfolio)
drawdown <- (peak - portfolio) / peak
max_drawdown <- max(drawdown)
plot(drawdown_usd)

plot(drawdown)

cat("Maximum Drawdown:", max_drawdown * 100, "%", "\n")
## Maximum Drawdown: 36.5481 %