Đánh giá chiến lược trung bình động trên thị trường chứng khoán Việt Nam

Có một cuộc tranh luận ngầm đang diễn ra giữa một bên cho rằng chỉ báo kĩ thuật đã thật sự không còn hiệu quả, và bên còn lại; tất nhiên đang ăn nên làm ra với nó. Tìm những chứng cứ cho cuộc tranh luận đó là điều không khó, mà chúng thật sự được nhóm họp bởi các tên tuổi và thực nghiệm đầy nổi trội như Michael Harris với www.priceactionlab.comKris Longmore với https://robotwealth.com/about/, Johann Christian Lotter với http://www.financial-hacker.com/ và http://zorro-trader.com/. Dĩ nhiên còn nhiều tên tuổi khác đồng quan điểm trên với trường phái price action như Nial Fuller với http://www.learntotradethemarket.comAl Brooks với https://brookstradingcourse.com/. Đương nhiên phải có lý mới có lẽ cho cuộc tranh luận đó, mà có thể được tóm gọn bởi thành ngữ “quá nhanh quá nguy hiểm”, với hàm ý liên quan đến cơ sở hạ tầng giao dịch quá tân tiến mà ai cũng biết. Bạn có thể bị thuyết phục bởi quan điểm đó bởi cái lý của nó, nhưng có chắc rằng cái lẽ đó, mà bạn đang tin, có phải là sự thật. Cách tốt nhất là, chúng ta sẽ tự kiểm tra chiến lược của mình để không bị lung lay niềm tin.

1) Tìm nguồn cung dữ liệu

Đối với chứng khoán Việt Nam, chúng ta có thể tải ở các địa chỉ ,http://www.bvsc.com.vn/DownloadMSData.aspxhttp://www.cophieu68.vn/export.php, http://www.vietwayedu.com/downloadshttp://s.cafef.vn/du-lieu/download.chn#data, https://www.vndirect.com.vn/portal/thong-ke-thi-truong-chung-khoan/lich-su gia.shtml hoặc các nguồn phải trả phí như ở https://www.stockbiz.vn/http://stoxvn.stox.vn. Bạn có thể tìm ở nhiều nguồn khác, tuy nhiên chúng tôi sẽ cung cấp cho các bạn dữ liệu miễn phí mà các bạn có thể tải về từ DỮ LIỆU. Sau khi download về, các bạn giải nén vào thư mục mà từ nay về sau trong bài viết này và tất cả sản phẩm của chúng tôi, chúng ta sẽ đặt với đường dẫn là F:\Data\ để tiện trình bày.

2) Xử lý dữ liệu bằng R và Rstudio

Để bắt đầu thực hành, các bạn phải cài đặt R và Rstudio (xem https://www.vietquanttrader.com/vi/cai-dat-r-va-rstudio/). Chúng ta quay trở lại với dữ liệu sau khi đã download, bạn giải nén vào thư mục F:\Data\ được file Alldata.txt. Bây giờ chúng ta sẽ xử lý dữ liệu file Alldata.txt, từ Rstudio ở khung console nhập

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

Tiếp theo chúng ta sẽ hiển thị 6 dòng đầu để xem tổng quát cách bố trí dữ liệu bằng lệnh

head(dataAll)

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

Nhấp vào để phóng to ảnh

Chúng ta thực hiện đổi tên các cột dữ liệu cho dễ phân tích các bước tiếp theo

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

Bây giờ ta thực hiện một loạt các lệnh để lấy dữ liệu mã chứng khoán SSI và chuyển về định dạng xts, thông qua đoạn code sau

library(quantmod)
data<-dataAll
data<- subset(data, data$Tickers == "SSI")
data<- data[,-1]
names(data)<- c("Date", "Open", "High", "Low", "Close","Volume")
data$Date<- 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),]

Chúng ta đã gọi package quantmod thông qua lệnh library(quantmod), để chúng ta chuyển đổi dữ liệu về dạng xts. Dòng cuối của đoạn code trên chúng ta hiển thị 4 dòng đầu dữ liệu, và output của nó như hình sau

Nhấp vào để phóng to ảnh

Với mục đích phân tích chiến lược trung bình động, chúng ta đã xử lý dữ liệu xong và sau đây sẽ đến phần phân tích.

3) Phân tích sơ bộ chiến lược

Chúng ta sử dụng chỉ báo elastic volume weighted moving average (eVWMA) để thực hiện phân tích. Quay trở lại cửa sổ console, nhấn ctrl + l để xóa các dòng code, và thực hiện đoạn code sau:

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 đoạn code để mô hình chiến lược giả định của chúng ta là, nếu Fast >= Slow thì chúng ta mua vào hoặc tiếp tục nắm giữ. Ngược lại, chúng ta bán ra hoặc đứng ngoài thị trường. Thay vì sử dụng lệnh head như lúc trước để xem dữ liệu, chúng ta đưa chuột nhấp vào BinVec ở khung Environment thì dữ liệu BinVec sẽ xuất ra ở khung nằm trên khung console như hình sau:

Nhấp vào để phóng to ảnh

Chúng ta thấy có những giá trị không xác định (NA) trong dữ liệu của BinVec, đó là do có những giá trị không xác định trong Fast và Slow. Lẽ đương nhiên, chúng ta sẽ đứng ngoài thị trường tương ứng với giá trị không xác định đó; nói cách khác chúng ta gán cho chúng giá trị 0. Bây giờ chúng ta sẽ làm điều đó và tính lợi nhuận theo ngày mà ta đặt tên là Gain.

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

Ở đoạn code trên chúng ta thực sử dụng hàm Lag để mô hình cho việc: cuối ngày hôm nay ta mới có thông tin dữ liệu rồi tính ra được dấu hiệu cho ngày mai (SignalTomorrow).

4) Xem xét kết quả thực thi

Để xem xét kết quả thực thi, chúng ta phải đưa ra những tiêu chuẩn cho điều đó. Ở đây, chúng tôi lấy một số tiêu chuẩ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.

library(PerformanceAnalytics)
getMat = matrix(c("Cumulative Return",Return.cumulative(Gain), 
                   "Annual Return",Return.annualized(Gain), 
                   "Annualized Sharpe Ratio",SharpeRatio.annualized(Gain),
                   "Win %",sum(Gain>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 sẽ thu được kết quả như hình sau:

Nhấn vào để phóng to ảnh

Từ kết quả trên chúng ta thấy nếu theo chiến lược đó, thì lợi nhuận tích lũy gấp 13.0771 vốn ban đầu bỏ ra, lợi nhuận hàng năm là khoảng 28.8%, độ biến động lợi nhuận hàng năm là khoảng 27.18%, và sharpe ratio hàng năm là khoảng 1.06.

5) Cải thiện sự đánh giá 

Vấn đề đặt ra là liệu chi phí giao dịch và thuế có giết chết phần thưởng xứng đáng cho nỗ lực của bạn, hay thậm chí tệ hơn, bạn không biết mình là tên khờ khạo dễ bị phỉnh gạt vì mơ hồ về điều đó. Nói cho dễ hiểu, giả sử bạn có chiến lược đem lại lợi nhuận tích lũy gấp 7 lần vốn bỏ ra nhưng chi phí giao dịch và thuế lên tới 11 lần vốn. Mặt khác, nó là điều rất phiền khi bạn xem xét những mã cổ phiếu khác mà bạn sẽ phải chạy code lại từ đầu trong R. Vì vậy, chúng tôi cung cấp sản phẩm Backtesting for moving average để các bạn chỉ cần nhập thông tin vào và chạy ra kết quả. Kết quả có hỗ trợ tính ra chi phí giao dịch, thuế, số lần giao dịch, vị thế cho ngày tiếp theo, hiển thị dữ liệu, đồ thị, và các tiêu chuẩn đánh giá chiến lược…. Ngoài giao diện dễ sử dụng, các bạn sẽ sở hữu full source code của sản phẩm, để các bạn dễ dàng trở thành một quant. Các bạn lưu ý rằng, sản phẩm ở VietQuantTrader chỉ duy nhất có tại VietQuantTraderVietQuantTrader là nơi đầu tiên trên thế giới tiên phong trong sản phẩm loại này.

Trả lời

Thư điện tử 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 *