From e58d2bb2cfe4812b3d08615627a094e49097dc8c Mon Sep 17 00:00:00 2001 From: Dennis Thiessen Date: Wed, 5 Aug 2026 08:56:53 +0200 Subject: [PATCH] docs: clarify control parity accounting --- docs/research/portfolio-capacity-bracket.md | 8 ++++++++ tests/unit/test_portfolio_capacity_research.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/research/portfolio-capacity-bracket.md b/docs/research/portfolio-capacity-bracket.md index 4585afa..f4e5872 100644 --- a/docs/research/portfolio-capacity-bracket.md +++ b/docs/research/portfolio-capacity-bracket.md @@ -41,6 +41,14 @@ The daily replay uses zero outcome horizon: setup and rank observations continue through the snapshot's last session because portfolio simulation, unlike outcome grading, does not require 30 future bars. +Control-parity note: a direct main-versus-branch comparison found identical +total return, CAGR, maximum drawdown, and Sharpe. The branch intentionally +changes only the first calendar year's `yearly_returns` convention: it starts +from initial capital rather than equity after the first session, so day-one +entry costs are now charged to year one. Older reports can therefore show a +different first-year contextual return without a strategy-performance +regression. New trade-detail and measurement-start fields are additive. + ### Weekly-selection mechanics - Ordinary exits run before entries/rebalancing. diff --git a/tests/unit/test_portfolio_capacity_research.py b/tests/unit/test_portfolio_capacity_research.py index 53fc6b7..ce81cf7 100644 --- a/tests/unit/test_portfolio_capacity_research.py +++ b/tests/unit/test_portfolio_capacity_research.py @@ -69,7 +69,7 @@ def _business_days(start: date, end: date) -> list[date]: return days -def test_new_simulator_options_preserve_legacy_control_path(): +def test_new_simulator_option_defaults_match_explicit_defaults(): start = date(2025, 1, 6) ords = [start.toordinal() + offset for offset in range(8)] prices = {'AAA': _prices(ords)}