Bar Time Is Not Information Time
A Causality Contract for Quantitative Trading Pipelines
Edmen Wong · AQP TECH ENTERPRISE · Alpha Quant Pro / Alpha Tick Lab Research
Abstract
Look-ahead bias is often reduced to explicit future-row access. This note argues that a second class of leakage begins earlier: when a pipeline confuses a storage timestamp with the time at which information actually became available. We propose an explicit information-time contract for completed bars, supervised labels, fold-local selection, and signal execution. The contract is paired with adversarial regression tests that mutate strictly future data and verify prefix invariance. The goal is not to establish tradable alpha, but to make causal assumptions testable across a research-to-execution pipeline.
Discussion thesis: A backtest can leak future information without a single explicit negative shift if complete bar statistics are timestamped earlier than their real information availability.
1. The leakage problem is broader than future-row access
Look-ahead bias is often explained with obvious anti-patterns: negative shifts, centered windows, global normalization, or labels accidentally included as features. Those failures matter, but they are not the whole problem. A pipeline can avoid every explicit future-row operation and still make a decision using information that did not exist at the stated decision time.
The simplest example is a resampled OHLC bar. If a 15-minute bar spans 10:00:00 through 10:14:59, its final high, low, close, and volume are not known at 10:00:00. Timestamping the completed bar at 10:00:00 and allowing a model to act at that timestamp silently moves information backward in time.
2. A bar needs more than one notion of time
For completed-bar research we separate four meanings that are frequently collapsed into a single timestamp: bar open time, bar close time, information availability time, and feature time. For a fully observed bar, the operational invariant is bar_open_time < bar_close_time = available_at = feature_time.
The timestamp used as a storage index is therefore not automatically the timestamp at which the information could have been consumed. Treating an index label as an information-time authority is a semantic error, not merely a data-format choice.
3. Labels have their own maturity time
Supervised financial targets intentionally consume future outcomes. That is acceptable only when the future dependency is explicit. Each retained training row should carry a label_end_time describing when its target becomes fully knowable, with label_end_time > feature_time.
This turns label maturity into data rather than an assumption hidden in split code. A row is eligible for a training fold only when its label has matured strictly before that fold's validation start.
4. Purging N bars is a heuristic; maturity is evidence
A fixed purge distance can be useful, but it is weaker evidence than an explicit end time when labels have variable horizons, event-driven exits, missing bars, or irregular sessions. If label_end_time is available, the split should use it directly instead of assuming that row distance implies causal separation.
This distinction matters because two adjacent rows can have very different information horizons. Causality belongs to the information set, not to the row number.
5. Walk-forward can still leak through model selection
A chronological split does not prove an unbiased research process if factor statistics, feature selection, hyperparameters, or model choice were computed using the later validation window. The outer training rows must own factor statistics, FactorSet selection, and model fitting; validation rows must be excluded from those decisions.
The same principle repeats inside walk-forward. Every fold should recompute train-owned statistics from that fold's training prefix. Reusing a globally selected feature set across folds can quietly move validation knowledge backward even when the model fit itself is chronological.
6. A signal timestamp is not automatically an executable timestamp
Research signals are another information-time boundary. If a signal is derived from a bar that becomes available at time t, filling an order using market state from that same logical instant can be impossible unless the execution convention proves the necessary ordering.
For conservative event-driven replay we require execution_time > signal_time and resolve the next official market event after the signal. Rehashing or relabeling a same-timestamp result does not make it causal.
7. Test causality by attacking the future
Static code review is not enough. A stronger regression test mutates prices strictly after a chosen cutoff and recomputes the pipeline. Every feature value at or before the cutoff should remain unchanged. An explicitly future-looking label at the cutoff is allowed to change because that dependency is declared rather than hidden.
The same adversarial idea can test selection isolation. Mutating validation-only values should leave train-owned factor-selection evidence unchanged, while mutating the training prefix should change the input and selection identities. This tests behavior rather than trusting a claim that a component is causal.
8. A compact causality contract
The proposed contract is deliberately small: completed bars expose information only at available_at; feature_time equals available_at; every supervised target records label_end_time; training folds require label maturity before validation; selection is recomputed from fold-local training evidence; and execution occurs strictly after the signal's information time.
None of these rules prove that a strategy has economic value. They serve a narrower purpose: preventing a research system from claiming knowledge earlier than it could have existed.
9. Limitations and scope
This note is an engineering methodology, not a universal theorem about every market-data vendor or execution model. Some feeds timestamp bars at close; others label by open; event timestamps, exchange timestamps, receipt timestamps, and processing timestamps may differ. The correct authority must be defined for the specific data and decision system.
The contract also does not solve data-snooping, multiple testing, regime instability, survivorship bias, transaction-cost misspecification, or non-stationarity. Those are separate validation problems and should not be hidden behind the word causal.
10. Conclusion
The core claim is simple: time labels are not information guarantees. A quantitative pipeline should represent when information becomes available, when a target matures, when selection is allowed to observe data, and when an order can actually execute.
A backtest can therefore cheat without a single obvious future shift. Making information time explicit gives researchers something better than convention: an invariant that can be attacked with adversarial tests and verified across the full research-to-execution chain.
Reference invariant
bar_open_time < bar_close_time = available_at = feature_time label_end_time > feature_time training label_end_time < validation_start execution_time > signal_time
Implementation provenance
The methodology in this note is implemented as a bounded research validation contract in Alpha Tick Lab. Its adversarial gate checks official-bar availability time, feature prefix invariance under strictly-future mutation, explicit label maturity, train-only factor selection, fold-local walk-forward selection, and strictly-later signal execution. This is engineering evidence for the stated causality properties; it is not peer review, live trading evidence, or a claim of strategy profitability.