2016-02-16 7 views
1

У меня есть список Прибыль и убытки в объекте xts, и я собираюсь запустить своего рода анализ Monte Carlo, чтобы выяснить максимальную просадку с большим количеством повторной выборки исходных xts-запросов.Как я могу перепрограммировать таймер XTS с помощью R без сортировки по дате?

# 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 (или zoo).

В вашем случае вам не нужен индекс для расчета просадки. Таким образом, вы можете просто использовать объект 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