如何计算自200个周期的股票以来的期间

Zac*_*ach 4 finance r quantitative-finance

我想计算自单变量时间序列的200个周期高点以来经过的周期数.例如,这是SPY的收盘价:

require(quantmod)
getSymbols("SPY",from='01-01-1900')
Data <- Cl(SPY)
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用Lagquantmod中的函数找到本系列的200个周期的高点:

periodHigh <- function(x,n) {
    Lags <- Lag(x,1:n)
    High <- x == apply(Lags,1,max)
    x[High]
}
periodHigh(Data, 200)
Run Code Online (Sandbox Code Playgroud)

但是现在我被卡住了.如何将其合并回原始系列(Data)并计算系列中的每个点,自上一个n期高点以来经过了多少个时段?

And*_*rie 5

这个小函数返回一个列表:

  • high 高日期的指数
  • recentHigh 最近高点的指数
  • daysSince 自上次高点以来的天数
  • data只有高天数的xts对象.用于绘图.

代码:

daysSinceHigh <- function(data, days){
  highs <- days-1+which(apply(embed(data, days), 1, which.max)==1)
  recentHigh <- max(highs)
  daysSince <- nrow(data) - recentHigh
  list(
    highs=highs,
    recentHigh = recentHigh,
    daysSince = daysSince,
    data=data[highs, ])
}       
Run Code Online (Sandbox Code Playgroud)

结果:

daysSinceHigh(Data, 200)$daysSince
[1] 90

plot(Data)
points(daysSinceHigh(Data, 200)$data, col="red")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述