在 R 中对时间序列进行回测

Backtesting in R for time series

我对回溯测试方法不熟悉 - 算法是为了根据历史评估某些东西是否有效 data.Since 我是新手,我试图让事情变得简单以便理解 it.So 到目前为止我已经明白,如果假设我有一个时间序列数据集:


date = seq(as.Date("2000/1/1"),as.Date("2001/1/31"), by = "day")
n = length(date);n
class(date)
y = rnorm(n)
data = data.frame(date,y)

我将保留前 365 天作为采样周期,以便对它们进行处理,然后我将在下一次观察时更新它们 month.Am 我在这里更正?

所以如果我是正确的,我定义了样本内和样本外周期。

T = dim(data)[1];T
outofsampleperiod = 31
initialsample = T-outofsampleperiod

例如,我想找到经验数据的 alpha =0.01 的分位数。

pre = data[1:initialsample,]
ypre = pre$y
quantile(ypre,0.01)
      1% 
-2.50478 

现在对我来说最困难的部分是在 R 中的 for 循环中更新它们。

我想每次都添加一个观察值,然后再次找到 alpha = 0 的经验分位数。01.To 打印它们并检查条件是否大于先前结果的样本分位数。


for (i in 1:outofsampleperiod){

 qnew = quantile(1:(initialsample+i-1),0.01)
 print(qnew)
   }

您可以创建一个小函数来获取帧 df 的第 1 行到 iy 的分位数,如下所示:

func <- function(i,df) quantile(df[1:i,"y"],.01)

然后将此函数应用于data

的每一行
data$qnew = lapply(1:nrow(data),func,df=data)

输出(最后六行)

> tail(data)
          date          y      qnew
392 2001-01-26  1.3505147 -2.253655
393 2001-01-27 -0.5096840 -2.253337
394 2001-01-28 -0.6865489 -2.253019
395 2001-01-29  1.0881961 -2.252701
396 2001-01-30  0.1754646 -2.252383
397 2001-01-31  0.5929567 -2.252065