2014-01-09 58 views
0

我可以從每天的時間序列生成季度OHLC日期:[R合併季度數據與季度第一個日期作爲索引

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

該季度的平均值直到本季度末才知道。如果您將時間戳更改爲本季度初,您可能會引入重大偏差。你確定你要這麼做嗎? –

+0

我需要這樣做,因爲我有一些其他數據系列的索引是由本季度開始而不是本季度末 –

+0

這些其他系列的數據是在本季度末,將它們的時間戳移到季度末是否更有意義? –

回答

1

我想你在這裏有兩個問題。首先是如何在OHLC季度數據中獲得平均值。第二個是如何在每個季度開始時使用日期戳,而不是「最後」日期戳。 xts/quantmod包假設你想要「最後」的日期戳,所以按照流程去做,只需在最後替換日期戳即可。

對OHLC有意義我發現最好只是自己做OHLC計算。因此,而不是通過meanapply.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()。試驗這個,但在我的測試中,它不夠用。

+0

非常感謝您的幫助。 –