Skip to content

Commit 166dfb4

Browse files
committed
Fix NAV metric (scale by initial capital)
1 parent ae691b6 commit 166dfb4

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

src/backtest_lib/backtest/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ def run(self, ctx: StrategyContext | None = None) -> BacktestResults:
242242
weights=allocation_history,
243243
market=self.market_view.truncated_to(i),
244244
backend=self._backend,
245+
initial_capital=self.initial_portfolio.total_value,
245246
)
246247
return results
247248

src/backtest_lib/backtest/results.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,8 @@ def _std(xs: list[float]) -> float:
184184
def from_weights_market_initial_capital(
185185
weights: PastView[float, Any],
186186
market: MarketView[Any],
187+
initial_capital: float,
187188
*,
188-
initial_capital: float = 1.0,
189189
periods_per_year: float = 252.0,
190190
risk_free_annual: float | None = 0.02,
191191
backend: type[PastView],

tests/e2e/test_returns_track_price.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@
1111
def test_returns_track_price_when_portfolio_is_one_security(single_security_market):
1212
market = single_security_market
1313
security = single_security_market.securities[0]
14+
initial_capital = 1_000_000
1415
initial_portfolio = WeightedPortfolio(
1516
universe=market.securities,
1617
holdings={security: 1.0},
1718
cash=0,
18-
total_value=10000000.0,
19+
total_value=initial_capital,
1920
)
2021

2122
def strategy(*args, **kwargs) -> Decision:
@@ -26,8 +27,10 @@ def strategy(*args, **kwargs) -> Decision:
2627
)
2728
results = backtest.run()
2829
assert all(
29-
portfolio_value == pytest.approx(i)
30-
for portfolio_value, i in zip(results.nav, range(1, 101), strict=True)
30+
[
31+
portfolio_value / initial_capital == pytest.approx(i)
32+
for portfolio_value, i in zip(results.nav, range(1, 101), strict=True)
33+
]
3134
)
3235

3336
assert results.total_return == pytest.approx(99)

0 commit comments

Comments
 (0)