Tự viết chỉ báo của bạn - II
RSI thì ổn, nhưng xét về chỉ báo thì hơi lỗi thời. Trong bài này, bạn sẽ tự viết từ đầu một phiên bản đơn giản hóa của một chỉ báo khác. Chỉ báo này có tên là David Varadi Oscillator (DVO), do David Varadi, một giám đốc nghiên cứu định lượng, đề xuất.
Mục đích của bộ dao động này tương tự RSI: cố gắng tìm cơ hội mua khi giá điều chỉnh tạm thời và bán khi giá tăng tạm thời. Bên cạnh dữ liệu thị trường bắt buộc, một hàm dao động sẽ nhận hai khoảng nhìn lại (lookback).
Đầu tiên, hàm tính tỷ lệ giữa giá đóng cửa và trung bình của giá cao và thấp. Tiếp theo, áp dụng SMA lên đại lượng đó để làm mượt nhiễu, thường trên khung thời gian rất ngắn như 2 ngày. Cuối cùng, dùng hàm runPercentRank() để tính phần trăm xếp hạng chạy của tỷ lệ trung bình này, rồi nhân với 100 để chuyển về thang 0–100.
Hãy liên tưởng đến cách học sinh nhận điểm phần trăm (percentile) sau các bài kiểm tra chuẩn hóa (ví dụ, nếu một học sinh đạt 800 ở phần Toán, em đó có thể thuộc percentile 95 toàn quốc). runPercentRank() làm điều tương tự, nhưng theo thời gian. Chỉ báo này cung cấp hạng của quan sát mới nhất trong bối cảnh một giai đoạn quá khứ do người dùng chỉ định. Ví dụ, nếu một đại lượng có giá trị runPercentRank là 0,90 khi dùng lookback 126, điều đó nghĩa là nó đang ở percentile 90 khi so với chính nó và 125 quan sát trước đó.
Nhiệm vụ của bạn là hiện thực hóa chỉ báo này và lưu dưới tên DVO. Một phần mã cần thiết đã được cung cấp, và các gói quantstrat, TTR, và quantmod đã được nạp vào không gian làm việc của bạn.
Bài tập này là một phần của khóa học
Giao dịch tài chính với R
Hướng dẫn bài tập
- Tạo và đặt tên một hàm
DVOcho chỉ báo mô tả ở trên. Ba tham số của hàm làHLC,navg(mặc định 2), vàpercentlookback(mặc định 126). - Tỷ lệ giữa giá đóng cửa (
Cl()) củaHLCchia cho trung bình của giá cao (Hi()) và thấp (Lo()) đã được tính sẵn cho bạn. - Dùng
SMA()để tính trung bình động cho tỷ lệ này, tham số hóa bằng đối sốnavg. Lưu kết quả vàoavgratio. - Dùng
runPercentRank()để triển khai hệ thống xếp hạng theo phần trăm choavgratio.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# Declare the DVO function
DVO <- function(___, navg = ___, percentlookback = ___) {
# Compute the ratio between closing prices to the average of high and low
ratio <- Cl(HLC)/((Hi(HLC) + Lo(HLC))/2)
# Smooth out the ratio outputs using a moving average
avgratio <- SMA(ratio, n = ___)
# Convert ratio into a 0-100 value using runPercentRank()
out <- runPercentRank(___, n = percentlookback, exact.multiplier = 1) * 100
colnames(out) <- "DVO"
return(out)
}