Несколько акций на один вектор - PullRequest
0 голосов
/ 04 апреля 2020

Как мне go разместить несколько акций на одном векторе с пометкой my.portfolio? Я анализирую 18 акций. Я использую ежемесячные возвраты и хочу, чтобы все векторы вызывались из одного имени вектора

myportfol

getSymbols(c('DPZ','SPY','AMD','AAPL','TSLA','MSFT','V', 'WMT', 'SQ','EA','ATVI','AMZN','ROKU', 'PYPL','KO','AXP','CCL','DFS'), src="yahoo", from='2014-01-01', to='2018-12-31', auto.asign = TRUE)

DPZ.rtn <- monthlyReturn(DPZ$DPZ.Adjusted, subset=NULL, type='log', leading=TRUE)
SPY.rtn <- monthlyReturn(SPY$SPY.Adjusted, subset=NULL, type='log', leading=TRUE)
AMD.rtn <- monthlyReturn(AMD$AMD.Adjusted, subset=NULL, type='log', leading=TRUE)
AAPL.rtn <- monthlyReturn(AAPL$AAPL.Adjusted, subset=NULL, type='log', leading=TRUE)
TSLA.rtn <- monthlyReturn(TSLA$TSLA.Adjusted, subset=NULL, type='log', leading=TRUE)
MSFT.rtn <- monthlyReturn(MSFT$MSFT.Adjusted, subset=NULL, type='log', leading=TRUE)
V.rtn <- monthlyReturn(V$V.Adjusted, subset=NULL, type='log', leading=TRUE)
WMT.rtn <- monthlyReturn(WMT$WMT.Adjusted, subset=NULL, type='log', leading=TRUE)
SQ.rtn <- monthlyReturn(SQ$SQ.Adjusted, subset=NULL, type='log', leading=TRUE)
EA.rtn <- monthlyReturn(EA$EA.Adjusted, subset=NULL, type='log', leading=TRUE)
ATVI.rtn <- monthlyReturn(ATVI$ATVI.Adjusted, subset=NULL, type='log', leading=TRUE)
AMZN.rtn <- monthlyReturn(AMZN$AMZN.Adjusted, subset=NULL, type='log', leading=TRUE)
ROKU.rtn <- monthlyReturn(ROKU$ROKU.Adjusted, subset=NULL, type='log', leading=TRUE)
PYPL.rtn <- monthlyReturn(PYPL$PYPL.Adjusted, subset=NULL, type='log', leading=TRUE)
KO.rtn <- monthlyReturn(KO$KO.Adjusted, subset=NULL, type='log', leading=TRUE)
AXP.rtn <- monthlyReturn(AXP$AXP.Adjusted, subset=NULL, type='log', leading=TRUE)
CCL.rtn <- monthlyReturn(CCL$CCL.Adjusted, subset=NULL, type='log', leading=TRUE)
DFS.rtn <- monthlyReturn(DFS$DFS.Adjusted, subset=NULL, type='log', leading=TRUE)
`

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Лучший способ - это l oop через символы с lapply. Я приведу небольшой пример с меньшим количеством символов.

Сначала загрузите используемый пакет и прочитайте данные.

library(quantmod)

symbols <- c('DPZ','SPY','AMD')
getSymbols(symbols, src="yahoo", from='2014-01-01', to='2018-12-31', auto.asign = TRUE)

Теперь поместите данные в список и lapply Функция monthlyReturn для каждого набора данных.

symb_list <- mget(ls(pattern = paste(symbols, collapse = "|")))

returns_list <- lapply(symb_list, monthlyReturn, subset = NULL, type = 'log', leading = TRUE)

Посмотрите, каковы результаты.

lapply(returns_list, head)
#$AMD
#           monthly.returns
#2014-01-31     -0.11551289
#2014-02-28      0.07847162
#2014-03-31      0.07775936
#2014-04-30      0.01975373
#2014-05-30     -0.02225061
#2014-06-30      0.04640637
#
#$DPZ
#           monthly.returns
#2014-01-31     0.013689063
#2014-02-28     0.113035241
#2014-03-31    -0.026791284
#2014-04-30    -0.034228700
#2014-05-30    -0.026290421
#2014-06-30     0.008794876
#
#$SPY
#           monthly.returns
#2014-01-31    -0.032032798
#2014-02-28     0.044510326
#2014-03-31     0.003857503
#2014-04-30     0.006927466
#2014-05-30     0.022941215
#2014-06-30     0.015654326
1 голос
/ 04 апреля 2020

Я предполагаю, что вам нужен список вместо вектора, но это было бы началом:

library(quantmod) #load the required library
myportfol <- getSymbols(c('DPZ','SPY','AMD','AAPL','TSLA','MSFT','V', 'WMT', 'SQ','EA','ATVI','AMZN','ROKU', 'PYPL','KO','AXP','CCL','DFS'), src="yahoo", from='2014-01-01', to='2018-12-31', auto.asign = TRUE)

# function to extract monthly returns
montly_return_fun <- function(x){
  monthlyReturn(x[,grep(pattern = "Adjusted", x = colnames(x), value = TRUE)], subset=NULL, type='log', leading=TRUE)
}
# lapply twice: the first to get the values that the getSymbols function throws in your global environment and the second to apply your monthly_return_fun
myportfol <- lapply(lapply(myportfol, get), montly_return_fun)

На вашем месте я бы дал переменной списка новое имя для отличий gui sh это из символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...