- 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:
- 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)
- 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=