有没有办法在用户定义的时间段内根据股票的 return 创建一个列?
Is there a way to create a column based on a stock's return over a user-defined period?
编辑:
我已经尝试过更改并选择了下面评论中共享的 tidyquant
包。
这次我设置了一个变量范围,但我想我在将它转换为函数或向量时遇到了问题。这可能是我没有写错 for loop
的结果,也可能是底层库的限制。
这个循环背后的想法是,它拉取该期间的调整价格,然后采用第一个和最后一个价格来计算变化(也就是股价的 return。)
我不确定,但会喜欢一些想法!
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"))
我知道我只想要调整后的收盘价,即 Yahoo 源的第 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 就是其中之一,直到结束日期之后才开始交易。整个刮擦就在那里停止运动。如何跳过该错误?
假设我们解决了 "snag" 找不到相关记录的问题...您将如何计算不同时间线上每个交易品种的 return?例如 - Google 直到 2004 年才开始交易。一旦开始交易,getSymbol 确实会提取价格历史记录,但是 return 时间线不同于 GE,后者在我的范围开始时有数据。
不需要 for
循环。你可以用 tidyquant 和 dplyr 做任何事情。对于组的第一个和最后一个观察,您可以使用 dplyr 中的函数 first
和 last
。有关工作示例,请参见下面的代码。
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
编辑:
我已经尝试过更改并选择了下面评论中共享的 tidyquant
包。
这次我设置了一个变量范围,但我想我在将它转换为函数或向量时遇到了问题。这可能是我没有写错 for loop
的结果,也可能是底层库的限制。
这个循环背后的想法是,它拉取该期间的调整价格,然后采用第一个和最后一个价格来计算变化(也就是股价的 return。)
我不确定,但会喜欢一些想法!
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"))
我知道我只想要调整后的收盘价,即 Yahoo 源的第 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 就是其中之一,直到结束日期之后才开始交易。整个刮擦就在那里停止运动。如何跳过该错误?
假设我们解决了 "snag" 找不到相关记录的问题...您将如何计算不同时间线上每个交易品种的 return?例如 - Google 直到 2004 年才开始交易。一旦开始交易,getSymbol 确实会提取价格历史记录,但是 return 时间线不同于 GE,后者在我的范围开始时有数据。
不需要 for
循环。你可以用 tidyquant 和 dplyr 做任何事情。对于组的第一个和最后一个观察,您可以使用 dplyr 中的函数 first
和 last
。有关工作示例,请参见下面的代码。
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