Рассчитать доходность набора ценных бумаг, скачанного с помощью quantmod

Я скачал скорректированную цену закрытия с помощью quantmod для набора ценных бумаг. Я хочу рассчитать ежедневную/еженедельную/ежемесячную доходность для всех ценных бумаг. Обычный dailyReturn, weeklyReturn и т. д. не работают. Что мне нужно сделать? Вот мой код.

tickers <- c('FB','MMM')
data_env <- new.env()
getSymbols(Symbols = tickers, env = data_env)
tempPort <- do.call(merge, eapply(data_env, Ad))

head(tempPort )
           MMM.Adjusted FB.Adjusted
2007-01-03     57.00983          NA
2007-01-04     56.78401          NA
2007-01-05     56.39790          NA
2007-01-08     56.52174          NA
2007-01-09     56.58731          NA
2007-01-10     56.71116          NA

head(weeklyReturn(tempPort,  type = 'log', leading=TRUE))
           weekly.returns
2012-05-18   -0.010791856
2012-05-25    0.015093078
2012-06-01   -0.023027534
2012-06-08    0.037315263
2012-06-15    0.016605617
2012-06-22   -0.007000966

Мне нужны данные с доходностью для МММ и ФБ в двух разных столбцах. В моей реальной проблеме у меня более 50 тикеров. Следовательно, расчет доходности по отдельности не является решением.

у вас есть данные в другом столбце. Единственная проблема заключается в том, что index (даты) не совпадают, у вас есть много NA для FB.Adjusted. Если вы прокрутите вниз достаточно, вы увидите данные для FB.Adjusted. Что вы ожидаете в качестве окончательного результата?

Ronak Shah 13.05.2019 06:01

FB начал торговать в 2012 году, поэтому первые 5 лет будут NA. Вы можете делать все с помощью вызовов lapply, чтобы получить все в большом списке, а не в другой среде. Но, как спросил @RonakShah, каков ваш ожидаемый результат?

phiver 13.05.2019 10:22

Я ожидаю увидеть три столбца - Дата, Возврат МММ, Возврат FB. Начиная с 03.01.2007. Первая строка будет NA для обоих. Вторая строка будет иметь возврат для MMM и NA для FB. Имеет ли это смысл?

deb 13.05.2019 17:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
423
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сделайте это в цикле как таковом:

library(PerformanceAnalytics)

prices <- list()
returns <- list()

for(i in 1:length(tickers)) {
  getSymbols(tickers[i], adjusted = TRUE, output.size = "full")

  prices[[i]] <- Ad(get(tickers[i])) # Gets the adjusted close column
  ret         <- Return.calculate(Ad(get(tickers[i])), method = "log")
  returns[[i]]   <- ret # Adds return calculation to the list

}

Также рассмотрите возможность использования API-интерфейса alpha vantage. Вам нужно будет зайти на их сайт и получить ключ API, а также установить source='av' в вызове функции getSymbols().

Затем объедините послесловия данных следующим образом:

returns <- do.call(cbind, returns)

Вы можете использовать дополнительный пакет Quantmod qmao, который имеет встроенный RF (обозначает return frame), который делает то, что вы хотите. Предполагая, что вы загрузили FB и AMZN, используйте следующую строку:

library(qmao)    
rets <- RF(c(‘FB’,’AMZN’), silent = TRUE, type = ‘discrete )

> tail(rets)
                  FB      AMZN
2019-05-10 -0.001643 -0.005206
2019-05-13 -0.036105 -0.035609
2019-05-14 -0.004462  0.009568
2019-05-15  0.030654  0.016863
2019-05-16  0.003865  0.019464
2019-05-17 -0.009038 -0.020219

Взгляните на ?RF, чтобы проверить доступные параметры аргумента.

Другие вопросы по теме