library(readxl)
## Warning: package 'readxl' was built under R version 3.6.3
library(mixtools)
## Warning: package 'mixtools' was built under R version 3.6.3
## mixtools package, version 1.2.0, Released 2020-02-05
## This package is based upon work supported by the National Science Foundation under Grant No. SES-0518772.
library(sn)
## Loading required package: stats4
##
## Attaching package: 'sn'
## The following object is masked from 'package:stats':
##
## sd
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.6.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
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.6.3
library(VGAM)
## Warning: package 'VGAM' was built under R version 3.6.3
## Loading required package: splines
##
## Attaching package: 'VGAM'
## The following object is masked from 'package:sn':
##
## zeta
Đề tài nghiên cứu nhằm đạt được các mục tiêu chính như sau:
Danh mục đầu tư nhóm ngành bất động sản bao gồm 6 chỉ số giá cổ phiếu BĐS được niêm yết trên sàn HOSE.
Không gian: thị trường chứng khoán Việt Nam
Thời gian: 01/01/2019 - 24/03/2023
Bài tiểu luận sử dụng phương pháp Monte Carlo để tính giá trị rủi ro của danh mục đầu tư nhóm ngành BĐS.
Khi đầu tư vào mỗi loại tài sản, ta đều có thể gặp phải 2 loại rủi ro: rủi ro hệ thống (rủi ro thị trường) và rủi ro phi hệ thống của các tài sản thành phần.
Rủi ro hệ thống là loại rủi ro tác động lên tất cả các tài sản trong danh mục nói riêng và lên tất cả những tài sản cấu thành nên thị trường. Các nhân tố có thể gây nên loại rủi ro này gồm có giá chứng khoán, lãi vay, tỷ giá hối đoái hay giá cả các loại hàng hóa căn bản…
Rủi ro phi hệ thống độc lập với những hiện tượng tác động lên toàn bộ tài sản trên thị trường. Nó chỉ là những rủi ro đặc trưng riêng có của một vài chứng khoán: quản lý doanh nghiệp yếu kém, hỏa hoạn phá hủy nhà xưởng hay tiến bộ khoa học kỹ thuật làm một số loại sản phẩm bị lỗi thời …Rủi ro phi hệ thống có thể loại trừ bằng việc đa dạng hóa.
Rủi ro của danh mục phụ thuộc vào rủi ro từng chứng khoán thành phần và hệ số tương quan giữa những chứng khoán này với nhau. Nếu số lượng chứng khoán cấu thành nên danh mục đủ lớn thì rủi ro danh mục lúc này chỉ còn phụ thuộc vào hệ số tương quan giữa những chứng khoán thành phần.Khái niệm “Giá trị tại rủi ro – VaR” có nguồn gốc từ lĩnh vực bảo hiểm. Sau đó, nó được du nhập vào thị trường tài chính Mỹ nhờ ngân hàng “Bankers Trust” trong những năm 1980 của thế kỷ này. Tuy nhiên, người có công lớn nhất trong trong việc thực tiễn hóa khái niệm VaR lại là ngân hàng thương mại JPMorgan của Mỹ vào những năm 1994.
Nguồn gốc hình thành nên những cơ sở khoa học đầu tiên về VaR xuất phát từ những báo cáo về hoạt động trên thị trường tài chính của JPMorgan mà ngài chủ tịch lúc đó – Dennis Weatherstones đã yêu cầu các chuyên viên của mình phải thực hiện hàng ngày. Ông Weatherstones muốn có được một cái nhìn tổng quát về rủi ro của từng vị thế khác nhau mà JPMorgan đang thực hiện.
Ngoài ra, việc sử dụng VaR còn được khuyến khích bởi “Nhóm Ba Mươi” vào năm 1993 – tập hợp những định chế tài chính lớn trên thế giới – nhằm kiểm soát rủi ro của từng thành viên. Thật ra, việc tính toán rủi ro thị trường đã dần trở nên phổ biến ở các ngân hàng trong nhiều năm trước đó vì 2 nguyên nhân: Thứ nhất, kết quả kinh doanh của họ ngày càng bị ảnh hưởng nhiều bởi những hoạt động trên thị trường tài chính; thứ hai, nhiều vị thế trên thị trường, ví dụ như vị thế khi đầu tư vào sản phẩm phái sinh, có thể gây nguy hiểm cho sự phát triển lâu dài và bền vững của họ.
Vào năm 1994, JPMorgan cho ra đời hệ thống RiskMetrics và chia sẻ nó với tất cả mọi người trên thế giới hoàn toàn miễn phí thông qua trang web www.riskmetrics.com . Sau một thời gian hoạt động, RiskMetrics sát nhập vào Reuters – một tập đoàn mạnh về thông tin tài chính để cho ra đời một đơn vị chuyên cung cấp cơ sở dữ liệu về tài chính và các phương pháp cần thiết để tính toán VaR cho danh mục đầu tư. Những công ty tài chính và những doanh nghiệp khác cũng có thể sử dụng dịch vụ này để tính toán VaR theo RiskMetrics hoặc thu thập số liệu để quản trị rủi ro cho riêng mình.
Tuy những cơ sở khoa học đầu tiên về VaR được hình thành từ môi trường ngân hàng, song sự phát triển của VaR lại được thăng hoa thông qua việc sử dụng VaR của các định chế tài chính chuyên nghiệp (quỹ đầu tư, công ty tài chính) để quản trị rủi ro cho hoạt động đầu tư của họ.VaR là một phương pháp đo lường khoản lỗ tiềm năng cho một công ty, một quỹ, một danh mục, một giao dịch, hay một chiến lược tài chính. Nó thường thể hiện bằng phần trăm hay bằng đơn vị tiền. Bất kể tại vị thế nào có thể gây ra lỗ cũng là mục tiêu để tính bằng phương pháp đo lường VaR. VaR thường được dùng nhiều để đo lường mức lỗ trong rủi ro thị trường, nhưng nó cũng có thể được dùng để đo lường rủi ro tín dụng và một số loại rủi ro khác.
Chúng ta hiểu rằng VaR là một cách đo lường rủi ro dựa trên xác suất của khả năng lỗ giới hạn. Định nghĩa này là rất chung chung. Tuy nhiên, nếu nói một cách rõ ràng hơn, giá trị có rủi ro là một ước lượng của mức lỗ (số tiền tối thiểu bị lỗ) mà chúng ta kì vọng vượt quá với một xác suất cho sẵn trong một thời kì cụ thể nào đó.
Ta xem xét ví dụ sau về VaR của một danh mục đầu tư: VaR của 1 danh mục là 1.5 triệu USD cho một ngày với xác suất là 0.05. Diễn tả lại bằng một cách khác: có 5% khả năng mà danh mục sẽ mất ít nhất 1.5 triệu USD trong một ngày, nghĩa là trên thực tế 1.5 triệu USD là mức thấp nhất bị lỗ. Với một sự quan tâm đáng kể, có thể diễn tả VaR với ý nghĩa xác suất lớn nhất xảy ra: với xác suất 95% khoản lỗ không vượt quá 1.5 triệu USD nội trong một ngày.
Mặc dù VaR trở thành một tiêu chuẩn đánh giá thông dụng cho doanh nghiệp, nhưng nó có thể được thực hiện với nhiều hình thức khác nhau, và xây dựng một cách đo lường VaR thích hợp đòi hỏi người sử dụng phải quyết định rất nhiều trong cấu trúc tính toán. Ba thông số quan trọng nhất là phải lấy được một độ tin cậy, xác định khoảng thời gian đo lường VaR, và chọn một cách tiếp cận xác định để mô hình hóa phân bố lời lỗ.
Xác suất được chọn thông thường là 0.05 hoặc 0.01 (tương đương với 95% hay 99% mức độ tin cậy). Sử dụng mức 0.01 dẫn đến một sự ước lượng VaR khá thận trọng, vì nó định ra con số mà tại mức nơi đáng lý ra chỉ có 1 % xác suất bị lỗ thì sẽ xấu hơn là mức VaR đã tính.
Quyết định quan trọng thứ hai đối với người sử dụng VaR là chọn được khoảng thời gian. VaR thường đo lường trên một ngày, nhưng khác lạ là khoảng thời gian dài thường thông dụng hơn. Các định chế ngân hàng thích chu kì thời gian 2 tuần. Nhiều công ty báo cáo VaR theo quý và năm để thích hợp với chu kỳ báo cáo hoạt động kinh doanh. Ngân hàng đầu tư, các quỹ đầu cơ, và những nhà giao dịch (dealer) có vẻ thích đo lường VaR theo ngày, có lẽ vì vị thế của họ có mức luân chuyển vốn cao. Bất kể khoảng thời gian nào được chọn, nếu thời gian càng dài, con số VaR sẽ càng lớn vì trọng số của mức lỗ mong đợi thay đổi trực tiếp với thời gian dài mà nó đo lường. Một cá nhân hay một tổ chức chịu trách nhiệp quản trị rủi ro sẽ chọn khoảng thời gian riêng.
Giá trị tại rủi ro là một phương pháp đưa ra một cái nhìn tổng thể về rủi ro thông qua xác suất và cả những tính toán định lượng. Nói cách khác, VaR là một sự đo lường bằng tiền về rủi ro. Như vậy, việc lựa chọn đơn vị tiền tệ là rất quan trọng để trả lời cho câu hỏi: “Số tiền mà tôi có thể bị lỗ trong một khoảng thời gian là bao nhiêu?”.
Có nhiều phương pháp để tính toán giá trị rủi ro của danh mục bao gồm: phương pháp phương sai - hiệp phương sai, mô phỏng lịch sử, mô phỏng Monte Carlo,..Bài tiểu luận lựa chọn phương pháp mô phỏng Monte Carlo để tính giá trị rủi ro danh mục đầu tư nhóm ngành BĐS.Về tống quát, mô phỏng Monte Carlo đưa ra những kết quả ngẫu nhiên nên ta có thể kiểm tra cái gì xảy ra sẽ tạo loại rủi ro như thế nào. Phương pháp này được sử dụng rộng rãi cả trong nhiều ngành khoa học cũng như trong kinh doanh để phát hiện ra nhiều những vấn đề khác nhau. Trong thế giới tài chính những năm gần đây, đây đã trở thành một kĩ thuật cực kì quan trọng để đo lường rủi ro. Monte Carlo đưa ra nhiều kết quả ngẫu nhiên nhờ vào những phân phối xác suất được giả định và một loạt những biến số đầu vào. Chúng ta theo đó phân tích những kết quả để tìm ra rủi ro liên quan với những sự kiện. Khi đánh giá VaR, ta dùng mô phỏng Monte Carlo để đưa ra những TSSL danh mục một cách ngẫu nhiên. Sau đó tổng hợp những TSSL này thành một tóm tắt bằng phân phối từ đó chúng ta có thể xác định tại mức dưới 5% (hay 1%, nếu thích hợp) của những kết quả TSSL xuất hiện. Tiếp đó ta thể hiện bằng giá trị của danh mục để đạt được kết quả VaR.
Trình tự thực hiện:
Xác định phân phối và thực hiện mô phỏng cho các biến đầu vào (Bài tiểu luận có biến đầu vào là giá cổ phiếu, trong trường hợp không tìm ra phân phối cho các biến đầu vào, tác giả sẽ sử dụng mô hình Geometric Brownian Motion để thực hiện mô phỏng giá cổ phiếu)
Xác định mô hình mô phỏng.
Thiết lập dự báo yếu tố đầu ra là tỷ suất sinh lời của danh mục với số quan sát là 10000. Từ đó tính giá trị VaR của danh mục và thống kê kết quả.
Bài tiểu luận sử dụng mô hình GBM để mô phỏng giá cổ phiếu dưới giả định phân phối chuẩn và phân phối ghép
Một quá trình ngẫu nhiên thời gian liên tục {Bt : t > 0} là một Chuyển động Brown (quá trình Wiener) nếu với một số hằng số thực ε^2 nào đó, nó thoả mãn các tính chất sau:
Với t > 0, sự thay đổi \[\Delta B = B_{t+\Delta t}-B_t\] trong khoảng thời gian \[\Delta t\] được xác định
\[\Delta B = Z \sqrt{\Delta t}\] Z là biến ngẫu nhiên có phân phối chuẩn N(0,1)
Giá trị ∆B đối với 2 khoảng thời gian gian ngắn bất kì là độc lập (Ví dụ: Bt+∆t – Bt và Bs+∆s – Bs với 0 ≤ s ≤ t là độc lập )
Do đó, ta có công thức mô phỏng BM (Brown motion) là:
\[ B_{N}=\sqrt{\frac{t} {n}}\sum_{i=1}^{n} Z_i=\sqrt{\frac{t} {n}}F_{Z}(z) \] trong đó
Bn là biến ngẫu nhiên chuyển động Brown chuẩn (the standard BM random variable).
√t/n là độ lệch chuẩn của BM, Zi(i = 1, 2, ..., n) được phân phối theo phân phối chuẩn N(0, 1).
Từ đây có thể suy ra:
\[ B_{NN}=\sqrt{\frac{t} {n}}F_{Z1}(z1) \]
\[ B_{NL}=\sqrt{\frac{t} {n}}F_{Z2}(z2) \]
Trong đó:
Dẫn xuất mô hình Chuyển động Brown hình học (GBM)
Giả sử St biểu thị lợi nhuận cổ phiếu tại thời điểm t. Mô hình GBM thỏa mãn phương trình vi phân ngẫu nhiên (SDE) sau đây:
\[ dS_t = \theta S_t dt + \epsilon S_tdB_t \] Trong đó:
Sau khi thực hiện một loạt biến đổi ta được kết quả (Kết quả chứng minh ở phụ lục) như sau:
\[ S_t= S_{0}\exp((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{t}) (1) \]
Sử dụng mô hình GBM trong Phương trình (1), ta có mô hình GBM dưới giả định phân phối chuẩn và phân phối ghép như sau:
Mô hình 1:
\[ S_{(N)_t} = S_{0}\exp((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{N}) \]
Mô hình 2:
\[ S_{(NN)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NN}\right) \]
Mô hình 3:
\[ S_{(NL)_t} = S_{0} \exp\left((\theta-\frac{\epsilon^2}{2})t + \epsilon B_{NL}\right) \]
Trong đó:
Tương ứng với 3 phương trình mô phỏng giá cổ phiếu theo GBM dưới giả định phân phối chuẩn, phân phối ghép ta có được 3 kết quả VaR của danh mục tương ứng. \[ VaR = V_{p}*percentile(R_P, \alpha) \] Trong đó:
\[ R_{P}=\sum_{i=1}^{n} w_{i}R_{i} \] Trong đó:
cam<-file.choose()
rm<-read_excel(cam)
rm1<- rm %>% select(KDH, DIG, DXG, VHM, NVL, VIC)
summary(rm1)
## KDH DIG DXG VHM
## Min. :14124 Min. : 6592 Min. : 6739 Min. :40900
## 1st Qu.:18833 1st Qu.: 8651 1st Qu.:11800 1st Qu.:58212
## Median :24000 Median :14800 Median :14900 Median :64905
## Mean :27144 Mean :22194 Mean :17675 Mean :64977
## 3rd Qu.:35500 3rd Qu.:27041 3rd Qu.:21109 3rd Qu.:73491
## Max. :51636 Max. :98197 Max. :46750 Max. :88722
## NVL VIC
## Min. :10250 Min. : 52500
## 1st Qu.:31932 1st Qu.: 78873
## Median :35214 Median : 93422
## Mean :49516 Mean : 90104
## 3rd Qu.:78000 3rd Qu.:104000
## Max. :92366 Max. :128000
Từ kết quả thống kê mô tả cho thấy:
Giá cổ phiếu KDH có giá trị nhỏ nhất là 14124; giá trị lớn nhất là 51636; giá trị trung bình là 27144; giá trị tứ phân vị thứ nhất là 18833, giá trị trung vị là 24000, giá trị phân vị thứ ba là 35500
Giá cổ phiếu DIG có giá trị nhỏ nhất là 6592; giá trị lớn nhất là 98197; giá trị trung bình là 22194;giá trị tứ phân vị thứ nhất là 8651, giá trị trung vị là 14800, giá trị phân vị thứ ba là 27041
Giá cổ phiếu DXG có giá trị nhỏ nhất là 6739; giá trị lớn nhất là 46750; giá trị trung bình là 17675; giá trị tứ phân vị thứ nhất là 11800, giá trị trung vị là 14900, giá trị tứ phân vị thứ ba là 21109
Giá cổ phiếu VHM có giá trị nhỏ nhất là 40900; giá trị lớn nhất là 88722; giá trị trung bình là 64977; giá trị tứ phân vị thứ nhất là 58212, giá trị trung vị là 64905, giá trị tứ phân vị thứ ba là 73491
Giá cổ phiếu NVL có giá trị nhỏ nhất là 10250; giá trị lớn nhất là 92366; giá trị trung bình là 49516;; giá trị tứ phân vị thứ nhất là 31932, giá trị trung vị là 35214, giá trị tứ phân vị thứ ba là 78000
Giá cổ phiếu VIC có giá trị nhỏ nhất là 52500; giá trị lớn nhất là 12800; giá trị trung bình là 90104;; giá trị tứ phân vị thứ nhất là 78873, giá trị trung vị là 93422, giá trị tứ phân vị thứ ba là 104000
Sau đây tôi sẽ đi kiểm định một số phân phối thông dụng cho 6 biến này.
Vẽ đồ thị histogram
hist(rm1$KDH)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$KDH)
##
## Shapiro-Wilk normality test
##
## data: rm1$KDH
## W = 0.87824, p-value < 2.2e-16
Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
ks.test(rm1$KDH, y = "plnorm", meanlog = mean(log(rm1$KDH)), sdlog = sd(log(rm1$KDH)))
## Warning in ks.test(rm1$KDH, y = "plnorm", meanlog = mean(log(rm1$KDH)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$KDH
## D = 0.17337, p-value < 2.2e-16
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu KDH có phân phối loga chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn
Vẽ đồ thị histogram
hist(rm1$DIG)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$DIG)
##
## Shapiro-Wilk normality test
##
## data: rm1$DIG
## W = 0.7499, p-value < 2.2e-16
Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
ks.test(rm1$DIG, y = "plnorm",meanlog = mean(log(rm1$DIG)), sdlog = sd(log(rm1$DIG)))
## Warning in ks.test(rm1$DIG, y = "plnorm", meanlog = mean(log(rm1$DIG)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$DIG
## D = 0.17565, p-value < 2.2e-16
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối loga chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn
ks.test(rm1$DIG, y = "pexp", rate = 1/mean(rm1$DIG))
## Warning in ks.test(rm1$DIG, y = "pexp", rate = 1/mean(rm1$DIG)): ties should not
## be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$DIG
## D = 0.26216, p-value < 2.2e-16
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu DIG có phân phối mũ
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ
Vẽ đồ thị histogram
hist(rm1$DXG)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$DXG)
##
## Shapiro-Wilk normality test
##
## data: rm1$DXG
## W = 0.86726, p-value < 2.2e-16
Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
ks.test(rm1$DXG, y = "plnorm",meanlog = mean(log(rm1$DXG)), sdlog = sd(log(rm1$DXG)))
## Warning in ks.test(rm1$DXG, y = "plnorm", meanlog = mean(log(rm1$DXG)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$DXG
## D = 0.084051, p-value = 6.719e-07
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối loga chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn
ks.test(rm1$DXG, y = "pexp", rate = 1/mean(rm1$DXG))
## Warning in ks.test(rm1$DXG, y = "pexp", rate = 1/mean(rm1$DXG)): ties should not
## be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$DXG
## D = 0.34764, p-value < 2.2e-16
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu DXG có phân phối mũ
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối mũ
Vẽ đồ thị histogram
hist(rm1$VHM)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$VHM)
##
## Shapiro-Wilk normality test
##
## data: rm1$VHM
## W = 0.98427, p-value = 3.021e-09
Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
ks.test(rm1$VHM, y = "plnorm",meanlog = mean(log(rm1$VHM)), sdlog = sd(log(rm1$VHM)))
## Warning in ks.test(rm1$VHM, y = "plnorm", meanlog = mean(log(rm1$VHM)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$VHM
## D = 0.050066, p-value = 0.01009
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu VHM có phân phối loga chuẩn
Với pvalue < 5% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn
Vẽ đồ thị histogram
hist(rm1$NVL)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$NVL)
##
## Shapiro-Wilk normality test
##
## data: rm1$NVL
## W = 0.8347, p-value < 2.2e-16
Giả thuyết H0: Dãy số liệu giá cổ phiểu NVL có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
Nhìn vào đồ thị histogram ta thấy có dạng 2 đỉnh , đây có thể là hình dạng của phân phối bimodal. Trong R, không có sẵn phân phối bimodal trong hàm ks.test(). DO đó tôi sử dụng gói thư viện "mixtools" trong R để ước lượng mô hình phân phối hỗn hợp và kiểm tra xem có hai thành phần phân phối hay không.
fit <- normalmixEM(rm1$NVL, k = 2)
## number of iterations= 12
summary(fit)
## summary of normalmixEM object:
## comp 1 comp 2
## lambda 6.36333e-01 3.63667e-01
## mu 3.21992e+04 7.98153e+04
## sigma 8.47362e+03 4.39694e+03
## loglik at estimate: -11477.15
Kết quả này cho biết mô hình phân phối hỗn hợp bimodal được ước lượng có hai thành phần. Thành phần 1 có tỷ lệ xuất hiện là 0.636333, giá trị trung bình là 32199.2 và độ lệch chuẩn là 8473.63. Thành phần 2 có tỷ lệ xuất hiện là 0.363667, giá trị trung bình là 79815.3 và độ lệch chuẩn là 4396.94. Giá trị log-likelihood (-11477.15) được sử dụng để đánh giá mức độ khớp giữa mô hình và dữ liệu. Mức độ khớp càng cao khi giá trị log-likelihood càng gần 0 hoặc càng lớn. Trong trường hợp này, giá trị log-likelihood âm có thể chỉ ra rằng mô hình không khớp hoàn toàn với dữ liệu.
Vẽ biểu đồ histogram
hist(rm1$VIC)
Kiểm định SHapiro-Wilk Test
shapiro.test(rm1$VIC)
##
## Shapiro-Wilk normality test
##
## data: rm1$VIC
## W = 0.96166, p-value = 4.988e-16
Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối chuẩn
ks.test(rm1$VIC, y = "plnorm",meanlog = mean(log(rm1$VIC)), sdlog = sd(log(rm1$VIC)))
## Warning in ks.test(rm1$VIC, y = "plnorm", meanlog = mean(log(rm1$VIC)), : ties
## should not be present for the Kolmogorov-Smirnov test
##
## One-sample Kolmogorov-Smirnov test
##
## data: rm1$VIC
## D = 0.12073, p-value = 8.782e-14
## alternative hypothesis: two-sided
Giả thuyết H0: Dãy số liệu giá cổ phiểu VIC có phân phối loga chuẩn
Với pvalue < 1% , bác bỏ H0 nên dãy số liệu này không có phân phối loga chuẩn
Kết luận: Sau khi thực hiện các kiểm định tác giả vẫn chưa tìm được phân phối cụ thể của các biến đầu vào, do đó sử dụng mô hình GBM dưới giả định phân phối chuẩn, phân phối ghép để thực hiện mô phỏng các biến này.
Mô phỏng giá cổ phiếu sử dụng GBM giả định phân phối chuẩn
set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
KDH<-diff(log(KDH))
set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DIG<-diff((log(DIG)))
set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DXG<-diff(log(DXG))
set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VHM<-diff(log(VHM))
set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
NVL<-diff(log(NVL))
set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Bt = sqrt(dt)*cumsum(rnorm((n),0,1))
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VIC<- diff(log(VIC))
Mô phỏng giá cổ phiếu sử dụng GBM dưới giả định phân phối ghép (convoluted distribution( hai phân phối chuẩn))
set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
KDH2<-diff(log(KDH2))
set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DIG2<-diff(log(DIG2))
set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DXG2<-diff(log(DXG2))
set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VHM2<-diff(log(VHM2))
set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
NVL2<-diff(log(NVL2))
set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rnorm(n,0,1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC2<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC2, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VIC2<-diff(log(VIC2))
Mô phỏng giá cổ phiếu sử dụng GBM dưới giả định phân phối ghép (convoluted distribution (ghép giữa phân phối chuẩn và phân phối laplace)
set.seed(1)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
KDH3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$KDH[1])
plot(KDH3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
KDH3<-diff(log(KDH3))
set.seed(2)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DIG3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DIG[1])
plot(DIG3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DIG3<-diff(log(DIG3))
set.seed(3)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
DXG3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$DXG[1])
plot(DXG3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
DXG3<-diff(log(DXG3))
set.seed(4)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VHM3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VHM[1])
plot(VHM3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VHM3<-diff(log(VHM3))
set.seed(5)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
NVL3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$NVL[1])
plot(NVL3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
NVL3<-diff(log(NVL3))
set.seed(6)
gbm.f= function(n,S0,theta, epsilon){
t = 1
t.s =seq(0,t,length=n)
dt=t/n
Z1<- rnorm(n,0,1)
Z2<- rlaplace(n, location = 0, scale = 1)
Bt = sqrt(dt)*cumsum(Z1+Z2)
St=S0*exp((theta-epsilon^2/2)*t.s+epsilon*Bt)
}
VIC3<-gbm.f(n=10000, theta = 0.05, epsilon = 0.15, S0 =rm1$VIC[1])
plot(VIC3, type = 'l', col = 'blue',
ylab = "Price",
xlab = "Time (Days)")
VIC3<-diff(log(VIC3))
mac<-data.frame(DIG, DXG, NVL, VHM, KDH, VIC)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP1 <- apply(mac, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
hist(RP1)
Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%
N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP1)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var1 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
MucDoTinCay = alpha * 100,
VaR = var1)
var_results
VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -83,10422 USD (với xác suất 90% khoản lỗ không vượt quá 83,10422 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -105,28042 (với xác suất 95% khoản lỗ không vượt quá 105,28042 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -126,5106 (với xác suất 97,5% khoản lỗ không vượt quá 126,5106 USD trong một ngày)
Giá trị của danh mục đầu tư
V1<-100000*RP1
cut_result <- cut(V1, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))
# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V1[cut_result == "profit"]
loss <- V1[cut_result == "loss"]
# Hiển thị kết quả
table(cut_result)
## cut_result
## loss profit
## 4978 5021
Trong 10000 phiên giao dịch kế tiếp có 4978 phiên giao dịch có lợi nhuận âm.
Qui ước mức độ rủi ro của danh mục đầu tư như sau:
cao <- RP1[RP1 < -0.002]
vuavua <- RP1[RP1 >= -0.002 & RP1 < -0.001]
thap <- RP1[RP1 >= -0.001 & RP1 <0]
table(cut(RP1, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
##
## R<U+1EE7>i ro cao R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p
## 10 580 4388
data <- data.frame(
RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
Probability = c(length(cao)/length(RP1), length(vuavua)/length(RP1), length(thap)/length(RP1)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
geom_bar(stat = "identity", color = "blue") +
geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black")
mac2<-data.frame(DIG2, DXG2, NVL2, VHM2, KDH2, VIC2)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP2 <- apply(mac2, 1, function(row) sum(row * w))#Tỷ suất lợi nhuận của danh mục
hist(RP2)
Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%
N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP2)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var2 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
MucDoTinCay = alpha * 100,
VaR = var2)
var_results
VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -118,3469 USD (với xác suất 90% khoản lỗ không vượt quá 118,3469 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -151,2942 (với xác suất 95% khoản lỗ không vượt quá 151,2942 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -179,059 (với xác suất 97,5% khoản lỗ không vượt quá 179,059 USD trong một ngày)
Đánh giá mức độ rủi ro của danh mục đầu tư
V2<-100000*RP2
cut_result <- cut(V2, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))
# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V2[cut_result == "profit"]
loss <- V2[cut_result == "loss"]
# Hiển thị kết quả
table(cut_result)
## cut_result
## loss profit
## 5058 4941
Trong 10000 phiên giao dịch kế tiếp có 5058 phiên giao dịch có lợi nhuận âm.
Qui ước mức độ rủi ro của danh mục đầu tư như sau:
cao <- RP2[RP2 < -0.002]
vuavua <- RP2[RP2 >= -0.002 & RP1 < -0.001]
thap <- RP2[RP2 >= -0.001 & RP1 <0]
table(cut(RP2, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
##
## R<U+1EE7>i ro cao R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p
## 145 1204 3709
data <- data.frame(
RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
Probability = c(length(cao)/length(RP2), length(vuavua)/length(RP2), length(thap)/length(RP2)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
geom_bar(stat = "identity", color = "blue") +
geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black")
mac3<-data.frame(DIG3, DXG3, NVL3, VHM3, KDH3, VIC3)
Vp<-100000 # Giá trị danh mục đầu tư
w<-c(0.2, 0.25, 0.1, 0.1, 0.2, 0.15)# Tỷ trọng của từng tài sản trong danh mục
RP3 <- apply(mac3, 1, function(row) sum(row * w)) #Tỷ suất lợi nhuận của danh mục
hist(RP3)
Giá trị VaR của danh mục ứng với 3 mức độ tin cậy 90%; 95%; 97,5%
N<- 10000 # Số quan sát của chuối tỷ suất lợi nhuận danh mục
# Sắp xếp tỷ suất lợị nhuận danh mục theo thứ tự tăng dần
sorted_values <- sort(RP3)
# Chọn chỉ số tương ứng với mức tin cậy
alpha<- c(0.9, 0.95, 0.975)
k <- ceiling((1 - alpha) * N)
# Tính VaR
var3 <- Vp*sorted_values[k]
# Tạo data frame kết quả VaR
var_results <- data.frame(
MucDoTinCay = alpha * 100,
VaR = var3)
var_results
VaR của một khoản đầu tư 100000 USD vào danh mục trong ngày tiếp theo ứng với độ tin cậy 90% là -142,5306 USD (với xác suất 90% khoản lỗ không vượt quá 142,5306 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 95% là -182,5676 (với xác suất 95% khoản lỗ không vượt quá 182,5676 USD trong một ngày)
VaR của một khoản đầu tư 100000$ vào danh mục trong ngày tiếp theo ứng với độ tin cậy 97,5% là -223,8178 (với xác suất 97,5% khoản lỗ không vượt quá 223,8178 USD trong một ngày)
Đánh giá mức độ rủi ro của danh mục đầu tư
V3<-100000*RP3
cut_result <- cut(V3, breaks = c(-Inf, 0, Inf), labels = c("loss", "profit"))
# Tạo vector profit và loss dựa trên kết quả chia khoảng
profit <- V3[cut_result == "profit"]
loss <- V3[cut_result == "loss"]
# Hiển thị kết quả
table(cut_result)
## cut_result
## loss profit
## 5055 4944
Trong 10000 phiên giao dịch kế tiếp có 5055 phiên giao dịch có lợi nhuận âm.
Qui ước mức độ rủi ro của danh mục đầu tư như sau:
cao <- RP3[RP3 < -0.002]
vuavua <- RP3[RP3 >= -0.002 & RP1 < -0.001]
thap <- RP3[RP3 >= -0.001 & RP1 <0]
table(cut(RP3, breaks = c(-Inf,-0.002, -0.001, 0), labels = c("Rủi ro cao", "Rủi ro vừa", "Rủi ro thấp")))
##
## R<U+1EE7>i ro cao R<U+1EE7>i ro v<U+1EEB>a R<U+1EE7>i ro th<U+1EA5>p
## 378 1436 3241
data <- data.frame(
RuiRo = factor(c("Rui ro cao", "Rui ro vua", "Rui ro thap"), levels = c("Rui ro cao", "Rui ro vua", "Rui ro thap")),
Probability = c(length(cao)/length(RP3), length(vuavua)/length(RP3), length(thap)/length(RP3)))
ggplot(data, aes(x = RuiRo, y = Probability, fill = RuiRo)) +
geom_bar(stat = "identity", color = "blue") +
geom_text(aes(label = scales::percent(Probability)), vjust = -0.5, color = "black")
confidence_levels <- c(90, 95, 97.5)
var_values <- c(var1, var2, var3)
model_names <- rep(c("MH1", "MH2", "MH3"), each = 3)
data <- data.frame(
Model = model_names,
ConfidenceLevel = rep(confidence_levels, times = 3),
VaR = var_values)
ggplot(data, aes(x = factor(ConfidenceLevel), y = VaR, fill = Model)) +
geom_col(position = "dodge") +
labs(x = "Confidence_levels", y = "VaR") +
scale_fill_discrete(name ="Model")
Mensah, E. T., Boateng, A., Frempong, N. K., & Maposa, D. (2023). Simulating stock prices using geometric Brownian motion model under normal and convoluted distributional assumptions. Scientific African, 19, e01556.
knitr::include_graphics("D:/Random Simulaton/Capture.PNG")