开始使用免费开始使用

自行编写指标 - 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。部分必要代码已提供,且 quantstratTTRquantmod 包已载入到您的工作区。

本练习是课程的一部分

R 中的金融交易

查看课程

练习说明

  • 按上述描述创建并命名函数 DVO。该函数的 3 个参数为 HLCnavg(默认 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)
}
编辑并运行代码