abbass2 / pyqstrat

A fast, extensible, transparent python library for backtesting quantitative strategies.
BSD 3-Clause "New" or "Revised" License
353 stars 57 forks source link

evaluate_returns returns None though docs say it should return a dictionary #29

Closed BlackArbsCEO closed 9 months ago

BlackArbsCEO commented 11 months ago
# strategy code
strategy = build_strategy()
strategy.run()
results = strategy.evaluate_returns()

# displays results no problem but trying to print the returned results....
print('result: {results}')

# result: None

the docs show there should be something returned it appears

    def evaluate_returns(self, 
                         sampling_frequency: str = 'D', 
                         strategy_names: Sequence[str] | None = None, 
                         plot: bool = True, 
                         float_precision: int = 4) -> dict[Any, Any]:
        '''Returns a dictionary of common return metrics.

        Args:
            sampling_frequency: Date frequency.  Default 'D' for daily so we downsample to daily returns before computing metrics
            strategy_names: By default this is set to None and we use all strategies.
            plot: If set to True, display plots of equity, drawdowns and returns.  Default False
            float_precision: Number of significant figures to show in returns.  Default 4
        '''
        returns = self.df_returns(sampling_frequency, strategy_names)
        ev = compute_return_metrics(returns.timestamp.values, returns.ret.values, returns.equity.values[0])
        display_return_metrics(ev.metrics(), float_precision=float_precision)
        if plot: plot_return_metrics(ev.metrics())
        return ev.metrics()
abbass2 commented 9 months ago

The code shown is for Portfolio.evaluate_returns but the example above is calling Strategy.evaluate_returns. Strategy.evalute_returns has an argument return_metrics which needs to be set to True if you want to return the metrics as a dict. Docs have been improved. 977c0dff6f075b3c7769becf0f98e51a49b47ca7