0

编辑:

我确实尝试过更改并选择了tidyquant下面评论中共享的包。

这次我设置了一个包含变量的范围,但我认为我无法将其转换为函数或向量。这可能是我没有写坏的结果,或者是for loop对底层库的限制。

这个循环背后的想法是,它拉动该时期的调整价格,然后采用第一个和最后一个价格来计算变化(也就是股价回报)。

我不确定,但会喜欢一些想法!

start_date = "2019-05-20"
end_date = "2019-05-30"

Symbol_list <- c("CTVA","IBM", "GOOG", "GE")

range_returns <- for (Symbol in Symbol_List) {
  frame <- tq_get(Symbol, get = "stock.prices", from = start_date, to = end_date, complete_cases = FALSE)[,7]
  (frame[nrow(frame),] - frame[1,]) / frame[1,]
}

老东西


假设我有一个数据框

symbol <- c("GOOG", "IBM","GE","F","BKR")
name <- c("Google", "IBM","General Electric","Ford","Berkshire Hathaway")

df <- cbind(symbol, name)

我想创建第三列 - df$custom_return,它是根据我的个人时间框架定义的。

我已经尝试使用 quantmod 包,但我遇到了一些限制问题。

我在哪里:

我必须首先提取整个价格历史记录,这禁止创建一个新列的能力,如下所示:

start_date <- "2003-01-05"
end_date <- "2019-01-05"

df$defined_period_return <- ROC(getSymbol(df$symbol, src = yahoo, from = start_date, to = end_date, periodicity = "monthly"))

我知道我只想要调整后的收盘价,这是雅虎源的第 6 列。因此,我可以添加以下内容并将记录拉入环境。

price_history <- null

for (Symbol in sp_500$Symbol)
        price_history <- cbind(price_history,
                           getSymbols(df$symbol, from = start_date, 
                           to = end_date, periodicity = "daily", 
                           auto.assign=FALSE)[,6])

好的,这似乎可行,但它并不完全无缝,如果我的符号(代码)之一超出提供的日期范围,我会遇到问题。例如,CTVA 就是其中之一,直到结束日期之后才开始交易。整个刮擦就停在那里。如何跳过该错误?

假设我们解决了找不到相关记录的“障碍”……您将如何计算每个符号在不同时间线上的回报?例如 - 谷歌直到 2004 年才开始交易。getSymbol 在开始交易后确实会拉取价格历史记录,但返回时间线与 GE 不同,后者在我的范围开始时有数据。

4

1 回答 1

1

不需要for循环。你可以用 tidyquant 和 dplyr 做任何事情。对于组的第一次和最后一次观察,您可以使用函数firstlast来自 dplyr。请参阅下面的代码以获取工作示例。

library(tidyquant)
library(dplyr)

start_date = "2019-05-20"
end_date = "2019-05-30"

Symbol_list <- c("CTVA","IBM", "GOOG", "GE")

stocks <- tq_get(Symbol_list, get = "stock.prices", from = start_date, to = end_date, complete_cases = FALSE)

stocks %>% 
  group_by(symbol) %>% 
  summarise(returns = (last(adjusted) / first(adjusted)) - 1) # calculate returns

# A tibble: 4 x 2
  symbol returns
  <chr>    <dbl>
1 CTVA   -0.0172
2 GE     -0.0516
3 GOOG   -0.0197
4 IBM    -0.0402
于 2019-11-06T17:35:50.533 回答