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 %