Synced from the private engine at 1e39bfa (branch feat/sweep-choice-expr),
tracked files only. Two additions to the expression API:
- tf("1h").apply(expr): evaluate an expression ON the higher timeframe's
grid, then step-hold it onto the simulation grid without lookahead.
Periods inside count in that timeframe's bars, so
tf("1h").apply(sma(close, param("len"))) is a true SMA of len hourly
closes, sweepable like any param.
- choice(name, {branch: expr}): sweep a CHOICE of expression. The selector
becomes a grid axis; each combination resolves to its branch before
simulation.
Wheel for this preview is attached to the v0.19.0rc1 pre-release; built
locally, not by the release pipeline, not on PyPI.