1. Pendahuluan

Dalam investasi pasar modal, diversifikasi adalah kunci untuk meminimalisasi risiko tanpa harus mengorbankan tingkat imbal hasil (return). Analisis ini menggunakan pendekatan Modern Portfolio Theory (MPT) dari Harry Markowitz untuk menyusun portofolio optimal dari tiga saham bluechip di Indonesia: PT Bank Central Asia Tbk (BBCA), PT Bank Rakyat Indonesia Tbk (BBRI), dan PT Telkom Indonesia Tbk (TLKM).

Tugas komputasi ini bertujuan untuk mencari proporsi bobot investasi terbaik menggunakan Simulasi Monte Carlo. Terdapat dua metrik utama yang dihitung dalam simulasi ini:

Ekspektasi Return Portofolio: \[E(R_p) = \sum_{i=1}^{n} w_i E(R_i)\]

Varians Portofolio (Risiko): \[\sigma_p^2 = \sum_{i=1}^{n} \sum_{j=1}^{n} w_i w_j Cov(R_i, R_j)\]

Untuk menentukan titik portofolio paling optimal, digunakan pengukuran Sharpe Ratio yang membandingkan kelebihan return terhadap risiko, dengan asumsi tingkat suku bunga bebas risiko (risk-free rate) sebesar 5% per tahun.

Sharpe Ratio: \[Sharpe\ Ratio = \frac{E(R_p) - R_f}{\sigma_p}\]

2. Pengumpulan Data

Data harga saham penutupan harian diambil secara langsung (real-time) dari Yahoo Finance menggunakan paket quantmod untuk periode 1 Januari 2023 hingga 28 Februari 2026.

# Memuat paket yang diperlukan
library(quantmod)
library(ggplot2)

# Mengambil data saham dari Yahoo Finance
symbols <- c("BBCA.JK", "BBRI.JK", "TLKM.JK")
getSymbols(symbols, from = "2023-01-01", to = "2026-02-28", periodicity = "daily")
## [1] "BBCA.JK" "BBRI.JK" "TLKM.JK"
# Menggabungkan harga penutupan dan menghapus nilai NA
prices <- merge(Cl(BBCA.JK), Cl(BBRI.JK), Cl(TLKM.JK))
colnames(prices) <- c("BBCA", "BBRI", "TLKM")
returns <- na.omit(ROC(prices, type = "discrete"))

# Menampilkan 5 data return pertama untuk memastikan data masuk
head(returns)
##                    BBCA         BBRI        TLKM
## 2023-01-03  0.000000000 -0.004106776  0.01578947
## 2023-01-04 -0.023391813 -0.016494845 -0.01036269
## 2023-01-05 -0.011976048 -0.027253669 -0.01308901
## 2023-01-06  0.006060606 -0.004310345 -0.01591512
## 2023-01-09  0.018072289 -0.006493506  0.02156334
## 2023-01-10 -0.032544379 -0.034858388  0.01055409
# Untuk mengecek jumlah baris dan kolom data
print(dim(returns))
## [1] 749   3
# Untuk mengecek rata-rata return
print(colMeans(returns))
##          BBCA          BBRI          TLKM 
## -1.221751e-04 -1.175791e-04  9.481086e-05

3. Komputasi Simulasi Monte Carlo

R akan melakukan 5.000 iterasi untuk menghasilkan kombinasi bobot portofolio yang berbeda secara acak.

set.seed(123) 
num_portfolios <- 5000
risk_free_rate <- 0.05 

# Menyiapkan vektor penyimpanan
port_returns <- vector("numeric", length = num_portfolios)
port_risk <- vector("numeric", length = num_portfolios)
sharpe_ratio <- vector("numeric", length = num_portfolios)
all_weights <- matrix(nrow = num_portfolios, ncol = 3)
colnames(all_weights) <- c("BBCA", "BBRI", "TLKM")

# Parameter statistik
mean_returns <- colMeans(returns)
cov_matrix <- cov(returns)

# Looping simulasi
for (i in 1:num_portfolios) {
  # Membuat bobot acak yang totalnya 100%
  weights <- runif(3)
  weights <- weights / sum(weights)
  all_weights[i, ] <- weights
  
  # Return disetahunkan (asumsi 252 hari kerja)
  port_ret <- sum(weights * mean_returns) * 252
  port_returns[i] <- port_ret
  
  # Risiko disetahunkan
  port_sd <- sqrt(t(weights) %*% cov_matrix %*% weights) * sqrt(252)
  port_risk[i] <- port_sd
  
  # Menghitung Sharpe Ratio
  sharpe_ratio[i] <- (port_ret - risk_free_rate) / port_sd
}

# Membuat Data Frame dari hasil simulasi
portfolio_data <- data.frame(Return = port_returns, Risk = port_risk, Sharpe = sharpe_ratio, all_weights)

4. Hasil dan Visualisasi Efficient Frontier

Dari ribuan kombinasi bobot yang dihasilkan, kita mengekstraksi satu kombinasi yang menghasilkan Sharpe Ratio tertinggi. Titik ini merupakan portofolio optimal.

# Identifikasi Portofolio Optimal (Max Sharpe Ratio)
max_sharpe_idx <- which.max(portfolio_data$Sharpe)
optimal_portfolio <- portfolio_data[max_sharpe_idx, ]

# Menampilkan proporsi bobot optimal
print(optimal_portfolio)
##         Return      Risk      Sharpe        BBCA       BBRI      TLKM
## 2289 0.0221991 0.3022935 -0.09196659 0.005382534 0.02613709 0.9684804
# Plotting Efficient Frontier
ggplot(portfolio_data, aes(x = Risk, y = Return, color = Sharpe)) +
  geom_point(alpha = 0.5, size = 1.5) +
  scale_color_gradient(low = "red", high = "blue") +
  geom_point(data = optimal_portfolio, aes(x = Risk, y = Return), color = "gold", size = 5, shape = 18) +
  labs(title = "Efficient Frontier: Simulasi Monte Carlo",
       subtitle = "Titik emas menunjukkan Portofolio Optimal (Max Sharpe Ratio)",
       x = "Risiko Portofolio (Standar Deviasi)",
       y = "Ekspektasi Return Portofolio") +
  theme_minimal()

5. Interpretasi dan Kesimpulan

Berdasarkan komputasi Simulasi Monte Carlo dengan 5.000 iterasi menggunakan data historis periode 1 Januari 2023 hingga 28 Februari 2026, sebaran titik-titik kombinasi bobot berhasil membentuk kurva Efficient Frontier.

Titik emas (gold diamond) pada grafik menunjukkan portofolio optimal yang menghasilkan nilai Sharpe Ratio paling maksimal secara matematis. Berdasarkan output komputasi, komposisi bobot portofolio optimal tersebut adalah:

1. TLKM: 96.85%

2. BBRI: 2.61%

3. BBCA: 0.54%

Kombinasi ini menghasilkan Ekspektasi Return sebesar 2.22% dengan tingkat Risiko (Volatilitas) sebesar 30.23%. Nilai Sharpe Ratio yang dihasilkan adalah -0.09 (negatif).

Terdapat beberapa temuan analitis dari komputasi ini:

1. Fenomena Corner Solution (Ketimpangan Bobot)

Hasil simulasi menunjukkan alokasi bobot yang sangat ekstrem, di mana hampir seluruh modal (96.85%) dialokasikan pada satu saham saja (TLKM). Fenomena ini dikenal sebagai Corner Solution. Hal ini terjadi karena model optimasi Markowitz murni bersifat Unconstrained Optimization (optimasi tanpa batas). Algoritma secara “buta” mencari nilai Sharpe Ratio tertinggi berdasarkan matriks kovarians dan rata-rata return historis, tanpa mempedulikan prinsip dasar diversifikasi risiko. Nilai Sharpe Ratio yang negatif juga mengindikasikan bahwa pada periode waktu tersebut, kinerja portofolio tidak mampu mengungguli tingkat suku bunga bebas risiko (asumsi 5%). Oleh karena itu, algoritma memusatkan bobot pada aset yang secara matematis dianggap paling mampu menahan penurunan rasio tersebut.

2. Sensitivitas Terhadap Periode Waktu (Error Maximization)

Analisis ini membuktikan kelemahan fundamental dari Modern Portfolio Theory (MPT), yaitu sensitivitas ekstrem terhadap input data (time frame). Pergeseran rentang tanggal pengambilan data dalam hitungan bulan dapat mengubah rata-rata return dan matriks kovarians secara signifikan, yang berujung pada perubahan drastis pada rekomendasi bobot optimal. Model ini sering kali memaksimalkan kesalahan (error maximization) karena berasumsi bahwa kinerja masa lalu adalah cerminan pasti dari masa depan.

Kesimpulan Akhir: Simulasi komputasi R ini berhasil memetakan batas efisien (Efficient Frontier) dari ketiga saham bluechip tersebut. Namun, hasil optimasi matematis dasar ini tidak dapat diimplementasikan secara mentah. Untuk menciptakan portofolio yang benar-benar optimal dan tangguh (robust) di dunia nyata, simulasi perlu dilengkapi dengan Constrained Optimization seperti menetapkan batas maksimal alokasi per saham (misalnya maksimal 40%) agar prinsip diversifikasi tetap terjaga, serta menggunakan kombinasi metode lain yang tidak hanya bergantung sepenuhnya pada data historis jangka pendek.