Я скачал скорректированную цену закрытия с помощью 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 тикеров. Следовательно, расчет доходности по отдельности не является решением.
FB начал торговать в 2012 году, поэтому первые 5 лет будут NA. Вы можете делать все с помощью вызовов lapply, чтобы получить все в большом списке, а не в другой среде. Но, как спросил @RonakShah, каков ваш ожидаемый результат?
Я ожидаю увидеть три столбца - Дата, Возврат МММ, Возврат FB. Начиная с 03.01.2007. Первая строка будет NA для обоих. Вторая строка будет иметь возврат для MMM и NA для FB. Имеет ли это смысл?





Сделайте это в цикле как таковом:
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, чтобы проверить доступные параметры аргумента.
у вас есть данные в другом столбце. Единственная проблема заключается в том, что
index(даты) не совпадают, у вас есть многоNAдляFB.Adjusted. Если вы прокрутите вниз достаточно, вы увидите данные дляFB.Adjusted. Что вы ожидаете в качестве окончательного результата?