knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

investmentsim

Travis build status

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.

Installation

You can install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("ryanholbrook/investmentsim")

Example

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")


ryanholbrook/investmentsim documentation built on Nov. 5, 2019, 5:10 a.m.