docs: clarify control parity accounting
This commit is contained in:
@@ -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
|
through the snapshot's last session because portfolio simulation, unlike outcome
|
||||||
grading, does not require 30 future bars.
|
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
|
### Weekly-selection mechanics
|
||||||
|
|
||||||
- Ordinary exits run before entries/rebalancing.
|
- Ordinary exits run before entries/rebalancing.
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ def _business_days(start: date, end: date) -> list[date]:
|
|||||||
return days
|
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)
|
start = date(2025, 1, 6)
|
||||||
ords = [start.toordinal() + offset for offset in range(8)]
|
ords = [start.toordinal() + offset for offset in range(8)]
|
||||||
prices = {'AAA': _prices(ords)}
|
prices = {'AAA': _prices(ords)}
|
||||||
|
|||||||
Reference in New Issue
Block a user