Problem
TickAggregatorHub/QuoteAggregatorHub notify downstream observers on every forming-bar update. At high tick rates every intra-bar tick triggers an OnRebuild cascade in all downstream indicator hubs (rollback + re-emit of the forming bar). PR #2073 made each of those rollbacks O(1) for retrofitted hubs, but the per-tick fan-out itself remains — and many consumers (bar-close bots, batch strategies) do not need forming-bar values at all.
Proposal
An opt-in conflation mode — likely a BinarySettings bit or aggregator constructor flag — where the aggregator only notifies observers when a bar closes (the forming bar is still maintained internally and queryable via Results/Snapshot()):
- Default unchanged: notify per update (charting/forming-bar consumers keep current behavior)
- Conflated: downstream chains compute once per bar instead of once per tick — an ~N× reduction in downstream work for N ticks/bar
Considerations
- Late corrections that reopen a closed bar must still notify
- Document the trade-off (downstream
Results lag the forming bar by design when enabled)
From the v3 use-case/ergonomics assessment (severity: Medium).
🤖 Generated with Claude Code
Problem
TickAggregatorHub/QuoteAggregatorHubnotify downstream observers on every forming-bar update. At high tick rates every intra-bar tick triggers anOnRebuildcascade in all downstream indicator hubs (rollback + re-emit of the forming bar). PR #2073 made each of those rollbacks O(1) for retrofitted hubs, but the per-tick fan-out itself remains — and many consumers (bar-close bots, batch strategies) do not need forming-bar values at all.Proposal
An opt-in conflation mode — likely a
BinarySettingsbit or aggregator constructor flag — where the aggregator only notifies observers when a bar closes (the forming bar is still maintained internally and queryable viaResults/Snapshot()):Considerations
Resultslag the forming bar by design when enabled)From the v3 use-case/ergonomics assessment (severity: Medium).
🤖 Generated with Claude Code