1. Tổng quan:

Sử dụng dữ liệu cổ phiếu DVN của PVIAM để vẽ ra những biểu đồ như: Scatter Plot, Candlestick Charts, Bar Charts, Multi-line Chart. Bên cạnh vẽ những biểu đồ trực quan hóa dữ liệu, tác giả cũng tiến hành sử dụng ARIMA để tiến hành dự đoán giá trị của cổ phiếu.

Tiến hành:

2.1. Cài đặt Package và nhập dữ liệu PVIAM:

  1. Cài đặt Package
# Các packages cần cài đặt
install.packages("knitr")
install.packages("plotly")
library(plotly)
install.packages("tq")
library(tq)
install.packages("quantmod")
library(quantmod)
install.packages("TTR")
library(TTR)
install.packages("ggplot2")
library(ggplot2)
library(ggplot2)
library(TTR)
library(magrittr)
  1. Nhập dữ liệu PVIAM:
#Import Data----
mydata <- read.csv("C:\\Users\\buith\\KPIM Joint Stock Company\\Business Intelligence - 4. Projects\\Research Portfolio Management Models\\R\\Data cổ phiếu PVI.csv")
mydata <- mydata[complete.cases(mydata$gia_mo_cua), ]

# Transform data----
mydata <- na.omit(mydata)
mydata$ngay <- as.Date(mydata$ngay, format = "%m/%d/%Y")
mydata$ma <- as.character(mydata$ma)
mydata$gia_mo_cua <- as.numeric(mydata$gia_mo_cua)
mydata$gia_dong_cua <- as.numeric(mydata$gia_dong_cua)
mydata$khoi_luong_giao_dich_khop_lenh <- as.numeric(mydata$khoi_luong_giao_dich_khop_lenh)
mydata$gia_cao_nhat <- as.numeric(mydata$gia_cao_nhat)
mydata$gia_thap_nhat <- as.numeric(mydata$gia_thap_nhat)
mydata$gia_dieu_chinh <- as.numeric(mydata$gia_dieu_chinh)
mydata$gia_tri_thay_doi <- as.numeric(mydata$gia_tri_thay_doi)

2.2. Lọc ra dữ liệu cổ phiếu DVN:

# Lọc dữ liệu DVN----
DVN <- mydata[mydata$ma == "DVN", ]
DVN <- na.omit(DVN)
DVN <- DVN[complete.cases(DVN$gia_tri_thay_doi), ]

2.3. Scattor Plot for DVN

plot(DVN$gia_dong_cua, main = "Closing Prices of DVN in 2022", ylab="DVN Close Price", x=DVN$ngay, xlab="Date")

2.4. Candlestick of DVN

DVN %>%
  plot_ly(x = ~ngay, type = "candlestick",
          open = ~gia_mo_cua, close = ~gia_dong_cua, high = ~gia_cao_nhat, low = ~gia_thap_nhat) %>%
  layout(title = "Candlestick Chart for DVN",
         xaxis = list(title = "Date"),
         yaxis = list(title = "Price"))

2.5. Bar chart for DVN

DVN_bar <- DVN %>%
  plot_ly(x = ~ngay, y = ~khoi_luong_giao_dich_khop_lenh, type = "bar", 
          marker = list(color = "#1f77b4")) %>%
  layout(title = "DVN Daily Trading Volume", plot_bgcolor = "#e5ecf6",
         xaxis = list(title = "Date"), yaxis = list(title = "Volume"))
DVN_bar

2.6. Multi-line Chart

DVN$ma7 = SMA(DVN$gia_tri_thay_doi, n=7)
DVN$ma30 = SMA(DVN$gia_tri_thay_doi, n=30)
ggplot(data = DVN) +
  geom_line(aes(x = ngay, y = gia_tri_thay_doi , color = "Daily Price")) +
  geom_line(aes(x = ngay, y = ma7, color = "Weekly Moving Average"))  +
  geom_line(aes(x = ngay, y = ma30, color = "Monthly Moving Average"))  +
  ylab('DVN Stock Price') +
  xlab('Time') +
  labs(color = 'Trendline')

LS0tDQp0aXRsZTogU3RvY2sgRFZODQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoxLiAgVOG7lW5nIHF1YW46DQoNClPhu60gZOG7pW5nIGThu68gbGnhu4d1IGPhu5UgcGhp4bq/dSBEVk4gY+G7p2EgUFZJQU0gxJHhu4MgduG6vSByYSBuaOG7r25nIGJp4buDdSDEkeG7kyBuaMawOiBTY2F0dGVyIFBsb3QsIENhbmRsZXN0aWNrIENoYXJ0cywgQmFyIENoYXJ0cywgTXVsdGktbGluZSBDaGFydC4gQsOqbiBj4bqhbmggduG6vSBuaOG7r25nIGJp4buDdSDEkeG7kyB0cuG7sWMgcXVhbiBow7NhIGThu68gbGnhu4d1LCB0w6FjIGdp4bqjIGPFqW5nIHRp4bq/biBow6BuaCBz4butIGThu6VuZyBBUklNQSDEkeG7gyB0aeG6v24gaMOgbmggZOG7sSDEkW/DoW4gZ2nDoSB0cuG7iyBj4bunYSBj4buVIHBoaeG6v3UuDQoNClRp4bq/biBow6BuaDoNCg0KMi4xLiBDw6BpIMSR4bq3dCBQYWNrYWdlIHbDoCBuaOG6rXAgZOG7ryBsaeG7h3UgUFZJQU06DQoNCjEuICBDw6BpIMSR4bq3dCBQYWNrYWdlDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCmxpYnJhcnkocGxvdGx5KQ0KaW5zdGFsbC5wYWNrYWdlcygidHEiKQ0KbGlicmFyeSh0cSkNCmluc3RhbGwucGFja2FnZXMoInF1YW50bW9kIikNCmxpYnJhcnkocXVhbnRtb2QpDQppbnN0YWxsLnBhY2thZ2VzKCJUVFIiKQ0KbGlicmFyeShUVFIpDQppbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoVFRSKQ0KbGlicmFyeShtYWdyaXR0cikNCmBgYA0KDQpgYGB7cn0NCiMgQ8OhYyBwYWNrYWdlcyBj4bqnbiBjw6BpIMSR4bq3dA0KaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQ0KaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCmxpYnJhcnkocGxvdGx5KQ0KaW5zdGFsbC5wYWNrYWdlcygidHEiKQ0KbGlicmFyeSh0cSkNCmluc3RhbGwucGFja2FnZXMoInF1YW50bW9kIikNCmxpYnJhcnkocXVhbnRtb2QpDQppbnN0YWxsLnBhY2thZ2VzKCJUVFIiKQ0KbGlicmFyeShUVFIpDQppbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoVFRSKQ0KbGlicmFyeShtYWdyaXR0cikNCmBgYA0KDQoyLiAgTmjhuq1wIGThu68gbGnhu4d1IFBWSUFNOg0KDQpgYGB7cn0NCiNJbXBvcnQgRGF0YS0tLS0NCm15ZGF0YSA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxidWl0aFxcS1BJTSBKb2ludCBTdG9jayBDb21wYW55XFxCdXNpbmVzcyBJbnRlbGxpZ2VuY2UgLSA0LiBQcm9qZWN0c1xcUmVzZWFyY2ggUG9ydGZvbGlvIE1hbmFnZW1lbnQgTW9kZWxzXFxSXFxEYXRhIGPhu5UgcGhp4bq/dSBQVkkuY3N2IikNCm15ZGF0YSA8LSBteWRhdGFbY29tcGxldGUuY2FzZXMobXlkYXRhJGdpYV9tb19jdWEpLCBdDQoNCiMgVHJhbnNmb3JtIGRhdGEtLS0tDQpteWRhdGEgPC0gbmEub21pdChteWRhdGEpDQpteWRhdGEkbmdheSA8LSBhcy5EYXRlKG15ZGF0YSRuZ2F5LCBmb3JtYXQgPSAiJW0vJWQvJVkiKQ0KbXlkYXRhJG1hIDwtIGFzLmNoYXJhY3RlcihteWRhdGEkbWEpDQpteWRhdGEkZ2lhX21vX2N1YSA8LSBhcy5udW1lcmljKG15ZGF0YSRnaWFfbW9fY3VhKQ0KbXlkYXRhJGdpYV9kb25nX2N1YSA8LSBhcy5udW1lcmljKG15ZGF0YSRnaWFfZG9uZ19jdWEpDQpteWRhdGEka2hvaV9sdW9uZ19naWFvX2RpY2hfa2hvcF9sZW5oIDwtIGFzLm51bWVyaWMobXlkYXRhJGtob2lfbHVvbmdfZ2lhb19kaWNoX2tob3BfbGVuaCkNCm15ZGF0YSRnaWFfY2FvX25oYXQgPC0gYXMubnVtZXJpYyhteWRhdGEkZ2lhX2Nhb19uaGF0KQ0KbXlkYXRhJGdpYV90aGFwX25oYXQgPC0gYXMubnVtZXJpYyhteWRhdGEkZ2lhX3RoYXBfbmhhdCkNCm15ZGF0YSRnaWFfZGlldV9jaGluaCA8LSBhcy5udW1lcmljKG15ZGF0YSRnaWFfZGlldV9jaGluaCkNCm15ZGF0YSRnaWFfdHJpX3RoYXlfZG9pIDwtIGFzLm51bWVyaWMobXlkYXRhJGdpYV90cmlfdGhheV9kb2kpDQpgYGANCg0KMi4yLiBM4buNYyByYSBk4buvIGxp4buHdSBj4buVIHBoaeG6v3UgRFZOOg0KDQpgYGB7cn0NCiMgTOG7jWMgZOG7ryBsaeG7h3UgRFZOLS0tLQ0KRFZOIDwtIG15ZGF0YVtteWRhdGEkbWEgPT0gIkRWTiIsIF0NCkRWTiA8LSBuYS5vbWl0KERWTikNCkRWTiA8LSBEVk5bY29tcGxldGUuY2FzZXMoRFZOJGdpYV90cmlfdGhheV9kb2kpLCBdDQpgYGANCg0KMi4zLiBTY2F0dG9yIFBsb3QgZm9yIERWTg0KDQpgYGB7cn0NCnBsb3QoRFZOJGdpYV9kb25nX2N1YSwgbWFpbiA9ICJDbG9zaW5nIFByaWNlcyBvZiBEVk4gaW4gMjAyMiIsIHlsYWI9IkRWTiBDbG9zZSBQcmljZSIsIHg9RFZOJG5nYXksIHhsYWI9IkRhdGUiKQ0KYGBgDQoNCjIuNC4gQ2FuZGxlc3RpY2sgb2YgRFZODQoNCmBgYHtyfQ0KRFZOICU+JQ0KICBwbG90X2x5KHggPSB+bmdheSwgdHlwZSA9ICJjYW5kbGVzdGljayIsDQogICAgICAgICAgb3BlbiA9IH5naWFfbW9fY3VhLCBjbG9zZSA9IH5naWFfZG9uZ19jdWEsIGhpZ2ggPSB+Z2lhX2Nhb19uaGF0LCBsb3cgPSB+Z2lhX3RoYXBfbmhhdCkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJDYW5kbGVzdGljayBDaGFydCBmb3IgRFZOIiwNCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJEYXRlIiksDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiUHJpY2UiKSkNCmBgYA0KDQoyLjUuIEJhciBjaGFydCBmb3IgRFZODQoNCmBgYHtyfQ0KRFZOX2JhciA8LSBEVk4gJT4lDQogIHBsb3RfbHkoeCA9IH5uZ2F5LCB5ID0gfmtob2lfbHVvbmdfZ2lhb19kaWNoX2tob3BfbGVuaCwgdHlwZSA9ICJiYXIiLCANCiAgICAgICAgICBtYXJrZXIgPSBsaXN0KGNvbG9yID0gIiMxZjc3YjQiKSkgJT4lDQogIGxheW91dCh0aXRsZSA9ICJEVk4gRGFpbHkgVHJhZGluZyBWb2x1bWUiLCBwbG90X2JnY29sb3IgPSAiI2U1ZWNmNiIsDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiRGF0ZSIpLCB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVm9sdW1lIikpDQpEVk5fYmFyDQpgYGANCg0KMi42LiBNdWx0aS1saW5lIENoYXJ0DQoNCmBgYHtyfQ0KRFZOJG1hNyA9IFNNQShEVk4kZ2lhX3RyaV90aGF5X2RvaSwgbj03KQ0KRFZOJG1hMzAgPSBTTUEoRFZOJGdpYV90cmlfdGhheV9kb2ksIG49MzApDQpnZ3Bsb3QoZGF0YSA9IERWTikgKw0KICBnZW9tX2xpbmUoYWVzKHggPSBuZ2F5LCB5ID0gZ2lhX3RyaV90aGF5X2RvaSAsIGNvbG9yID0gIkRhaWx5IFByaWNlIikpICsNCiAgZ2VvbV9saW5lKGFlcyh4ID0gbmdheSwgeSA9IG1hNywgY29sb3IgPSAiV2Vla2x5IE1vdmluZyBBdmVyYWdlIikpICArDQogIGdlb21fbGluZShhZXMoeCA9IG5nYXksIHkgPSBtYTMwLCBjb2xvciA9ICJNb250aGx5IE1vdmluZyBBdmVyYWdlIikpICArDQogIHlsYWIoJ0RWTiBTdG9jayBQcmljZScpICsNCiAgeGxhYignVGltZScpICsNCiAgbGFicyhjb2xvciA9ICdUcmVuZGxpbmUnKQ0KYGBgDQo=