R Markdown

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