Fix bounded S/R training portfolio calendars

This commit is contained in:
2026-07-12 22:45:05 +02:00
parent 4ca48ac590
commit cb64f7bf65
4 changed files with 52 additions and 4 deletions
+12 -3
View File
@@ -33,7 +33,7 @@ import statistics
from collections import defaultdict
from collections.abc import Callable
from concurrent.futures import ProcessPoolExecutor
from datetime import date, datetime, timezone
from datetime import date, datetime, timedelta, timezone
from types import SimpleNamespace
from typing import Any
@@ -1376,8 +1376,17 @@ def _simulate_portfolio(
qualified_fn = _default_qualified
entries_by_ord: dict[int, list[dict]] = defaultdict(list)
start_ord = start_date.toordinal() if start_date is not None else None
end_ord = end_date.toordinal() if end_date is not None else None
configured_start, configured_end = _backtest_entry_bounds()
effective_start = start_date if start_date is not None else configured_start
start_ord = effective_start.toordinal() if effective_start is not None else None
if end_date is not None:
# Explicit simulator/holdout end dates are exclusive split boundaries.
end_ord = end_date.toordinal()
elif configured_end is not None:
# BACKTEST_ENTRY_END is documented and applied as an inclusive bound.
end_ord = (configured_end + timedelta(days=1)).toordinal()
else:
end_ord = None
for c in candidates:
if not qualified_fn(c) or c.get("direction") != "long":
continue