Fix bounded S/R training portfolio calendars
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user