有没有一种方法可以根据用户定义的期间内的股票收益来创建列?

问题描述 投票:0回答:1

编辑:

我已经尝试过更改,并选择了以下注释中共享的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"))

我知道我只想要调整后的收盘价,这是Yahoo来源的第六栏。因此,我可以添加以下内容,然后将记录放入环境中。

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就是其中之一,它直到结束日期才开始交易。整个刮擦在此处停止运动。如何跳过该错误?

假设我们解决了找不到相关记录的“麻烦” ...您将如何计算不同时间轴上每个符号的收益?例如-Google直到2004年才开始交易。getSymbol确实会在开始交易后提取价格历史记录,但是返回时间线与GE的不同,GE的数据在我的范围的开始。

r quantmod tidyquant
1个回答
0
投票

不需要for循环。您可以使用tidyquant和dplyr进行所有操作。对于组的第一个和最后一个观察,可以使用dplyr中的函数firstlast。有关工作示例,请参见下面的代码。

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
© www.soinside.com 2019 - 2024. All rights reserved.