Агрегирование ежедневных данных с использованием функции Quantmod 'to.weekly' создает еженедельные данные, заканчивающиеся в понедельник, а не в пятницу.

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

tmp <- to.weekly(foo)

Вышеупомянутый подход преуспевает в том, что tmp теперь содержит серию еженедельных точек данных OHLC, как указано в документации Quantmod. Проблема в том, что серия начинается в понедельник, 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

person SlowLearner    schedule 20.09.2011    source источник


Ответы (2)


Я придумал что-то, что дает только значения 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
person Anatoliy    schedule 20.09.2011
comment
Спасибо Анатолию. Я преобразовал код в код оболочки и протестировал его с несколькими объектами xts, и, похоже, он работает хорошо. - person SlowLearner; 21.09.2011

По пятницам (иногда по четвергам из-за закрытия рынков) используйте:

tmp = to.weekly(foo, indexAt = "endof") 

По понедельникам (иногда по вторникам из-за закрытия рынков) используйте:

tmp = to.weekly(foo, indexAt = "startof")`

Или вы можете создать собственный вектор Dates, который содержит дату, которая будет связана с каждой неделей. Например, чтобы каждая неделя была связана с пятницей независимо от закрытия рынка:

customIdx = seq (from = as.Date ("2011-01-07"), by = 7, length.out = nrow (tmp)) index (tmp) = customIdx

person Geoffrey Poole    schedule 21.04.2020