knitr::opts_chunk$set(echo = TRUE)
Install library
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
Akses data saham
Karena data mengandung missing value, perlu dibersihkan terlebih
dahulu
price <- get.hist.quote(
instrument = "KLBF.JK",
start = "2024-09-15",
end = "2025-09-15",
quote = "Close",
provider = "yahoo",
compression = "d"
)
## Warning: KLBF.JK contains missing values. Some functions will not work if
## objects contain missing values in the middle of the series. Consider using
## na.omit(), na.approx(), na.fill(), etc to remove or replace them.
## time series starts 2024-09-17
## time series ends 2025-09-12
price_clean <- na.omit(price)
Data Saham KLBF 15/09/24 s.d. 15/09/25
head(price_clean)
## Close
## 2024-09-17 1705
## 2024-09-18 1750
## 2024-09-19 1730
## 2024-09-20 1720
## 2024-09-23 1735
## 2024-09-24 1745
plot(price_clean)

Menghitung Return saham
returns <- diff(log(price_clean))
head(returns)
## Close
## 2024-09-18 0.026050677
## 2024-09-19 -0.011494379
## 2024-09-20 -0.005797118
## 2024-09-23 0.008683123
## 2024-09-24 0.005747142
## 2024-09-25 -0.002869442
Cek distribusi return secara visual
hist(returns)

qqnorm(returns)
qqline(returns, col="red")

Menghitung VaR dengan varian covarian
invest <- 1000000
varcov_var <- function(returns, confidence_level, hp){
var <- mean(returns) + qnorm(confidence_level) * sd(returns)
var * sqrt(hp)
}
varcov_var(returns, 0.05, 1)
## [1] -0.04460749
Menghitung kerugian maksimum
kerugian_maksimum_1 <- varcov_var(returns, 0.05, 1) * invest
kerugian_maksimum_5 <- varcov_var(returns, 0.05, 5) * invest
kerugian_maksimum_20 <- varcov_var(returns, 0.05, 20) * invest
kerugian_maksimum_234 <- varcov_var(returns, 0.05, 234) * invest
kerugian_hari <- paste0("Kerugian maksimum dalam waktu 1 hari adalah Rp",format(abs(kerugian_maksimum_1), big.mark=".", decimal.mark=",", scientific=FALSE))
kerugian_minggu <- paste0("Kerugian maksimum dalam waktu 1 minggu adalah Rp",format(abs(kerugian_maksimum_5), big.mark=".", decimal.mark=",", scientific=FALSE))
kerugian_bulan <- paste0("Kerugian maksimum dalam waktu 1 bulan adalah Rp",format(abs(kerugian_maksimum_20), big.mark=".", decimal.mark=",", scientific=FALSE))
kerugian_tahun <- paste0("Kerugian maksimum dalam waktu 1 tahun adalah Rp",format(abs(kerugian_maksimum_234), big.mark=".", decimal.mark=",", scientific=FALSE))
kerugian_hari
## [1] "Kerugian maksimum dalam waktu 1 hari adalah Rp44.607,49"
kerugian_minggu
## [1] "Kerugian maksimum dalam waktu 1 minggu adalah Rp99.745,38"
kerugian_bulan
## [1] "Kerugian maksimum dalam waktu 1 bulan adalah Rp199.490,8"
kerugian_tahun
## [1] "Kerugian maksimum dalam waktu 1 tahun adalah Rp682.363,4"