Conditional Exceedance Probabilities as a Basis for Systematic Trading
A Long-Horizon, Probability-Driven Study on SPY
Abstract
This article presents a probability-driven trading framework based on conditional exceedance statistics rather than return forecasting. Using historical SPY data, I estimate conditional probabilities of large future price moves given large past moves over fixed horizons. These probabilities are translated directly into systematic long-only trading decisions with fixed holding periods. Out-of-sample evaluation on 2025 data yields Sharpe ratios between 4.5 and 6.5 and cumulative returns exceeding 600% for selected parameter regimes. The results suggest that long-horizon conditional structure in price dynamics can be exploited without explicit price prediction.
1. Introduction
Most quantitative trading strategies can be categorized as either:
Predictive (forecasting returns, prices, or distributions), or
Reactive (responding to realized events such as breakouts, trends, or volatility shocks)
This work belongs to the second category, but with a crucial distinction:
the trading signal is not heuristic, but derived from explicit conditional probability estimates.
Rather than modeling returns directly, I ask:
Given that the market has already experienced a large move over a time horizon τ, what is the probability that another large move will occur over the next τ days?
This framing removes the need for point forecasts and places the problem squarely in the domain of event probabilities, uncertainty quantification, and statistical decision-making.
2. Data and Notation
Let P(t) denote the daily adjusted close price of SPY.
For a fixed time lag τ (in trading days), define the τ-horizon price increment:
ΔP(t; τ) = P(t) − P(t − τ)
For each τ, we compute the empirical distribution of ΔP over the training period (pre-2025) and define percentile thresholds:
q: percentile for the conditioning exceedance
r: percentile for the future exceedance
An exceedance event occurs when ΔP exceeds the corresponding threshold.
3. Conditional Probability Estimation
The central object of interest is the conditional probability:
P(ΔP(t + τ; τ) ≥ r | ΔP(t; τ) ≥ q)
This quantity is estimated empirically using event counts:
N_cond: number of times ΔP(t; τ) ≥ q
N_joint: number of times both conditions are satisfied
The probability estimate is:
p_hat = N_joint / N_cond
This is equivalent to a Bernoulli estimator with sample size N_cond.
4. Statistical Reliability and Error Control
A critical issue in conditional probability estimation is finite-sample uncertainty, especially in the tails.
Each estimate is therefore associated with a standard error:
SE ≈ sqrt( p_hat * (1 − p_hat) / N_cond )
Only probability estimates satisfying:
p_hat ≥ p_min
SE ≤ SE_max
are allowed to generate trades.
This explicitly filters out:
rare conditioning events
unstable tail estimates
spurious high-probability artifacts
The resulting probability table is interpretable, sparse, and statistically defensible.
5. Probability Tensor Construction
For each combination of:
τ in a predefined grid (e.g., 50–600 days)
q in high-percentile levels
r in high-percentile levels
I construct a probability tensor storing:
p_hat
N_cond
N_joint
SE
This tensor is computed once using pre-2025 data and remains fixed throughout evaluation.
No parameters are tuned on the test period.
6. Trading Rule
The trading strategy is intentionally minimal.
On each trading day t in 2025:
For a given τ, check whether:
ΔP(t; τ) ≥ q-thresholdIf true, and if p_hat(q, r, τ) passes statistical filters:
Enter a long position at t
Hold the position for exactly τ days
Exit mechanically at t + τ
Important features:
Overlapping trades are allowed
No signal aggregation
No stop-loss or take-profit rules
Fixed horizon per trade
Each trade corresponds to a single probabilistic hypothesis.
7. Performance Measurement
Returns are measured as percentage price changes over each τ-horizon trade.
Aggregate performance metrics include:
Total return (net profit divided by total capital deployed)
Annualized Sharpe ratio (mean daily return / daily volatility)
Number of executed trades
All results reported are strictly out-of-sample, using 2025 data only.
8. Empirical Results
Across multiple parameter combinations, the strategy exhibits:
Sharpe ratios ranging from approximately 4.5 to 6.5
Cumulative returns between ~650% and ~900%
Dozens of statistically independent trades
Performance is strongest for longer horizons (τ ≈ 100–300 days).
Shorter horizons show weaker and less stable conditional structure, consistent with noise-dominated dynamics at high frequency.
9. Interpretation
Several observations are noteworthy:
The strategy does not predict prices or returns
It exploits persistence in event-level structure
Each trade has a clear probabilistic justification
High Sharpe arises from consistency, not leverage or frequency
From a statistical perspective, the framework resembles survival or hazard modeling applied to financial time series, with exceedances playing the role of events.
10. Limitations
This study intentionally omits several real-world considerations:
Transaction costs and market impact
Capital allocation constraints
Dynamic position sizing
Portfolio-level interactions
The reported results should therefore be interpreted as statistical feasibility, not deployable production performance.
11. Extensions and Future Work
Natural extensions include:
Multi-asset conditional probability tensors
Volatility-conditioned exceedances
Bayesian smoothing of probability estimates
Regime-specific probability surfaces
Portfolio construction under probability constraints
The framework generalizes naturally beyond equities and could be applied to volatility, rates, or macro instruments.
12. Conclusion
This work demonstrates that explicit conditional exceedance probabilities, when estimated and filtered rigorously, can form the basis of a systematic trading strategy with strong risk-adjusted performance.
By reframing trading as a problem of statistical decision-making under uncertainty, the approach avoids many pitfalls of traditional predictive modeling while remaining fully interpretable.

Interesting idea. Thanks for sharing.
Can you share the code for this?