This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
library(terra)
## terra 1.8.42
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following object is masked from 'package:terra':
##
## time<-
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
library(fBasics)
##
## Attaching package: 'fBasics'
## The following object is masked from 'package:TTR':
##
## volatility
## The following object is masked from 'package:terra':
##
## stdev
#DATA SAHAM
getSymbols("BBCA.JK", from="2026-01-01", to="2026-03-31")
## [1] "BBCA.JK"
getSymbols("BBRI.JK", from="2026-01-01", to="2026-03-31")
## [1] "BBRI.JK"
getSymbols("TLKM.JK", from="2026-01-01", to="2026-03-31")
## [1] "TLKM.JK"
getSymbols("ASII.JK", from="2026-01-01", to="2026-03-31")
## [1] "ASII.JK"
# CLOSING PRICE
closeBBCA <- Cl(BBCA.JK)
closeBBRI <- Cl(BBRI.JK)
closeTLKM <- Cl(TLKM.JK)
closeASII <- Cl(ASII.JK)
# RETURN LOG
BBCA.ret <- diff(log(closeBBCA))
BBRI.ret <- diff(log(closeBBRI))
TLKM.ret <- diff(log(closeTLKM))
ASII.ret <- diff(log(closeASII))
# GABUNG & BERSIHKAN DATA
returns <- merge(BBCA.ret, BBRI.ret, TLKM.ret, ASII.ret)
returns <- na.omit(returns)
colnames(returns) <- c("BBCA","BBRI","TLKM","ASII")
# CEK DATA
head(returns)
## BBCA BBRI TLKM ASII
## 2026-01-05 0.006211200 -0.002751033 0.031208206 0.010969031
## 2026-01-06 0.012307848 0.013680104 -0.016901811 0.003629768
## 2026-01-07 -0.003062790 0.005420067 0.005665738 0.017953804
## 2026-01-08 -0.012345836 0.002699057 -0.002828856 -0.003565066
## 2026-01-09 0.009273637 -0.008119124 -0.022923640 -0.018018506
## 2026-01-12 -0.012384059 0.005420067 0.020086759 0.018018506
colSums(is.na(returns))
## BBCA BBRI TLKM ASII
## 0 0 0 0
#statistik deskriptif
summary(returns)
## Index BBCA BBRI
## Min. :2026-01-05 Min. :-0.065428 Min. :-0.062098
## 1st Qu.:2026-01-23 1st Qu.:-0.016921 1st Qu.:-0.008584
## Median :2026-02-11 Median :-0.003350 Median :-0.002635
## Mean :2026-02-12 Mean :-0.004122 Mean :-0.001510
## 3rd Qu.:2026-03-04 3rd Qu.: 0.009274 3rd Qu.: 0.005420
## Max. :2026-03-30 Max. : 0.032203 Max. : 0.051572
## TLKM ASII
## Min. :-0.127026 Min. :-0.097374
## 1st Qu.:-0.016902 1st Qu.:-0.018623
## Median : 0.000000 Median :-0.007463
## Mean :-0.002496 Mean :-0.001292
## 3rd Qu.: 0.014815 3rd Qu.: 0.015152
## Max. : 0.078781 Max. : 0.129212
basicStats(returns)
## BBCA BBRI TLKM ASII
## nobs 53.000000 53.000000 53.000000 53.000000
## NAs 0.000000 0.000000 0.000000 0.000000
## Minimum -0.065428 -0.062098 -0.127026 -0.097374
## Maximum 0.032203 0.051572 0.078781 0.129212
## 1. Quartile -0.016921 -0.008584 -0.016902 -0.018623
## 3. Quartile 0.009274 0.005420 0.014815 0.015152
## Mean -0.004122 -0.001510 -0.002496 -0.001292
## Median -0.003350 -0.002635 0.000000 -0.007463
## Sum -0.218482 -0.080043 -0.132297 -0.068468
## SE Mean 0.002542 0.002314 0.004338 0.005033
## LCL Mean -0.009223 -0.006154 -0.011202 -0.011392
## UCL Mean 0.000978 0.003134 0.006209 0.008808
## Variance 0.000342 0.000284 0.000997 0.001343
## Stdev 0.018505 0.016849 0.031583 0.036643
## Skewness -0.531835 -0.233862 -1.007913 0.475554
## Kurtosis 0.770019 2.797366 3.424827 2.483440
#equal weight
weights <- c(0.25, 0.25, 0.25, 0.25)
port_return <- returns %*% weights
mean_port_return <- mean(port_return)
sd_port <- sd(port_return)
mean_port_return
## [1] -0.002355137
sd_port
## [1] 0.01989
#mean variance
library(quadprog)
mean_returns <- colMeans(returns)
cov_matrix <- cov(returns)
n <- ncol(returns)
Dmat <- 2 * cov_matrix
dvec <- rep(0, n)
Amat <- cbind(rep(1, n), diag(n))
bvec <- c(1, rep(0, n))
opt <- solve.QP(Dmat, dvec, Amat, bvec, meq=1)
weights_mv <- opt$solution
weights_mv
## [1] 3.220785e-01 6.757067e-01 -1.734723e-18 2.214734e-03
return_mv <- sum(weights_mv * mean_returns)
risk_mv <- sqrt(t(weights_mv) %*% cov_matrix %*% weights_mv)
return_mv
## [1] -0.002351042
risk_mv
## [,1]
## [1,] 0.01632599
#VaR
alpha <- 0.05
mean_eq <- mean(port_return)
sd_eq <- sd(port_return)
VaR_eq <- -(mean_eq + qnorm(alpha) * sd_eq)
port_return_mv <- returns %*% weights_mv
VaR_mv <- -(mean(port_return_mv) + qnorm(alpha) * sd(port_return_mv))
initial_investment <- 120000000
VaR_eq_rp <- initial_investment * VaR_eq
VaR_mv_rp <- initial_investment * VaR_mv
VaR_eq_rp
## [1] 4208553
VaR_mv_rp
## [1] 3504588
#profit inves
cum_return_eq <- prod(1 + port_return) - 1
cum_return_mv <- prod(1 + port_return_mv) - 1
final_eq <- 120000000 * (1 + cum_return_eq)
final_mv <- 120000000 * (1 + cum_return_mv)
profit_eq <- final_eq - 120000000
profit_mv <- final_mv - 120000000
profit_eq
## [1] -15191245
profit_mv
## [1] -14813699
#ANALISIS 3 SAHAM
returns_3 <- returns[, c("BBCA","BBRI","TLKM")]
#equal weight
weights_3 <- c(1/3, 1/3, 1/3)
port_return_3 <- returns_3 %*% weights_3
mean_3 <- mean(port_return_3)
sd_3 <- sd(port_return_3)
mean_3
## [1] -0.002709568
sd_3
## [1] 0.01873929
#mean variance
mean_returns_3 <- colMeans(returns_3)
cov_matrix_3 <- cov(returns_3)
n3 <- ncol(returns_3)
Dmat_3 <- 2 * cov_matrix_3
dvec_3 <- rep(0, n3)
Amat_3 <- cbind(rep(1, n3), diag(n3))
bvec_3 <- c(1, rep(0, n3))
opt_3 <- solve.QP(Dmat_3, dvec_3, Amat_3, bvec_3, meq=1)
weights_mv_3 <- opt_3$solution
return_mv_3 <- sum(weights_mv_3 * mean_returns_3)
risk_mv_3 <- sqrt(t(weights_mv_3) %*% cov_matrix_3 %*% weights_mv_3)
return_mv_3
## [1] -0.002355023
risk_mv_3
## [,1]
## [1,] 0.01632615
#var
port_return_mv_3 <- returns_3 %*% weights_mv_3
VaR_3 <- -(mean(port_return_3) + qnorm(0.05)*sd(port_return_3))
VaR_mv_3 <- -(mean(port_return_mv_3) + qnorm(0.05)*sd(port_return_mv_3))
VaR_3_rp <- 120000000 * VaR_3
VaR_mv_3_rp <- 120000000 * VaR_mv_3
VaR_3_rp
## [1] 4023955
VaR_mv_3_rp
## [1] 3505098
#profit
cum_3 <- prod(1 + port_return_3) - 1
cum_mv_3 <- prod(1 + port_return_mv_3) - 1
profit_3 <- 120000000 * cum_3
profit_mv_3 <- 120000000 * cum_mv_3
profit_3
## [1] -17041832
profit_mv_3
## [1] -14835992
#perbandingan
comparison <- data.frame(
Portofolio = c("4 Saham Equal","4 Saham MV","3 Saham Equal","3 Saham MV"),
Return = c(mean_port_return, return_mv, mean_3, return_mv_3),
Risiko = c(sd_port, risk_mv, sd_3, risk_mv_3),
VaR = c(VaR_eq_rp, VaR_mv_rp, VaR_3_rp, VaR_mv_3_rp),
Profit = c(profit_eq, profit_mv, profit_3, profit_mv_3)
)
comparison
## Portofolio Return Risiko VaR Profit
## 1 4 Saham Equal -0.002355137 0.01989000 4208553 -15191245
## 2 4 Saham MV -0.002351042 0.01632599 3504588 -14813699
## 3 3 Saham Equal -0.002709568 0.01873929 4023955 -17041832
## 4 3 Saham MV -0.002355023 0.01632615 3505098 -14835992