setwd("C:/Users/YEN NHI/Documents/MPNN")
rm(list=ls()) # clear environment
library(fBasics)
## Warning: package 'fBasics' was built under R version 4.2.3
library(ggplot2)
library(xlsx)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Đọc file dữ liệu
dl <- read.xlsx("mtcl.xlsx",1)
vcb = dl$VCB
vni = dl$VNI
bid = dl$BID
shb = dl$SHB
hdb = dl$HDB
acb = dl$ACB
Mô phỏng giá các cổ phiếu nhóm ngành ngân hàng trong danh mục đầu tư, từ đó đưa ra kết quả mô phỏng của tỷ suất sinh lời và giá trị danh mục đầu tư của danh mục.
Bài nghiên cứu này mô phỏng giá các cổ phiếu được niêm yết trên sàn giao dịch cũng như tỷ suất sinh lời và giá trị danh mục đầu tư.
Chương một: Giới thiệu tổng quan nghiên cứu. Chương này giới thiệu tổng quan nghiên cứu, bao gồm: đặt vấn đề nghiên cứu, mục tiêu nghiên cứu, đối tượng nghiên cứu, phạm vi và phương pháp nghiên cứu và kết cấu bài nghiên cứu.
Chương hai: Cơ sở lý thuyết nghiên cứu. Chương này bao gồm: các khái niệm, các lý thuyết xung quanh mô phỏng Monte Carlo và thị trường chứng khoán.
Chương ba: Phương pháp nghiên cứu và dữ liệu nghiên cứu – Mô tả phương pháp nghiên cứu và nguồn dữ liệu sử dụng, xây dựng mô hình nghiên cứu, giải thích các biến có trong mô hình.
Chương bốn: Phân tích dữ liệu và kết quả nghiên cứu.
Chương năm: Kết luận. Chương này bao gồm kết luận chung của bài nghiên cứu.
Khi mô hình toán học quá phức tạp, được mô tả bởi rất nhiều phương trình và nhiều biến, ví dụ mô tả vụ nổ bom hạt nhân, thì nghiệm của mô hình là nghiệm mô phỏng, gần đúng (theo nghĩa xấp xỉ) với nghiệm thực của mô hình.
Khi mô hình toán học giả định được vận hành theo các quy luật ngẫu nhiên, thì các phương pháp mô phỏng chúng đươc gọi là mô phỏng ngẫu nhiên.
Quá trình ngẫu nhiên {B(t): t \(\geq\) 0} được gọi là chuyển động Brown, nếu:
Nếu \(\sigma\) = 1, thì {B(t): t \(\geq\) 0} là chuyển động Brown chính tắc. {B(t): t \(\geq\) 0} còn được gọi là quá trình Winner.
VNi (Chỉ số VN-Index)
\[ VNI = \beta_0 + \beta_1VCB + \beta_2BID + \beta_3SHB + \beta_4HDB + \beta_5ACB \]
Dữ liệu nghiên cứu được thu thập từ các trang web investing.com và cophieu68.vn, dữ liệu bao gồm 890 quan sát bắt đầu từ ngày 9/1/2020 đến ngày 1/8/2023 với 5 mã cổ phiếu trong nhóm ngành Ngân hàng như: VCB, BID, SHB, HDB, ACB.
summary(vcb)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 43925 69114 76413 76600 82400 106500
sd(vcb)
## [1] 11028.78
hist(vcb)
Dựa trên kết quả thống kê trên, ta thấy giá cổ phiếu Vietcombank có giá trị trung bình là 76600 đồng, giá trị trung vị là 76413 đồng. Biến VCB dao động từ giá trị nhỏ nhất là 43925 đồng đến giá trị lớn nhất là 106500 đồng, với độ lệch chuẩn là 11028,78 đồng.
shapiro.test(vcb)
##
## Shapiro-Wilk normality test
##
## data: vcb
## W = 0.98504, p-value = 6.905e-08
ks.test(vcb, y=pexp)
## Warning in ks.test.default(vcb, y = pexp): ties should not be present for the
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: vcb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(vcb, y = 'punif')
## Warning in ks.test.default(vcb, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: vcb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(vcb, y = 'plnorm')
## Warning in ks.test.default(vcb, y = "plnorm"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: vcb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Sau khi kiểm định các phân phối gồm: phân phối chuẩn, phân phối mũ, phân phối đều và phân phối loga chuẩn cho biến VCB, ta thấy P_value < 0,05, nên ta bác bỏ \(H_0\), tức là biến VCB không tuân theo các quy luật phân phối trên.
summary(bid)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 23970 31908 35150 36375 40236 49000
sd(bid)
## [1] 5448.574
hist(bid)
Dựa trên kết quả thống kê trên, ta thấy giá cổ phiếu BIDV có giá trị trung bình là 36375 đồng, giá trị trung vị là 35150 đồng. Biến BID dao động từ giá trị nhỏ nhất là 23970 đồng đến giá trị lớn nhất là 49000 đồng, với độ lệch chuẩn là 5448,574 đồng.
shapiro.test(bid)
##
## Shapiro-Wilk normality test
##
## data: bid
## W = 0.94711, p-value < 2.2e-16
ks.test(bid, y=pexp)
## Warning in ks.test.default(bid, y = pexp): ties should not be present for the
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: bid
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(bid, y = 'punif')
## Warning in ks.test.default(bid, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: bid
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(bid, y = 'plnorm')
## Warning in ks.test.default(bid, y = "plnorm"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: bid
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Sau khi kiểm định các phân phối gồm: phân phối chuẩn, phân phối mũ, phân phối đều và phân phối loga chuẩn cho biến BID, ta thấy P_value < 0,05, nên ta bác bỏ \(H_0\), tức là biến BID không tuân theo các quy luật phân phối trên.
summary(shb)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3893 10295 11765 13212 17520 22859
sd(shb)
## [1] 4243.949
hist(shb)
Dựa trên kết quả thống kê trên, ta thấy giá cổ phiếu SHB có giá trị trung bình là 13212 đồng, giá trị trung vị là 11765 đồng. Biến SHB dao động từ giá trị nhỏ nhất là 3893 đồng đến giá trị lớn nhất là 22859 đồng, với độ lệch chuẩn là 4243,949 đồng.
shapiro.test(shb)
##
## Shapiro-Wilk normality test
##
## data: shb
## W = 0.90939, p-value < 2.2e-16
ks.test(shb, y=pexp)
## Warning in ks.test.default(shb, y = pexp): ties should not be present for the
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: shb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(shb, y = 'punif')
## Warning in ks.test.default(shb, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: shb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(shb, y = 'plnorm')
## Warning in ks.test.default(shb, y = "plnorm"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: shb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Sau khi kiểm định các phân phối gồm: phân phối chuẩn, phân phối mũ, phân phối đều và phân phối loga chuẩn cho biến SHB, ta thấy P_value < 0,05, nên ta bác bỏ \(H_0\), tức là biến SHB không tuân theo các quy luật phân phối trên.
summary(hdb)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 6691 13728 18350 17190 20480 26800
sd(hdb)
## [1] 4589.172
hist(hdb)
Dựa trên kết quả thống kê trên, ta thấy giá cổ phiếu HDB có giá trị trung bình là 17190 đồng, giá trị trung vị là 18350 đồng. Biến HDB dao động từ giá trị nhỏ nhất là 6691 đồng đến giá trị lớn nhất là 26800 đồng, với độ lệch chuẩn là 4589,172 đồng.
shapiro.test(hdb)
##
## Shapiro-Wilk normality test
##
## data: hdb
## W = 0.95324, p-value = 3.351e-16
ks.test(hdb, y=pexp)
## Warning in ks.test.default(hdb, y = pexp): ties should not be present for the
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: hdb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(hdb, y = 'punif')
## Warning in ks.test.default(hdb, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: hdb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(hdb, y = 'plnorm')
## Warning in ks.test.default(hdb, y = "plnorm"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: hdb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Sau khi kiểm định các phân phối gồm: phân phối chuẩn, phân phối mũ, phân phối đều và phân phối loga chuẩn cho biến HDB, ta thấy P_value < 0,05, nên ta bác bỏ \(H_0\), tức là biến HDB không tuân theo các quy luật phân phối trên.
summary(acb)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 8763 17408 22900 21100 25350 30360
sd(acb)
## [1] 5675.872
hist(acb)
Dựa trên kết quả thống kê trên, ta thấy giá cổ phiếu HDB có giá trị trung bình là 21100 đồng, giá trị trung vị là 22900 đồng. Biến ACB dao động từ giá trị nhỏ nhất là 8763 đồng đến giá trị lớn nhất là 30360 đồng, với độ lệch chuẩn là 5675.872 đồng.
shapiro.test(acb)
##
## Shapiro-Wilk normality test
##
## data: acb
## W = 0.88974, p-value < 2.2e-16
ks.test(acb, y=pexp)
## Warning in ks.test.default(acb, y = pexp): ties should not be present for the
## Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: acb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(acb, y = 'punif')
## Warning in ks.test.default(acb, y = "punif"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: acb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
ks.test(acb, y = 'plnorm')
## Warning in ks.test.default(acb, y = "plnorm"): ties should not be present for
## the Kolmogorov-Smirnov test
##
## Asymptotic one-sample Kolmogorov-Smirnov test
##
## data: acb
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
Sau khi kiểm định các phân phối gồm: phân phối chuẩn, phân phối mũ, phân phối đều và phân phối loga chuẩn cho biến ACB, ta thấy P_value < 0,05, nên ta bác bỏ \(H_0\), tức là biến ACB không tuân theo các quy luật phân phối trên.
set.seed(121)
r_vcb = (dl$VCB - lag(dl$VCB, n=1))/lag(dl$VCB,n=1)
r_vcb <- na.omit(r_vcb)
gbm.f = function(n,S0,mu,sigma){
t = 1
t.s = seq(0,t,length = n)
dt = t/n
Bt = sqrt(t)*cumsum(rnorm((n),0,1))
St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
St # Kết quả của GBM
}
n <- 10000
S0 <- vcb[1]
mu <- (1/(n*(1/n)))*sum(r_vcb) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((r_vcb - mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
VCB <- gbm.f(n,S0,mu,sigma)
plot(VCB, type = 'l', col = 'blue', main = "Giá cổ phiếu VCB", ylab = "đồng", xlab = "Ngày")
set.seed(121)
r_bid = (dl$BID - lag(dl$BID))/lag(dl$BID)
r_bid <- na.omit(r_bid)
gbm.f = function(n,S0,mu,sigma){
t = 1
t.s = seq(0,t,length = n)
dt = t/n
Bt = sqrt(t)*cumsum(rnorm((n),0,1))
St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
St # Kết quả của GBM
}
n <- 10000
S0 <- bid[1]
mu <- (1/(n*(1/n)))*sum(r_bid) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((r_bid - mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
BID <- gbm.f(n,S0,mu,sigma)
plot(BID, type = 'l', col = 'blue', main = "Giá cổ phiếu BID", ylab = "đồng", xlab = "Ngày")
set.seed(121)
r_shb = (dl$SHB - lag(dl$SHB))/lag(dl$SHB)
r_shb <- na.omit(r_shb)
gbm.f = function(n,S0,mu,sigma){
t = 1
t.s = seq(0,t,length = n)
dt = t/n
Bt = sqrt(t)*cumsum(rnorm((n),0,1))
St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
St # Kết quả của GBM
}
n <- 10000
S0 <- shb[1]
mu <- (1/(n*(1/n)))*sum(r_shb) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((r_shb - mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
SHB <- gbm.f(n,S0,mu,sigma)
plot(SHB, type = 'l', col = 'blue', main = "Giá cổ phiếu SHB", ylab = "đồng", xlab = "Ngày")
set.seed(121)
r_hdb = (dl$HDB - lag(dl$HDB))/lag(dl$HDB)
r_hdb <- na.omit(r_hdb)
gbm.f = function(n,S0,mu,sigma){
t = 1
t.s = seq(0,t,length = n)
dt = t/n
Bt = sqrt(t)*cumsum(rnorm((n),0,1))
St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
St # Kết quả của GBM
}
n <- 10000
S0 <- hdb[1]
mu <- (1/(n*(1/n)))*sum(r_hdb) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((r_hdb - mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
HDB <- gbm.f(n,S0,mu,sigma)
plot(HDB, type = 'l', col = 'blue', main = "Giá cổ phiếu HDB", ylab = "đồng", xlab = "Ngày")
set.seed(121)
r_acb = (dl$ACB - lag(dl$ACB))/lag(dl$ACB)
r_acb <- na.omit(r_acb)
gbm.f = function(n,S0,mu,sigma){
t = 1
t.s = seq(0,t,length = n)
dt = t/n
Bt = sqrt(t)*cumsum(rnorm((n),0,1))
St = S0*exp((mu-sigma^2/2)*t.s + sigma*Bt)
St # Kết quả của GBM
}
n <- 10000
S0 <- acb[1]
mu <- (1/(n*(1/n)))*sum(r_acb) #tính lợi nhuận kỳ vọng giá
sigma <- sqrt((sum((r_acb - mu)^2))*(1/(n-1)*(1/n))) #tính độ biến động giá
ACB <- gbm.f(n,S0,mu,sigma)
plot(ACB, type = 'l', col = 'blue', main = "Giá cổ phiếu ACB", ylab = "đồng", xlab = "Ngày")
mh <- lm(dl$VNI ~ dl$VCB + dl$BID + dl$SHB + dl$ACB + dl$HDB, data = dl)
summary(mh)
##
## Call:
## lm(formula = dl$VNI ~ dl$VCB + dl$BID + dl$SHB + dl$ACB + dl$HDB,
## data = dl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -163.764 -38.842 -8.628 41.325 143.207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.540e+02 1.644e+01 27.620 < 2e-16 ***
## dl$VCB -2.645e-03 4.545e-04 -5.818 8.34e-09 ***
## dl$BID 2.314e-03 7.546e-04 3.066 0.00223 **
## dl$SHB 1.188e-02 8.260e-04 14.384 < 2e-16 ***
## dl$ACB -1.188e-02 1.392e-03 -8.531 < 2e-16 ***
## dl$HDB 5.230e-02 1.829e-03 28.586 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 58.22 on 883 degrees of freedom
## Multiple R-squared: 0.9252, Adjusted R-squared: 0.9248
## F-statistic: 2186 on 5 and 883 DF, p-value: < 2.2e-16
vni <- 4.540e+02 - 2.645e-03*VCB +2.314e-03*BID +1.188e-02*SHB + 5.23e-02*HDB - 1.188e-02*ACB
plot(vni, type = 'l', col = 'blue', main = "Chỉ số VN-Index", ylab = "điểm", xlab = "Ngày")
vni1 = (vni - lag(vni))
phientanggia <- vni1[vni1 > 0]
phiengiamgia <- vni1[vni1 < 0]
length(phientanggia)
## [1] 5185
length(phiengiamgia)
## [1] 4816
vni <- cut(vni, breaks = c(min(vni), mean(vni),max(vni)), labels = c('thap','cao'))
table(vni)/sum(table(vni))
## vni
## thap cao
## 0.450445 0.549555
Thông qua bảng tần suất và biểu đồ về chỉ số VN-Index, được mô phỏng bởi 5 mã cổ phiếu Ngân hàng, ta thấy chỉ số VN-Index có ngày vượt mốc qua 1400 điểm và thấp nhất xấp xỉ 800 điểm, có thể thấy từ biểu đồ thì chỉ số VNI có xu hướng biến động lớn, nhưng các phiên có chỉ số trên 1000 điểm là hơn 6000 ngày. Trong đó, xác suất VNI thấp là 0,450445 và xác suất VNI cao là 0,549555. Chỉ số VNI sau mô phỏng có 5185 phiên tăng giá và 4816 phiên giảm giá.