knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" )
investmentsim is an R package for simulating an investment portfolio using either historical or simulated returns. It has support for varying transactional and allocation paths.
You can install the development version from GitHub with:
# install.packages("devtools") devtools::install_github("ryanholbrook/investmentsim")
See the vignette Basic Usage for more detail.
library(tidyverse) library(xts) library(lubridate) library(investmentsim) # Time series of returns data(simreturns) head(simreturns) # Historical assets simstock_asset <- make_historical(simreturns$Stock.Returns) simbond_asset <- make_historical(simreturns$Bond.Returns) # Be sure dates simulated over are a subset of the dates of the assets. dates <- seq(ymd("1940-01-01"), ymd("2010-01-01"), by="years") # Portfolio with S&P 500 and 10-year T-bonds. Yearly transaction # of $1000. Linear allocation. asset_names <- c("Stocks", "Bonds") port <- make_portfolio(asset_names, c(simstock_asset, simbond_asset), c(2500, 2500)) alloc <- make_linear_allocation_path(asset_names, c(ymd("1970-01-01"), ymd("2000-01-01")), list(c(0.9, 0.1), c(0.4, 0.6)))
# Plot the allocation path as <- map(dates, alloc) %>% do.call(rbind, .) %>% xts(order.by = dates) plot(as, ylim = c(0, 1), col = c("red", "blue"), main = "Asset Allocation") addLegend("topright", asset_names, col = c("red", "blue"), lty = 1, cex = 1, bty = "o") trans <- make_transactions_on_dates(rep(1000, length(dates)), dates) model <- make_model(port, alloc, trans, dates)
# Evaluate the model path <- make_path(model) print(c(head(path), tail(path))) plot(path[,1:3], col = c("red", "blue", "green"), main = "Investment Path") addLegend("topleft", c(asset_names, "Total"), col = c("red", "blue", "green"), lty = 1, cex = 1, bty = "o")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.