The BaseResult class captures portfolio data and calculates performance metrics for your investment strategy.
An instance of BaseResult is returned by calling the method
generate_positions() on an instance of BacktestController.
To get a string summary of your backtest result:
BaseResult instances have the following properties for performance reporting:
actual_returns: Dataframe of actual returns for assets.
annualized_benchmark_return: Annualized return for the benchmark over the entire period.
annualized_excess_return: Annualized excess return for the entire period.
annualized_return: Annualized return for the entire period under review.
annualized_return_over_cash: Annualized return over cash for the entire period.
benchmark_returns: Series of returns for the benchmark.
benchmark_v: Series of simulated portfolio values if invested 100% in the benchmark at time 0.
cash_column_name: String of cash column name in holdings and trades.
excess_returns: Series of returns in excess of the benchmark.
excess_risk_annualized: Risk in excess of the benchmark.
h: Dataframe of asset holdings at the beginning of each datetime period.
information_ratio: (Annualized) Information Ratio of the portfolio.
num_periods: Number of periods in the backtest.
portfolio_hit_rate: Proportion of periods in which the portfolio had positive returns.
ppy: Float representing the number of periods per year in the backtest period.
returns: Series of the returns for each datetime period compared to the previous period.
returns_over_cash: Series of returns in excess of risk-free returns.
risk_free_returns: Series of risk-free returns.
risk_over_cash_annualized: Risk in excess of the risk-free rate.
sharpe_ratio: (Annualized) Sharpe Ratio of the portfolio.
total_benchmark_return: Return over the benchmark for the entire period under review.
total_excess_return: Excess return for the entire period (portfolio return minus benchmark return).
total_return: Total return for the entire period under review.
total_return_over_cash: Total returns over cash for the entire period under review.
total_risk_free_return: Total return over the risk-free rate for the entire period.
trades: Series of trades (also available as
v: Series of the value of the portfolio for each datetime period.
v_with_benchmark: Dataframe with simulated portfolio and benchmark values.
years_forecast: Float representing the number of years in the backtest period.
If the BaseResult class is missing a property or method you wish it had, you can easily extend the class (i.e. create a new class that inherits from BaseResult) and add your desired functionality!
BacktestController accepts a
results_model kwarg (note: if passed, it expects the model to be instantiated). Don't be afraid to roll out your own custom reporting functionality!
It's possible to backtest a portfolio created outside of InvestOS. Let's review how that works: Analyzing External Portfolios.