# AMD (Advanced Micro Devices) - Бином ба GBM симуляци
# Хугацаа: 2025-02-04 – 2026-02-04

# 1. Package
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 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(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.1.6
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.2.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first()  masks xts::first()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ dplyr::last()   masks xts::last()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# 2. Өгөгдөл татах
symbol <- "AMD"
start_date <- as.Date("2025-02-04")
end_date   <- as.Date("2026-02-04")

getSymbols(symbol, from = start_date, to = end_date)
## [1] "AMD"
data <- Cl(AMD)
data <- na.omit(data)

log_returns <- diff(log(data))
log_returns <- na.omit(log_returns)

# Үзүүлэлтүүд
mu    <- mean(log_returns)
sigma <- sd(log_returns)

S0 <- as.numeric(last(data))
n  <- length(log_returns)

cat("Эхний үнэ S0 =", S0, "\n")
## Эхний үнэ S0 = 242.11
cat("mu =", mu, "\n")
## mu = 0.002824303
cat("sigma =", sigma, "\n")
## sigma = 0.03726343
# 3. БИНОМ ЗАГВАР (50 симуляци)

set.seed(123)

N  <- n
dt <- 1/252
u  <- exp(sigma * sqrt(dt))
d  <- 1/u
p  <- (exp(mu*dt) - d) / (u - d)

simulations <- 50
binom_paths <- matrix(0, nrow = N, ncol = simulations)

for (j in 1:simulations) {
  S <- S0
  for (i in 1:N) {
    if (runif(1) < p) {
      S <- S * u
    } else {
      S <- S * d
    }
    binom_paths[i, j] <- S
  }
}

# Бином эцсийн үнэ
binom_final <- binom_paths[N, ]

cat("\n------ БИНОМ ЗАГВАР ------\n")
## 
## ------ БИНОМ ЗАГВАР ------
cat("Дундаж =", mean(binom_final), "\n")
## Дундаж = 243.8804
cat("Std Dev =", sd(binom_final), "\n")
## Std Dev = 6.409944
cat("95% интервал =",
    quantile(binom_final, 0.025), " - ",
    quantile(binom_final, 0.975), "\n")
## 95% интервал = 232.0933  -  256.1413
# График
matplot(binom_paths, type="l", lty=1,
        main="AMD - Бином загвар (50 симуляци)",
        xlab="Хугацаа (өдөр)",
        ylab="Үнэ")
grid()

# 4. ГЕОМЕТР БРОУНЫ ХӨДӨЛГӨӨН (GBM)

gbm_paths <- matrix(0, nrow = N, ncol = simulations)

for (j in 1:simulations) {
  S <- S0
  for (i in 1:N) {
    Z <- rnorm(1)
    S <- S * exp((mu - 0.5*sigma^2)*dt + sigma*sqrt(dt)*Z)
    gbm_paths[i, j] <- S
  }
}

# GBM эцсийн үнэ
gbm_final <- gbm_paths[N, ]

cat("\n------ GBM ЗАГВАР ------\n")
## 
## ------ GBM ЗАГВАР ------
cat("Дундаж =", mean(gbm_final), "\n")
## Дундаж = 241.5566
cat("Std Dev =", sd(gbm_final), "\n")
## Std Dev = 8.367094
cat("95% интервал =",
    quantile(gbm_final, 0.025), " - ",
    quantile(gbm_final, 0.975), "\n")
## 95% интервал = 225.5974  -  256.7188
# График
matplot(gbm_paths, type="l", lty=1,
        main="AMD - Геометр Броуны хөдөлгөөн (50 симуляци)",
        xlab="Хугацаа (өдөр)",
        ylab="Үнэ")
grid()

# 5. ХАРЬЦУУЛАЛТ

cat("\n====== ХАРЬЦУУЛАЛТ ======\n")
## 
## ====== ХАРЬЦУУЛАЛТ ======
cat("Бином дундаж эцсийн үнэ =", mean(binom_final), "\n")
## Бином дундаж эцсийн үнэ = 243.8804
cat("Броун дундаж эцсийн үнэ   =", mean(gbm_final), "\n")
## Броун дундаж эцсийн үнэ   = 241.5566
cat("Одоогийн бодит үнэ =", S0, "\n")
## Одоогийн бодит үнэ = 242.11
# 6. ХАМГИЙН САЙН СИМУЛЯЦИ СОНГОХ


# Бином дундаж зам
binom_mean_path <- rowMeans(binom_paths)

# Броун
gbm_mean_path <- rowMeans(gbm_paths)

best_binom_index <- which.min(abs(binom_final - mean(binom_final)))
best_gbm_index   <- which.min(abs(gbm_final - mean(gbm_final)))

best_binom_path <- binom_paths[, best_binom_index]
best_gbm_path   <- gbm_paths[, best_gbm_index]


# 7. НЭГТГЭСЭН ГРАФИК


plot(binom_mean_path, type="l", lwd=3,
     col="blue",
     ylim=range(c(binom_mean_path, gbm_mean_path)),
     main="AMD - Бином vs Броун ",
     xlab="Өдөр", ylab="Үнэ")

lines(gbm_mean_path, col="red", lwd=3)

legend("topleft",
       legend=c("Бином (дундаж)",
                "Броун (дундаж)",
                "Бином (хамгийн сайн)",
                "Броун (хамгийн сайн)"),
       col=c("blue","red","blue","red"),
       lty=c(1,1,2,2),
       lwd=3)

grid()