我可以从每日时间序列生成季度OHLC日期:
library(quantmod)
getSymbols("SPY", from="2000-01-01", to=Sys.Date())
tail(SPY)
dfQ <- to.quarterly(SPY[,6])
tail(dfQ)
我也可以生成季度平均值:
dfmean1 <- apply.quarterly(xts(SPY[,6]), FUN = mean)
tail(dfmean1)
但是我在合并这两者时遇到了问题,其中一个索引显示了该季度的第一个日期(而不是该季度的最后一个日期)。
感谢您的帮助
答案 0 :(得分:1)
我想你在这里有两个问题。第一个是如何在OHLC季度数据中使用平均列。第二个是如何为每个季度的开头设置日期戳,而不是“最后”的日期戳。 xts / quantmod包假设您需要“最后”的日期戳,因此请使用流程,并在结尾处替换日期戳。
为了与OHLC有意义,我发现自己最好只进行OHLC计算。因此,不要将mean
传递给apply.quarterly()
,而是执行此操作:
bars = apply.quarterly(xts(SPY[,6]), FUN = function(x){
d=coredata(x);
c(first(d),max(d),min(d),last(d),mean(d))
} )
colnames(bars)=c("open","high","low","close","mean")
这给出了:
...
2013-09-30 159.71 171.28 159.56 167.10 165.9822
2013-12-31 168.43 184.69 164.59 184.69 176.1416
2014-01-08 182.92 183.52 182.36 183.52 183.0340
然后修复日期戳:
index(bars) = as.Date(as.yearqtr(index(bars)))
要理解这一点,请先查看index(bars)
,然后查看as.yearqtr(index(bars))
,其中包含:
[1] "2000 Q1" "2000 Q2" "2000 Q3" ...
... "2013 Q3" "2013 Q4" "2014 Q1"
然后,幸运的是,as.Date()
会为您提供每个季度开始的日期戳。
最后一点是将新索引分配回bars
对象index(bars) = ...
(或index(bars) <- ...
,如果您愿意)。
顺便说一句,您可以为indexAt="lastof"
提供indexAt="firstof"
或to.quarterly()
参数。试验一下,但在我的测试中它不够用。