Langkah 1: Load Packages
# Load libraries
library(quantmod) # Untuk mengambil data saham
library(ggplot2) # Untuk plotting
library(forecast) # Untuk time series forecasting
library(TTR) # Untuk indikator teknikal (RSI, MACD, dll.)
library(tseries) # Untuk uji stasioneritas (ADF test)
Langkah 2: Ambil Data dari Yahoo Finance
# Ambil data BBRI.JK (Bank Rakyat Indonesia)
getSymbols("BBRI.JK", src = "yahoo", from = "2023-01-01", to = Sys.Date())
[1] "BBRI.JK"
# Simpan data ke dataframe
bbri <- data.frame(Date = index(BBRI.JK), coredata(BBRI.JK))
colnames(bbri) <- c("Date", "Open", "High", "Low", "Close", "Volume", "Adjusted")
head(bbri)
Langkah 3: Plot Harga Historis
# Plot harga penutupan (Close Price)
ggplot(bbri, aes(x = Date, y = Close)) +
geom_line(color = "steelblue", linewidth = 1) +
scale_x_date(
date_breaks = "1 month", # Label tiap 1 bulan
date_labels = "%b %Y", # Format: "Jun 2023"
guide = guide_axis(angle = 45) # Rotasi label 45°
) +
labs(title = "BBRI.JK: Harga Harian (2023-Sekarang)",
x = "Tanggal", y = "Harga Penutupan (IDR)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))

Interpretasi:
Tren naik/turun/bergerak sideways (sesuaikan dengan pola yang
terlihat).
Jika ada lonjakan volume, bisa mengkonfirmasi breakout atau
reversal.
Langkah 4: Analisis Teknikal (RSI & Moving Average)
# Hitung RSI (14 hari)
bbri$RSI <- RSI(bbri$Close, n = 14)
# Hitung Moving Average 50 hari dan 200 hari
bbri$MA50 <- SMA(bbri$Close, n = 50)
bbri$MA200 <- SMA(bbri$Close, n = 200)
ggplot(bbri, aes(x = Date, y = RSI)) +
geom_line(color = "purple", linewidth = 0.8) +
geom_hline(yintercept = 70, linetype = "dashed", color = "red") +
geom_hline(yintercept = 30, linetype = "dashed", color = "green") +
scale_x_date(
date_breaks = "1 month", # Label per bulan
date_labels = "%b %Y", # Format: "Jun 2023"
expand = c(0, 0) # Hilangkan margin kosong
) +
labs(
title = "Indikator RSI 14 Hari BBRI.JK",
subtitle = "Level Overbought (>70) dan Oversold (<30)",
x = "Tanggal (Bulan-Tahun)",
y = "Nilai RSI"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1), # Miringkan label
plot.title = element_text(face = "bold")
)

Interpretasi:
RSI > 70: Overbought (potensi jual).
RSI < 30: Oversold (potensi beli).
Golden Cross (MA50 > MA200): Sinyal bullish.
Death Cross (MA50 < MA200): Sinyal bearish.
Langkah 5: Prediksi Harga dengan ARIMA
# Konversi data ke time series
ts_data <- ts(bbri$Close, frequency = 252) # 252 hari trading per tahun
# Uji stasioneritas (ADF Test)
adf.test(ts_data) # Jika p-value < 0.05, data stasioner
Augmented Dickey-Fuller Test
data: ts_data
Dickey-Fuller = -2.3043, Lag order = 8, p-value = 0.4495
alternative hypothesis: stationary
# Fit ARIMA model
arima_model <- auto.arima(ts_data)
summary(arima_model)
Series: ts_data
ARIMA(0,1,0)
sigma^2 = 7651: log likelihood = -3433.99
AIC=6869.98 AICc=6869.99 BIC=6874.35
Training set error measures:
ME RMSE MAE MPE MAPE MASE ACF1
Training set -1.772483 87.39302 65.36793 -0.05894346 1.375678 0.06256657 -0.03481964
# Prediksi 30 hari ke depan
forecast_data <- forecast(arima_model, h = 30)
autoplot(forecast_data) +
labs(title = "Prediksi Harga BBRI.JK (30 Hari ke Depan)", x = "Hari", y = "Harga") +
theme_minimal()

Interpretasi:
ARIMA(p,d,q): Model terbaik dipilih secara otomatis.
Confidence interval (abu-abu): Rentang ketidakpastian
prediksi.
Langkah 6: Analisis Volatilitas (ATR)
# Hitung ATR (pakai solusi 1)
atr_data <- ATR(bbri[, c("High", "Low", "Close")], n = 14)
bbri$ATR <- atr_data[, "atr"]
ggplot(bbri, aes(x = Date, y = ATR)) +
geom_line(color = "red") +
scale_x_date(
date_breaks = "2 weeks", # Label tiap 2 minggu
date_labels = "%d %b" # Format: "05 Jun"
) +
labs(title = "Volatilitas BBRI (ATR 14 Hari)", x = "Tanggal", y = "ATR") +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) # Label vertikal

Output:
Garis merah (ATR) yang naik menunjukkan peningkatan
volatilitas.
Korelasi antara lonjakan ATR dan pergerakan harga ekstrem bisa
dilihat.
Interpretasi ATR untuk BBRI.JK:
ATR tinggi (misal > 5% dari harga saham):
Menunjukkan volatilitas tinggi → Potensi peluang trading
(breakout/swing), tetapi risiko juga besar.Contoh: Jika BBRI memiliki
ATR 200 IDR dan harga 5,000 IDR, berarti pergerakan harian rata-rata
±4%.
ATR rendah:
Pasar sedang konsolidasi → Kurang menarik untuk trader
harian.
Catatan Penting: ATR tidak menunjukkan arah tren, hanya
volatilitas.
Lebih efektif jika dikombinasikan dengan indikator lain (contoh:
Parabolic SAR atau Bollinger Bands).
LS0tDQp0aXRsZTogIkFuYWxpc2lzIEt1YW50aXRhdGlmIFNhaGFtIEJCUkkuSks6IFBlbmRla2F0YW4gVGVrbmlrYWwsIFN0YXRpc3RpaywgZGFuIFByZWRpa3NpIFRpbWUgU2VyaWVzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgTGFuZ2thaCAxOiBMb2FkIFBhY2thZ2VzDQoNCmBgYHtyfQ0KDQojIExvYWQgbGlicmFyaWVzDQpsaWJyYXJ5KHF1YW50bW9kKSAgICAjIFVudHVrIG1lbmdhbWJpbCBkYXRhIHNhaGFtDQpsaWJyYXJ5KGdncGxvdDIpICAgICAjIFVudHVrIHBsb3R0aW5nDQpsaWJyYXJ5KGZvcmVjYXN0KSAgICAjIFVudHVrIHRpbWUgc2VyaWVzIGZvcmVjYXN0aW5nDQpsaWJyYXJ5KFRUUikgICAgICAgICAjIFVudHVrIGluZGlrYXRvciB0ZWtuaWthbCAoUlNJLCBNQUNELCBkbGwuKQ0KbGlicmFyeSh0c2VyaWVzKSAgICAgIyBVbnR1ayB1amkgc3Rhc2lvbmVyaXRhcyAoQURGIHRlc3QpDQoNCmBgYA0KDQojIyBMYW5na2FoIDI6IEFtYmlsIERhdGEgZGFyaSBZYWhvbyBGaW5hbmNlDQoNCmBgYHtyfQ0KIyBBbWJpbCBkYXRhIEJCUkkuSksgKEJhbmsgUmFreWF0IEluZG9uZXNpYSkNCmdldFN5bWJvbHMoIkJCUkkuSksiLCBzcmMgPSAieWFob28iLCBmcm9tID0gIjIwMjMtMDEtMDEiLCB0byA9IFN5cy5EYXRlKCkpDQoNCiMgU2ltcGFuIGRhdGEga2UgZGF0YWZyYW1lDQpiYnJpIDwtIGRhdGEuZnJhbWUoRGF0ZSA9IGluZGV4KEJCUkkuSkspLCBjb3JlZGF0YShCQlJJLkpLKSkNCmNvbG5hbWVzKGJicmkpIDwtIGMoIkRhdGUiLCAiT3BlbiIsICJIaWdoIiwgIkxvdyIsICJDbG9zZSIsICJWb2x1bWUiLCAiQWRqdXN0ZWQiKQ0KaGVhZChiYnJpKQ0KYGBgDQoNCiMjIExhbmdrYWggMzogUGxvdCBIYXJnYSBIaXN0b3Jpcw0KDQpgYGB7cn0NCiMgUGxvdCBoYXJnYSBwZW51dHVwYW4gKENsb3NlIFByaWNlKQ0KZ2dwbG90KGJicmksIGFlcyh4ID0gRGF0ZSwgeSA9IENsb3NlKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAic3RlZWxibHVlIiwgbGluZXdpZHRoID0gMSkgKw0KICBzY2FsZV94X2RhdGUoDQogICAgZGF0ZV9icmVha3MgPSAiMSBtb250aCIsICAgICMgTGFiZWwgdGlhcCAxIGJ1bGFuDQogICAgZGF0ZV9sYWJlbHMgPSAiJWIgJVkiLCAgICAgICMgRm9ybWF0OiAiSnVuIDIwMjMiDQogICAgZ3VpZGUgPSBndWlkZV9heGlzKGFuZ2xlID0gNDUpICAjIFJvdGFzaSBsYWJlbCA0NcKwDQogICkgKw0KICBsYWJzKHRpdGxlID0gIkJCUkkuSks6IEhhcmdhIEhhcmlhbiAoMjAyMy1TZWthcmFuZykiLCANCiAgICAgICB4ID0gIlRhbmdnYWwiLCB5ID0gIkhhcmdhIFBlbnV0dXBhbiAoSURSKSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCg0KYGBgDQoNCioqSW50ZXJwcmV0YXNpOioqDQoNCi0gICBUcmVuIG5haWsvdHVydW4vYmVyZ2VyYWsgc2lkZXdheXMgKHNlc3VhaWthbiBkZW5nYW4gcG9sYSB5YW5nIHRlcmxpaGF0KS4NCg0KLSAgIEppa2EgYWRhIGxvbmpha2FuIHZvbHVtZSwgYmlzYSBtZW5na29uZmlybWFzaSBicmVha291dCBhdGF1IHJldmVyc2FsLg0KDQojIyBMYW5na2FoIDQ6IEFuYWxpc2lzIFRla25pa2FsIChSU0kgJiBNb3ZpbmcgQXZlcmFnZSkNCg0KYGBge3J9DQojIEhpdHVuZyBSU0kgKDE0IGhhcmkpDQpiYnJpJFJTSSA8LSBSU0koYmJyaSRDbG9zZSwgbiA9IDE0KQ0KDQojIEhpdHVuZyBNb3ZpbmcgQXZlcmFnZSA1MCBoYXJpIGRhbiAyMDAgaGFyaQ0KYmJyaSRNQTUwIDwtIFNNQShiYnJpJENsb3NlLCBuID0gNTApDQpiYnJpJE1BMjAwIDwtIFNNQShiYnJpJENsb3NlLCBuID0gMjAwKQ0KDQpnZ3Bsb3QoYmJyaSwgYWVzKHggPSBEYXRlLCB5ID0gUlNJKSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSAicHVycGxlIiwgbGluZXdpZHRoID0gMC44KSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDcwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICJyZWQiKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDMwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvciA9ICJncmVlbiIpICsNCiAgc2NhbGVfeF9kYXRlKA0KICAgIGRhdGVfYnJlYWtzID0gIjEgbW9udGgiLCAgICAgICAgICAjIExhYmVsIHBlciBidWxhbg0KICAgIGRhdGVfbGFiZWxzID0gIiViICVZIiwgICAgICAgICAgICAjIEZvcm1hdDogIkp1biAyMDIzIg0KICAgIGV4cGFuZCA9IGMoMCwgMCkgICAgICAgICAgICAgICAgICAjIEhpbGFuZ2thbiBtYXJnaW4ga29zb25nDQogICkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkluZGlrYXRvciBSU0kgMTQgSGFyaSBCQlJJLkpLIiwNCiAgICBzdWJ0aXRsZSA9ICJMZXZlbCBPdmVyYm91Z2h0ICg+NzApIGRhbiBPdmVyc29sZCAoPDMwKSIsDQogICAgeCA9ICJUYW5nZ2FsIChCdWxhbi1UYWh1bikiLA0KICAgIHkgPSAiTmlsYWkgUlNJIg0KICApICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoDQogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwgICMgTWlyaW5na2FuIGxhYmVsDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiKQ0KICApDQpgYGANCg0KKipJbnRlcnByZXRhc2k6KioNCg0KLSAgIFJTSSBcPiA3MDogT3ZlcmJvdWdodCAocG90ZW5zaSBqdWFsKS4NCg0KLSAgIFJTSSBcPCAzMDogT3ZlcnNvbGQgKHBvdGVuc2kgYmVsaSkuDQoNCi0gICBHb2xkZW4gQ3Jvc3MgKE1BNTAgXD4gTUEyMDApOiBTaW55YWwgYnVsbGlzaC4NCg0KLSAgIERlYXRoIENyb3NzIChNQTUwIFw8IE1BMjAwKTogU2lueWFsIGJlYXJpc2guDQoNCiMjIExhbmdrYWggNTogUHJlZGlrc2kgSGFyZ2EgZGVuZ2FuIEFSSU1BDQoNCmBgYHtyfQ0KIyBLb252ZXJzaSBkYXRhIGtlIHRpbWUgc2VyaWVzDQp0c19kYXRhIDwtIHRzKGJicmkkQ2xvc2UsIGZyZXF1ZW5jeSA9IDI1MikgICMgMjUyIGhhcmkgdHJhZGluZyBwZXIgdGFodW4NCg0KIyBVamkgc3Rhc2lvbmVyaXRhcyAoQURGIFRlc3QpDQphZGYudGVzdCh0c19kYXRhKSAgIyBKaWthIHAtdmFsdWUgPCAwLjA1LCBkYXRhIHN0YXNpb25lcg0KDQojIEZpdCBBUklNQSBtb2RlbA0KYXJpbWFfbW9kZWwgPC0gYXV0by5hcmltYSh0c19kYXRhKQ0Kc3VtbWFyeShhcmltYV9tb2RlbCkNCg0KIyBQcmVkaWtzaSAzMCBoYXJpIGtlIGRlcGFuDQpmb3JlY2FzdF9kYXRhIDwtIGZvcmVjYXN0KGFyaW1hX21vZGVsLCBoID0gMzApDQphdXRvcGxvdChmb3JlY2FzdF9kYXRhKSArDQogIGxhYnModGl0bGUgPSAiUHJlZGlrc2kgSGFyZ2EgQkJSSS5KSyAoMzAgSGFyaSBrZSBEZXBhbikiLCB4ID0gIkhhcmkiLCB5ID0gIkhhcmdhIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQoqKkludGVycHJldGFzaToqKg0KDQotICAgQVJJTUEocCxkLHEpOiBNb2RlbCB0ZXJiYWlrIGRpcGlsaWggc2VjYXJhIG90b21hdGlzLg0KDQotICAgQ29uZmlkZW5jZSBpbnRlcnZhbCAoYWJ1LWFidSk6IFJlbnRhbmcga2V0aWRha3Bhc3RpYW4gcHJlZGlrc2kuDQoNCiMjIExhbmdrYWggNjogQW5hbGlzaXMgVm9sYXRpbGl0YXMgKEFUUikNCg0KYGBge3J9DQojIEhpdHVuZyBBVFIgKHBha2FpIHNvbHVzaSAxKQ0KYXRyX2RhdGEgPC0gQVRSKGJicmlbLCBjKCJIaWdoIiwgIkxvdyIsICJDbG9zZSIpXSwgbiA9IDE0KQ0KYmJyaSRBVFIgPC0gYXRyX2RhdGFbLCAiYXRyIl0NCg0KZ2dwbG90KGJicmksIGFlcyh4ID0gRGF0ZSwgeSA9IEFUUikpICsNCiAgZ2VvbV9saW5lKGNvbG9yID0gInJlZCIpICsNCiAgc2NhbGVfeF9kYXRlKA0KICAgIGRhdGVfYnJlYWtzID0gIjIgd2Vla3MiLCAgICMgTGFiZWwgdGlhcCAyIG1pbmdndQ0KICAgIGRhdGVfbGFiZWxzID0gIiVkICViIiAgICAgICMgRm9ybWF0OiAiMDUgSnVuIg0KICApICsNCiAgbGFicyh0aXRsZSA9ICJWb2xhdGlsaXRhcyBCQlJJIChBVFIgMTQgSGFyaSkiLCB4ID0gIlRhbmdnYWwiLCB5ID0gIkFUUiIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUpKSAgIyBMYWJlbCB2ZXJ0aWthbA0KDQpgYGANCg0KKipPdXRwdXQ6KioNCg0KLSAgIEdhcmlzIG1lcmFoIChBVFIpIHlhbmcgbmFpayBtZW51bmp1a2thbiBwZW5pbmdrYXRhbiB2b2xhdGlsaXRhcy4NCg0KLSAgIEtvcmVsYXNpIGFudGFyYSBsb25qYWthbiBBVFIgZGFuIHBlcmdlcmFrYW4gaGFyZ2EgZWtzdHJlbSBiaXNhIGRpbGloYXQuDQoNCi0gICBJbnRlcnByZXRhc2kgQVRSIHVudHVrIEJCUkkuSks6DQoNCi0gICBBVFIgdGluZ2dpIChtaXNhbCBcPiA1JSBkYXJpIGhhcmdhIHNhaGFtKToNCg0KLSAgIE1lbnVuanVra2FuIHZvbGF0aWxpdGFzIHRpbmdnaSDihpIgUG90ZW5zaSBwZWx1YW5nIHRyYWRpbmcgKGJyZWFrb3V0L3N3aW5nKSwgdGV0YXBpIHJpc2lrbyBqdWdhIGJlc2FyLkNvbnRvaDogSmlrYSBCQlJJIG1lbWlsaWtpIEFUUiAyMDAgSURSIGRhbiBoYXJnYSA1LDAwMCBJRFIsIGJlcmFydGkgcGVyZ2VyYWthbiBoYXJpYW4gcmF0YS1yYXRhIMKxNCUuDQoNCioqQVRSIHJlbmRhaDoqKg0KDQotICAgUGFzYXIgc2VkYW5nIGtvbnNvbGlkYXNpIOKGkiBLdXJhbmcgbWVuYXJpayB1bnR1ayB0cmFkZXIgaGFyaWFuLg0KDQotICAgQ2F0YXRhbiBQZW50aW5nOiBBVFIgdGlkYWsgbWVudW5qdWtrYW4gYXJhaCB0cmVuLCBoYW55YSB2b2xhdGlsaXRhcy4NCg0KLSAgIExlYmloIGVmZWt0aWYgamlrYSBkaWtvbWJpbmFzaWthbiBkZW5nYW4gaW5kaWthdG9yIGxhaW4gKGNvbnRvaDogUGFyYWJvbGljIFNBUiBhdGF1IEJvbGxpbmdlciBCYW5kcykuDQo=