Who this is for — Anyone building a backtest, using fundamental or macroeconomic data, reconstructing an index or comparing historical signals. The issue is not knowing today what happened then, but knowing what could be consulted at the exact time of the decision.
Point-in-time data preserve history as it could have been observed at each moment. The date to which a value refers is not enough: one must record when it was published, when it became available to the system, which version was then valid and how long that version remained valid. A database that is correct and fully updated today can describe the past perfectly while being unsuitable for simulating a past decision.
In plain terms — A photograph restored today is not the photograph a trader saw yesterday. The backtest must receive only the image available then, including imperfections, delays and subsequent revisions.
Four dates not to confuse
| Time field | Question | Error when it is missing |
|---|---|---|
| Observation period | Which quarter, bar or event does the value describe? | assigning the value to the wrong moment |
| Publication timestamp | When did the source disseminate it? | using a result before its announcement |
| Availability timestamp | When did the data actually enter the pipeline, under the correct time zone and calendar? | ignoring vendor latency, closures or delays |
| Vintage or version | Which value was known before a correction? | using today's final revision in the past |
The availability timestamp is the operational one. A release published at 16:05 New York time cannot generate an order at the 16:00 close. If the system acquires the file at 16:08, the first admissible decision must also respect that latency. For daily data without a reliable time, a prudent approach is to state an explicit convention—such as “usable from the next session”—and document it.
Macroeconomic data illustrate the revision vintage problem. Output, employment and growth figures may be corrected many times. The latest series answers “what is today's best estimate of the past?” A point-in-time test asks “which estimate was public on that date?” These are different questions.
Universe, identifiers and membership
A current list of securities, funds or contracts cannot be projected backwards. The universe must be a temporal table with validity intervals:
| Entity | Required point-in-time information |
|---|---|
| Security | permanent identifier, listing and termination dates, venue, currency |
| Index | announcement and effective date for every addition and deletion |
| Fund | inception, merger, liquidation, mandate change and fee series |
| Future | specific contract, expiry, calendar and stated roll rule |
| Corporate data | accounting period, original filing, amendments and dissemination timestamp |
A ticker is a label, not a stable identity: it can change or be reused. Linking prices, financial statements and corporate actions requires persistent identifiers and a mapping with temporal validity. Sector classification or country membership can change too; applying today's classification to 2010 introduces retrospective information.
Corporate actions and delistings
Splits, dividends, spin-offs, mergers, offers, conversions and symbol changes involve several dates: announcement, ex-date, record date, payment and effectiveness. An adjusted-close series recalculated today is convenient for returns, but does not replace a causal event register. The adjustment factor must suit the purpose: comparing total returns is not the same as simulating observable limits, quantities and orders before an event.
A delisting does not justify deleting the last observation. The reason, date, any delisting return, distribution or recovery value, and the rule used when data are missing must be retained. A loss erased from the database makes the sample healthier than it was and connects directly to survivorship bias.
Point-in-time protocol
- Fix decision time. Define the time zone, calendar, cutoff and frequency of every strategy.
- Separate event and availability. Preserve
event_time,published_at,available_atandingested_atwhere available. - Archive vintages. Do not overwrite a revision; add a new version with validity start and end.
- Use persistent identities. Map tickers and descriptions to stable identifiers with temporal intervals.
- Reconstruct the universe. Store membership, eligibility, announcements and effective dates; do not start from today's survivors.
- Treat corporate actions as events. Preserve terms, dates and sources, then generate the adjustments needed for the stated purpose.
- Keep failures and absences. Delistings, suspensions, closed funds and missing values are part of history.
- Model latency. Add vendor and processing delay and the next tradable window.
- Make the query repeatable. “Show what was known at 10:00 on date X” must always return the same snapshot.
- Freeze the test dataset. Store version, checksum, transformations and code with the out-of-sample results.
Illustrative example — A company closes its quarter on 31 March, files results on 7 May at 17:20 and amends them on 20 June. A quarterly-growth signal cannot use the figure on 31 March; for a close-only strategy, first use may be the session after 7 May. Decisions from 8 May through 19 June must use the original filing, not the June amendment. Dates and times are chosen solely to demonstrate the method.
Quick checks
| Check | Evidence to preserve |
|---|---|
| Had the source already published the data? | timestamp and original document |
| Could the system have received it? | ingestion log or stated delay |
| Was the value revised? | vintage table |
| Did the instrument exist and trade? | listing intervals and venue status |
| Did it belong to the universe then? | membership with announcement and effectiveness |
| Does the return include exit or delisting? | terminal event and valuation method |
| Does the adjustment use only events already known? | corporate-action register |
Limitations
A point-in-time database reduces look-ahead bias, but it does not certify a strategy. Late data may be wrong; a source may have selective coverage; the pipeline may apply future transformations; the universe may remain incomplete. Point-in-time data also do not model orders, liquidity, capacity or transaction costs in backtests. Every result remains conditional on documented sources, conventions and availability.
Sources
- Federal Reserve Bank of St. Louis, ALFRED® and Real-Time Periods — storage of originally released values, revisions and information-validity periods.
- U.S. Securities and Exchange Commission, EDGAR Application Programming Interfaces — filing history, metadata and updates to disseminated information.
- Center for Research in Security Prices, CRSP Survivor-Bias-Free US Mutual Fund Database Guide — historical structure including both active and terminated funds.
- Tyler Shumway, The Delisting Bias in CRSP Data, The Journal of Finance, 1997 — consequences of omitting delisting returns.
- S&P Dow Jones Indices, Equity Indices Policies & Practices — announcements, effective dates, rebalances and treatment of composition corrections.