Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio

chien-luoc-trung-binh-dong-cho-chung-khoan-viet-nam-bang-r-va-rstudio

Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio

Kể từ khi lý thuyết Dow ra đời, phân tích kỹ thuật đã có thêm một trụ đứng vững chắc về mặt lý thuyết. Và dĩ nhiên một trụ cũng vững vàng không kém đến từ hiệu quả của những nhà giao dịch đã lặng lẽ áp dụng nó. Richard Dennis là một tượng đài cũng cố vững chắc cho cái trụ đó, ông đã biến 5000 USD thành 100 triệu USD bằng phương pháp giao dịch chỉ dựa trên phân tích kỹ thuật của mình. Còn nhiều nhà giao dịch thành công trong phân tích kỹ thuật như Larry William – tăng tài sản từ 10,000 USD lên 1.5 triệu USD trong cuộc thi giao dịch 1987. Bởi vậy nó là ý nghĩa để xem xét một chiến lược kỹ thuật chẳng hạn như trung bình động cho chứng khoán Việt Nam.

1) Tải dữ liệu chứng khoán cho R

Trong thị trường Việt Nam, có nhiều nguồn cung chứng khoán mà nhà đầu tư cần phải trả phí hoặc được sử dụng miễn phí. Những nguồn cung miễn phí có thể kể đến như cafef, cophieu68. Ở đây, chúng tôi chia sẻ dữ liệu miễn phí mà nhà đầu tư download tại trang Dữ Liệu. Sau khi download xong, nhà đầu tư giải nén và đặt vào F:\Data\. Chúng tôi sẽ luôn sử dụng đường dẫn này trong các bài viết tiếp theo. Trong bài này chúng tôi sử dụng dữ liệu ngày 06/08/2017.

2) Đưa dữ liệu vào R bằng Rstudio

Để tiến hành xử lý dữ liệu nhà đầu tư cần phải cài đặt R và Rstudio (click vào để xem cài đặt nếu bạn chưa). Quay trở lại với việc đưa dữ liệu vào R, sau khi giải nén được file Alldata.txt trong thư mục F:\Data\. Mở Rstudio, ở khung console nhập

dataAll<-read.csv("F:/Data/Alldata.txt",header = TRUE, stringsAsFactors = FALSE)

Tiếp theo nhà đầu tư nhập lệnh sau để xem 6 dòng đầu tiên của dữ liệu

head(dataAll)

Chúng ta được kết quả

Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 1
Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 1

Nhà đầu tư đổi tên các cột dữ liệu bằng lệnh

colnames(dataAll) = c("Tickers", "Date", "Open", "High", "Low", "Close","Volume")

Bây giờ chúng ta lấy dữ liệu mã SSI và chuyển về định dạng .xts như sau:

library(quantmod)
data<-dataAll
data<-subset(data, data$Tickers == "SSI")
data<-data[,-1]
names(data)<-c("Date", "Open", "High", "Low", "Close","Volume")
data<-as.Date(as.character(data$Date),"%d/%m/%Y")
data<-data[!duplicated(data$Date),]
data<-zoo(data[,-1],data$Date)
data<-as.xts(data)
data<-na.omit(data)
data[c(1:4),]

Trong loạt code trên chúng ta gọi package quantmod để chuyển dữ liệu sang dạng .xts. Dòng lệnh cuối dùng để hiện thị 4 dòng đầu của dữ liệu.

Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 2
Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 2

3) Mô tả sơ bộ về chiến lược (eVWMA)

Chiến lược được thực hiện dựa trên chỉ báo elastic volume weighted moving average (eVWMA). Nhập vào các lệnh sau trong console:

require(TTR)
Fast<-EVWMA(Cl(data),Vo(data),n=6)
Slow<-EVWMA(Cl(data),Vo(data),n=9)
BinVec<-ifelse(Fast>=Slow,1,0)

Dòng cuối nói lên chiến lược: khi Fast lớn hơn hoặc bằng Slow chúng ta mua vào hoặc tiếp tục nắm giữ, và thoát hết hoặc đứng ngoài thị trường khi ngược lại. Bởi vì sẽ có những N/A trong thời gian đầu không đủ khoảng thời gian n trong BinVec, và dĩ nhiên chúng ta đứng ngoài thị trường khi dữ liệu không xác định. Vì vậy chúng ta thay thế chúng bằng giá trị 0. Chúng ta làm điều đó và đặt Gain là lợi nhuận theo ngày.

SignalTomorrow = as.numeric(tail(BinVec,1))
BinVec[is.na(BinVec)]=0
BinVec<-Lag(BinVec,1)
dataRet<-diff(Cl(data))/Lag(Cl(data),1)
Gain<-dataRet*BinVec
Gain[is.na(Gain)]=0

Vì cuối ngày giao dịch mới có dữ liệu để tính toán hành động tiếp theo cho ngài mai (SignalTomorrow), vì vậy chúng ta phải sử dụng hàm Lag cho BinVec.

4) Thực thi chiến lược

Chúng ta xem kết quả thực thi chiến lược trên mã SSI bằng cách chạy đoạn lệnh

library(PerformanceAnalytics)
getMat = matrix(c("Cumulative Return",Return.cumulative(Gain), 
                   "Annual Return",Return.annualized(Gain), 
                   "Annualized Sharpe Ratio",SharpeRatio.annualized(Gain),
                   "Win %",sum(Gain&gt;0)/sum(Gain!=0),
                   "Annualized Volatility",sd.annualized(Gain, scale=252),
                   "Position Tomorow",SignalTomorrow),
                    ncol = 2,byrow = TRUE) 
colnames(getMat) = c("Performance", "Value") 
getMat 

Chúng ta đã lấy một số tiêu chuẩn để xem xét kết quả thực thi trong đoạn code trên như lợi nhuận tích lũy, lợi nhuận hàng năm, độ biến động lợi nhuận, và sharpe ratio. Kết quả của việc chạy đoạn code trên như sau:

Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 3
Chiến lược trung bình động cho chứng khoán Việt Nam bằng R và Rstudio 3

Chúng ta thấy chiến lược đó cho lợi nhuận tích lũy gấp 13.0771 vốn, khoảng 28.8% lợi nhuận hàng năm, độ biến động lợi nhuận là 27.18%, sharpe ratio hàng năm là khoảng 1.06. Dĩ nhiên còn nhiều tiêu chi mà nhà đầu tư cần phán xét trước khi áp dụng một chiến lược.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *