При агрегировании ежедневных данных с помощью функции Quantmod to.weekly создаются еженедельные данные, заканчивающиеся в понедельник, а не в пятницу. - PullRequest
3 голосов
/ 20 сентября 2011

Я пытаюсь объединить ежедневные данные о цене акций (только для закрытия) с недельными данными о цене акций, используя функцию «to.weekly» в QuantMod.Объект xts foo содержит ежедневные данные о цене акций для акций, начиная с понедельника 3 января 2011 года и заканчивая понедельником 20 сентября 2011 года. Для агрегирования этих ежедневных данных я использовал:

tmp <- to.weekly(foo)

Вышеупомянутый подход успешен в том, что tmp теперь содержит ряд еженедельных точек данных OHLC, согласно количественной документации.Проблема в том, что сериал начинается в понедельник 3 января 2011 года, и каждая последующая неделя также начинается в понедельник, например, понедельник 10 января, понедельник 17 января и так далее.Я ожидал, что неделя по умолчанию закончится в пятницу, так что недельный ряд начался в пятницу 7 января и закончился в пятницу 16 сентября.

Я экспериментировал с настройкой начала и конца данных и использованием 'endof'или' startof 'вместе с параметром indexAt, но я не могу заставить его вернуть неделю, заканчивающуюся в пятницу.

Я благодарен за любые полученные идеи.(Извините, я не смог найти способ прикрепить файл dput, поэтому данные отображаются ниже)

foo:

2011-01-03 2802
2011-01-04 2841
2011-01-05 2883
2011-01-06 2948
2011-01-07 2993
2011-01-10 2993
2011-01-11 3000
2011-01-12 3000
2011-01-13 3025
2011-01-14 2970
2011-01-17 2954
2011-01-18 2976
2011-01-19 2992
2011-01-20 2966
2011-01-21 2940
2011-01-24 2969
2011-01-25 2996
2011-01-26 2982
2011-01-27 3035
2011-01-28 3075
2011-01-31 3020

tmp:

           foo.Open foo.High foo.Low foo.Close
2011-01-03     2802     2802    2802      2802
2011-01-10     2841     2993    2841      2993
2011-01-17     3000     3025    2954      2954
2011-01-24     2976     2992    2940      2969
2011-01-31     2996     3075    2982      3020

1 Ответ

1 голос
/ 20 сентября 2011

Я придумала что-то, дающее только значения Close, возможно, его можно взломать, чтобы вернуть серию OHLC.

Предполагая, что foo является xts объектом, сначала мы создадим вектор значений пятницы:

fridays = as.POSIXlt(time(foo))$wday == 5

Затем мы добавляем 0:

indx <- c(0, which(fridays))

И используйте period.apply:

period.apply(foo, INDEX=indx, FUN=last)

Результат:

          [,1]
2011-01-07 2993
2011-01-14 2970
2011-01-21 2940
2011-01-28 3075
...