Как написать цикл for для скорректированных цен закрытия в списке символов акций? - PullRequest
0 голосов
/ 19 сентября 2018

Я новичок в R, но я пытаюсь использовать QuantMod, чтобы написать цикл, чтобы вытащить скорректированные цены на акции для ряда дат (текущий, 6 месяцев назад, 12 месяцев назад, 18 месяцев назад).Я хочу почувствовать здоровье компании с течением времени.Однако, я столкнулся с ошибкой за ошибкой, поэтому выкладываю то, что имею, и надеюсь, что кто-то может помочь.Я не смог использовать getSymbols для извлечения чего-либо, поэтому CompanyTickers просто из .csv символов.

stocks <- (CompanyTickers$Symbol)

## Generate new environment stockEnv for results
stockEnv <- new.env()

##
## This pulls available stock data for the Symbols in the stock variable
## The try function keeps the code from quitting for defunct symbols
##
df <- try(getSymbols(stocks, src ='yahoo', env=stockEnv))


## Runs a loop on the data stored to stockEnv
## One Year ago
for (stock in ls(stockEnv)){
  try(monthlyReturn(xtsTicker, subset='2017-09-18')     
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Код ниже поможет вам начать.Нет необходимости в отдельной среде, просто храните все в списке и используйте функции применения, которые помогут вам перебрать все данные.Для данных месячного возврата необходимо указать что-то вроде того, что у меня ниже, например «2017-09-18 ::» или «2017-09 ::».Для расчета месячной доходности будут приниматься все данные за месяц, независимо от того, находится ли ваша начальная дата в середине месяца.

library(quantmod)

# stocklist with 1 bad stock
stocks <- c("MSFT", "MSFT2", "GIS")

# Get the data and name the list objects
stock_data <- lapply(stocks, function(x) try(getSymbols(x, src ='yahoo', auto.assign = FALSE)))
names(stock_data) <- stocks


# Show which stocks don't have any data
which(sapply(stock_data, is.character) == T)
MSFT2 
    2 

# remove stocks that don't return any data.
stock_data <- stock_data[!sapply(stock_data, is.character)]

# One Year ago
monthly_return_data <- lapply(stock_data, function(x) monthlyReturn(x, subset = "2017-09-18::"))

В целях обеспечения качества данных вы можете проверить исходный код или Alphavantage (API).ключи нужны).Yahoo не всегда имеет правильные данные.

0 голосов
/ 19 сентября 2018

Вы сохранили результат в среде.Когда вы используете ls, он выбирает только имена объектов в этой среде.Вы можете использовать функцию get для извлечения объекта и работы с ним.

x <- new.env()
x$obj <- 1

for (i in ls(x)) {
  message("Accessing ls() result:")
  print(i)
  message("Properly fetch from environment")
  print(get(i, envir = x))
}

Accessing ls() result:
[1] "obj"
Properly fetch from environment
[1] 1
...