Conditional outcomes: base rates for market conditions
Updated 2026-07-04
A conditional outcome is the measured base rate of what happened historically after a stated market condition — for example, what the 24-hour forward return was on the occasions when funding was above its 90th percentile. It replaces folklore about what usually happens with a number computed from the feed's own history. It reports what happened, never what will happen.
Base rates instead of folklore
Trading talk is full of claims like funding this high always precedes a dump. A conditional outcome tests that claim against the record. It defines a condition — funding above the 90th percentile, say — finds every past moment that matched, and measures what came next, such as the distribution of forward 24-hour returns. The output is a base rate: on the matching occasions, this is the range of what actually followed.
This reframes a question from opinion to measurement. Instead of arguing whether an extreme reading is bullish or bearish, you read the historical outcome directly. The number carries no prediction — markets change regime, and the past does not bind the future — but a base rate is a far better anchor than a story about what usually happens.
As-of percentiles: no look-ahead
The condition itself is often a percentile, and how that percentile is computed decides whether the result is honest. A conditional outcome uses an as-of percentile: at each historical moment, the reading is ranked only against data available up to that moment, never against the full series. Ranking against the whole history — including data from after the moment — would leak future information into the past and inflate the result.
This look-ahead-free ranking is what makes the base rate replayable. Every matched instance was defined using only what a trader could have known at the time, so the outcome is what they would actually have faced. Percentiles computed against the complete series are a common and subtle way to produce backtests that could never have been traded.
n_matches, n_effective, and history_silent
A base rate is only as trustworthy as its sample size, and forward-return windows overlap. If the condition is met on many consecutive hours, their overlapping 24-hour forward windows are not independent observations — they share most of the same future. A conditional outcome reports both n_matches, the raw count of matching moments, and n_effective, a smaller number that discounts for that overlap and reflects how many genuinely independent samples exist.
When n_effective is too small to say anything, the feed returns history_silent rather than a misleadingly precise figure. It is an honest — the history is silent on this — not an error and not a zero. Refusing to quote a base rate from three overlapping windows is the difference between a measurement and a number that merely looks like one.
A MarketTrace agent-feed feature
Conditional outcomes are exposed through the MarketTrace agent feed as get_conditional_outcomes, so an agent can ask what historically followed a condition and receive the base rate with its effective sample size attached. The tool returns the distribution of outcomes, n_matches, n_effective, and a history_silent flag when the data cannot support an answer.
The design is deliberately conservative: it reports history, quantifies its own confidence through n_effective, and stays silent rather than guess. That keeps an agent honest — it can cite what happened before under similar conditions without dressing a base rate up as a forecast.
Related
Frequently asked questions
Are conditional outcomes predictions?
No. A conditional outcome is a base rate — the measured record of what happened historically after a stated condition, not a forecast of what will happen. Markets change regime and the past does not bind the future. The value is in anchoring a decision to what actually followed similar conditions before, rather than to folklore, while being explicit that it is history and not a prediction.
What is an as-of percentile?
An as-of percentile ranks each historical reading only against the data available up to that moment, never against the full series. This avoids look-ahead bias: if you ranked a past reading against the complete history — including data from after it — you would leak future information into the past and inflate the result. As-of ranking keeps every matched instance defined by what was knowable at the time, so the base rate is replayable.
What is the difference between n_matches and n_effective?
n_matches is the raw count of past moments that met the condition. n_effective is a smaller number that discounts for overlap: forward-return windows from consecutive matching moments share most of the same future, so they are not independent samples. n_effective estimates how many genuinely independent observations the base rate rests on, which is the honest measure of how much to trust it.
What does history_silent mean?
history_silent is what the feed returns when there are too few independent matches to measure a base rate — when n_effective is too small to say anything reliable. It is an honest signal that the history is silent on this, not an error and not a zero outcome. Returning history_silent instead of a precise-looking number is how the feed avoids quoting a base rate that its sample size cannot support.