diff --git a/tests/finance/test_risk.py b/tests/finance/test_risk.py index 6cb6162807..3660e91870 100644 --- a/tests/finance/test_risk.py +++ b/tests/finance/test_risk.py @@ -317,6 +317,24 @@ def test_sharpe_value_when_null(self): ) self.assertEqual(test_period['sharpe'], 0.0) + def test_sharpe_value_when_benchmark_null(self): + # Sharpe is displayed as '0.0' instead of np.nan + null_returns = factory.create_returns_from_list( + [0.0]*251, + self.sim_params + ) + test_period = ClassicRiskMetrics.risk_metric_period( + start_session=self.start_session, + end_session=self.end_session, + algorithm_returns=null_returns, + benchmark_returns=null_returns, + algorithm_leverages=pd.Series( + 0.0, + index=self.algo_returns.index + ) + ) + self.assertEqual(test_period['sharpe'], 0.0) + def test_representation(self): test_period = ClassicRiskMetrics.risk_metric_period( start_session=self.start_session, diff --git a/zipline/utils/run_algo.py b/zipline/utils/run_algo.py index 7fcab2b304..dbac07d99c 100644 --- a/zipline/utils/run_algo.py +++ b/zipline/utils/run_algo.py @@ -401,14 +401,14 @@ class BenchmarkSpec(object): Parameters ---------- - benchmark_returns : pd.Series + benchmark_returns : pd.Series, optional Series of returns to use as the benchmark. benchmark_file : str or file File containing a csv with `date` and `return` columns, to be read as the benchmark. - benchmark_sid : int + benchmark_sid : int, optional Sid of the asset to use as a benchmark. - benchmark_symbol : int + benchmark_symbol : str, optional Symbol of the asset to use as a benchmark. Symbol will be looked up as of the end date of the backtest. no_benchmark : bool @@ -501,28 +501,27 @@ def resolve(self, asset_finder, start_date, end_date): raise _RunAlgoError( "Symbol %s as a benchmark not found in this bundle." ) + elif self.no_benchmark: + benchmark_sid = None + benchmark_returns = self._zero_benchmark_returns( + start_date=start_date, + end_date=end_date, + ) else: - if not self.no_benchmark: - log.warn( - "No benchmark configured. " - "Assuming algorithm calls set_benchmark." - ) - log.warn( - "Pass --benchmark-sid, --benchmark-symbol, or" - " --benchmark-file to set a source of benchmark returns." - ) - log.warn( - "Pass --no-benchmark to use a dummy benchmark " - "of zero returns.", - ) - benchmark_sid = None - benchmark_returns = None - else: - benchmark_sid = None - benchmark_returns = self._zero_benchmark_returns( - start_date=start_date, - end_date=end_date, - ) + log.warn( + "No benchmark configured. " + "Assuming algorithm calls set_benchmark." + ) + log.warn( + "Pass --benchmark-sid, --benchmark-symbol, or" + " --benchmark-file to set a source of benchmark returns." + ) + log.warn( + "Pass --no-benchmark to use a dummy benchmark " + "of zero returns.", + ) + benchmark_sid = None + benchmark_returns = None return benchmark_sid, benchmark_returns