2016-02-16 19 views
1

我有一個xts對象的利潤和損失列表,我打算運行一種Monte Carlo分析,以便通過對原始xts時間序列進行多次重新採樣來計算出最大壓差。如何用R對XTS時間序列進行重新取樣而不按日期排序?

# let's say qq is a timeseries of PnL 
qq <- xts(1:10, order.by = as.Date('2016-01-01')+0:9) 
set.seed(0) 
# I create an index vector of 5 random samples without replacing 
idx <- sample(1:10, 5) 
# with that seed, idx = c(9, 3, 10, 5, 6) 
qq[idx] # returns 
      [,1] 
2016-01-03 3 
2016-01-05 5 
2016-01-06 6 
2016-01-09 9 
2016-01-10 10 

的問題是,XTS總是按日期排序的元素,所以是有辦法有XTS時間序列的未排序的元素的一個子集?

  [,1] 
2016-01-09 9 
2016-01-03 3 
2016-01-10 10 
2016-01-05 5 
2016-01-06 6 

回答

1

像他們的父類(動物園)一樣,xts對象必須總是有序的。沒有辦法創建一個無序的xts(或動物園)對象。

就你而言,你不需要索引來計算縮進。所以你可以使用對象的coredata。或者,如果您想保留索引值作爲名稱,則可以使用as.matrix

R> (ss <- coredata(qq)[idx]) 
[1] 9 3 10 5 6 
R> (ss <- as.matrix(qq)[idx,]) 
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06 
     9   3   10   5   6 

然後你可以計算最大壓差。

R> ss-cummax(ss)  # drawdown 
2016-01-09 2016-01-03 2016-01-10 2016-01-05 2016-01-06 
     0   -6   0   -5   -4 
R> min(ss-cummax(ss)) # max drawdown 
[1] -6 
相關問題