r - 累积复合股票收益
问题描述
我需要从 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 美元,则显示所有三个时间序列的持有回报。
解决方案
我之前解决了一个类似的问题。这是一个改编版本:
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")
您可以在下载所需库之前直接获取代码。
推荐阅读
- sql - TSQL:根据两个数据库值查找重复值
- flask - Can't load the model in Flask, I'm getting _pickle.UnpicklingError: A load persistent id instruction was received, but no persistent_load function
- angular - 在按钮上触发按键单击角度 8 以关闭浏览器
- vue.js - Vue - 一旦出现在 Firefox 上但不在 Chrome 中,父级就会抓住悬停焦点
- android - getLocationOnScreen 始终在小部件位置返回 0
- r - 将日期时间字符向量转换为日期时间格式
- node.js - React 插件在开发模式下将文件写入服务器
- azure - 从 AppInsight 中过滤出成功的依赖项
- flutter - Dart 语言扩展方法
- postgresql - PG 升级失败并出现共享内存不足错误