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:
result_instance.summary
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 u).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.