https://github.com/dppalomar/portfoliobacktest
Automated Backtesting of Portfolios over Multiple Datasets
https://github.com/dppalomar/portfoliobacktest
backtesting financial-markets portfolio
Last synced: 26 days ago
JSON representation
Automated Backtesting of Portfolios over Multiple Datasets
- Host: GitHub
- URL: https://github.com/dppalomar/portfoliobacktest
- Owner: dppalomar
- License: gpl-3.0
- Created: 2018-09-11T08:55:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-26T01:01:35.000Z (about 3 years ago)
- Last Synced: 2025-03-26T11:18:54.500Z (about 1 month ago)
- Topics: backtesting, financial-markets, portfolio
- Language: R
- Homepage: https://cran.r-project.org/package=portfolioBacktest
- Size: 125 MB
- Stars: 60
- Watchers: 10
- Forks: 12
- Open Issues: 3
-
Metadata Files:
- Readme: README.Rmd
- License: LICENSE
Awesome Lists containing this project
README
---
always_allow_html: yes
output:
html_document:
keep_md: yes
variant: markdown_github
md_document:
variant: markdown_github
---```{r, echo = FALSE}
library(knitr)
opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
fig.align = "center",
fig.retina = 2,
out.width = "75%",
dpi = 96
)
knit_hooks$set(pngquant = hook_pngquant)
```# portfolioBacktest
[](https://CRAN.R-project.org/package=portfolioBacktest)
[](https://CRAN.R-project.org/package=portfolioBacktest)
[](https://CRAN.R-project.org/package=portfolioBacktest)Automated backtesting of multiple portfolios over multiple
datasets of stock prices in a rolling-window fashion. Intended for
researchers and practitioners to backtest a set of different portfolios,
as well as by a course instructor to assess the students in their portfolio
design in a fully automated and convenient manner, with results conveniently
formatted in tables and plots. Each portfolio design is easily defined as a
function that takes as input a window of the stock prices and outputs the
portfolio weights. Multiple portfolios can be easily specified as a list
of functions or as files in a folder. Multiple datasets can be conveniently
extracted randomly from different markets, different time periods, and
different subsets of the stock universe. The results can be later assessed
and ranked with tables based on a number of performance criteria (e.g.,
expected return, volatility, Sharpe ratio, drawdown, turnover rate, return
on investment, computational time, etc.), as well as plotted in a number of
ways with nice barplots and boxplots.## Installation
The package can be installed from [CRAN](https://CRAN.R-project.org/package=portfolioBacktest) or [GitHub](https://github.com/dppalomar/portfolioBacktest):
```{r, eval=FALSE}
# install stable version from CRAN
install.packages("portfolioBacktest")# install development version from GitHub
devtools::install_github("dppalomar/portfolioBacktest")
```To get help:
```{r, eval=FALSE}
library(portfolioBacktest)
help(package = "portfolioBacktest")
?portfolioBacktest
```To cite `portfolioBacktest` in publications:
```{r, eval=FALSE}
citation("portfolioBacktest")
```## Quick Start
Do the backtest on your own portfolio following few steps:- **Step 1** - load package & 10 datasets
```{r, message=FALSE, results="hide"}
library(portfolioBacktest)
data("dataset10")
```
- **Step 2** - define your own portfolio
```{r}
my_portfolio <- function(dataset, w_current) {
prices <- dataset$adjusted
N <- ncol(prices)
return(rep(1/N, N))
}
```
- **Step 3** - do backtest
```{r, message=FALSE, results="hide"}
bt <- portfolioBacktest(my_portfolio, dataset10)
```
- **Step 4** - check your portfolio performance (e.g., median of the 10 individual backtests)
```{r}
backtestSummary(bt)$performance
```For a more detailed explanation on how to use the package with all the features, check the [vignette](https://CRAN.R-project.org/package=portfolioBacktest/vignettes/PortfolioBacktest.html).
## Package Snapshot
This package backtests a list of portfolios over multiple datasets on a rolling-window basis, producing final results as in the following.- Performance table:
```{r README-table, echo=FALSE, message=FALSE, out.width="95%"}
#library(portfolioBacktest)
#load("man/figures/bt.RData")
#res_sum <- backtestSummary(bt)
#summaryTable(res_sum, type = "DT", order_col = 2, order_dir = "desc")
knitr::include_graphics("man/figures/README-table.png")
```- Barplot:
```{r README-barplot, echo=FALSE, out.width="70%"}
#summaryBarPlot(res_sum, measures = c("Sharpe ratio", "max drawdown"), type = "ggplot2")
knitr::include_graphics("man/figures/README-barplot.png")
```- Boxplot:
```{r README-boxplot, echo=FALSE, out.width="70%"}
#backtestBoxPlot(bt, measure = "Sharpe ratio")
knitr::include_graphics("man/figures/README-boxplot.png")
```## Documentation
For more detailed information, please check the
[vignette](https://CRAN.R-project.org/package=portfolioBacktest/vignettes/PortfolioBacktest.html).## Links
Package: [CRAN](https://CRAN.R-project.org/package=portfolioBacktest) and [GitHub](https://github.com/dppalomar/portfolioBacktest).README file: [GitHub-readme](https://github.com/dppalomar/portfolioBacktest/blob/master/README.md).
Vignette: [CRAN-vignette](https://CRAN.R-project.org/package=portfolioBacktest/vignettes/PortfolioBacktest.html) and [GitHub-vignette](https://htmlpreview.github.io/?https://github.com/dppalomar/portfolioBacktest/blob/master/vignettes/PortfolioBacktest.html).