【问题标题】:Cumulative compound stock returns累积复合股票收益
【发布时间】:2019-11-09 16:33:32
【问题描述】:

我需要从 3 只不同的股票中创建 100 美元的持有收益。

我制作了一个数据框,其中包含来自 yahoo 的股票 GE、IBM 和指数 NYA:

stocks <- as.xts(data.frame(GE = GE[,6], IBM = IBM[,6], NYA = NYA[,6]))

然后,我找到了他们的回报:

stocks_return <- diff(log(stocks))

现在我需要创建一个图表,如果我投资 100 美元,则显示所有三个时间序列的持有回报。

【问题讨论】:

  • 欢迎堆栈溢出。请通过添加以下内容来改进您的问题:1.一些示例数据。 2. 你尝试解决问题或实现你想要的代码。 3. 您在代码中观察到的错误或意外行为和 4. 预期结果。 帮助我们帮助您
  • 你好,欢迎堆栈溢出。这是一个关于编程而非量化金融的论坛。为了增加获得好答案的机会,您应该清楚地解释持有回报的含义。否则,请尝试在这里提问:quant.stackexchange.com

标签: r ggplot2 quantmod


【解决方案1】:

我以前解决过类似的问题。这是它的改编版本:

library(PerformanceAnalytics)
library(quantmod)
library(purrr)
library(magrittr)
library(ggplot2)

date <- "2019-01-01"


stocks <- c("GE",
            "IBM",
            "^NYA")

#get the data
prices  <- stocks %>%
 map(~ getSymbols(., auto.assign = FALSE, from = date))

#get adjusted data
precios_ajustados <- prices %>%
 map(., Ad)

#calculate returns for each adjusted prices
returns <- precios_ajustados %>%
 map(~
      Return.calculate(.x)
 )

#insert 100 in the first observation (made NA by Return.calculate()) to simulate the investment
for (i in 1:length(stocks)) {

 names(returns[[i]]) <- stocks[i]
 returns[[i]][1, 1]  <- 100
 returns[[i]][-1, 1] <- returns[[i]][-1, 1] + 1 #adding a one so that the cumulative return reflects ups and downs.

}

returns <- returns %>% map(~ cumprod(.)) #for every stock return, calculate the cumulative product.
returns <- set_names(returns, stocks) #settings names for easy calling

plot(returns$IBM)
lines(returns$GE, col = "red")
lines(returns$`^NYA`, col = "blue")

您可以在下载所需库之前直接获取代码。

【讨论】:

  • 谢谢。现在 OP 可以复制您的解决方案并将其作为他/她自己的解决方案提交给家庭作业。
  • @JimG。你怎么知道?我只是试图发布可重现的代码来帮助他。对不起
  • 欢迎来到 SO!你的答案似乎还可以。这个问题不好。 @Jim G .. IMO 这是一个编程论坛,问题可能是问题,而不是答案。
猜你喜欢
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多