自行编写指标 - II
虽然 RSI 还算不错,但作为指标来说已经有些过时。在本练习中,您将从零开始编写另一个指标的简化版本。该指标名为 David Varadi Oscillator (DVO),由量化研究总监 David Varadi 提出。
该振荡指标的目的与 RSI 类似,都是试图在短期回落中寻找买入机会,并在短期上行中寻找卖出机会。除了必需的市场数据外,振荡指标函数还接收两个回看期参数。
首先,函数计算收盘价与高低价平均值之间的比率。接着,对该比率应用 SMA 以平滑噪声,时间窗口通常很小,例如 2 天。最后,使用 runPercentRank() 对该平均比率进行滚动百分位排名,并乘以 100,将其转换为 0–100 的数值。
可以把它类比为标准化考试后的百分位分数(例如,若某学生数学拿到 800 分,她可能处于全国第 95 个百分位)。runPercentRank() 做的是同样的事情,但对象是时间序列。该指标在用户指定的过去一段时间内,为最新观测值给出其所处的排名。例如,若在回看期为 126 的情况下,某变量的 runPercentRank 值为 0.90,就表示与其自身及过去 125 个观测相比,它处于第 90 个百分位。
您的任务是实现该指标,并将其保存为 DVO。部分必要代码已提供,且 quantstrat、TTR 和 quantmod 包已载入到您的工作区。
本练习是课程的一部分
R 中的金融交易
练习说明
- 按上述描述创建并命名函数
DVO。该函数的 3 个参数为HLC、navg(默认 2)和percentlookback(默认 126)。 - 已为您计算好
HLC的收盘价(Cl())与最高价(Hi())和最低价(Lo())平均值之比。 - 使用
SMA()对该比率实现移动平均,窗口由参数navg指定。将结果保存为avgratio。 - 使用
runPercentRank()为avgratio实现百分位排名系统。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# 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)
}