我在xts对象中有一个Profit and Loss列表,我将运行一种 Monte Carlo 分析,以便通过对原始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
答案 0 :(得分:1)
与他们的父类(zoo)一样,必须始终对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