Driftmaxx

Driftmaxx tests a simple question: when a stock moves more after earnings than the options market had priced in, does that move keep drifting afterward?

Inspiration

Post-earnings announcement drift is one of the classic examples of markets not always incorporating new information immediately. I wanted to test a slightly different version of that idea: instead of asking whether a stock had a "large" earnings move in absolute terms, I wanted to compare the move against what the options market expected beforehand.

The intuition was that a 5% move means something very different if options were pricing a 2% move versus a 10% move.

I defined an event surprise ratio:

$$ X = \frac{|r_{\text{earnings}}|}{M_{\text{options}}} $$

where rₑₐᵣₙᵢₙgₛ is the stock's completed post-earnings reaction and Mₒₚₜᵢₒₙₛ is the pre-announcement ATM straddle premium divided by the underlying price.

The preregistered hypothesis was that when X > 1 , meaning the realized earnings move exceeded the option-implied range, some of that information may still be incorporated gradually, causing the stock to continue moving in the same direction.

A competing explanation is equally important: the initial move could already represent complete adjustment or even overreaction. Driftmaxx was built to test which story survives realistic historical data.

How I built it

The project became as much a point-in-time market-data engineering problem as a trading strategy.

I combined:

  • FMP for historical earnings-calendar metadata
  • Massive for equity prices, NBBO quotes, historical reference data, corporate actions, and liquidity checks
  • Databento OPRA for historical option definitions and consolidated option quotes
  • HiPerGator + Slurm for large-scale acquisition and processing

The pipeline processed roughly:

  • 192,000 earnings-calendar records
  • 14,340 development events after timing, liquidity, and historical-reference filtering
  • 13,058 valid pre-event underlying-price observations
  • ~6.8 million historical option-definition records
  • 6,424 train and 3,592 validation events with selected option contract pairs

For each event, Driftmaxx reconstructs the market state before earnings, chooses a standard call/put pair around the underlying price, validates historical quotes, computes the option-implied move proxy, measures the post-earnings stock reaction, and then applies a completely frozen trading rule.

The executable strategy uses fixed position sizing, liquidity constraints, observed bid/ask spreads, slippage, commissions, transaction-cost sensitivity, and a separate out-of-sample evaluation process.

The hardest part

The biggest challenge was not writing the trading rule. It was making sure the historical experiment was actually believable.

Options data is messy. Tickers change, companies split, contracts disappear, quote windows can be sparse, current metadata can accidentally leak information about the past, and an option chain that exists today does not prove that the same contract was tradable at a historical timestamp.

I ended up building explicit checks for historical identity, contract definitions, timestamps, liquidity, quote quality, corporate actions, synchronized call/put observations, and request-budget limits.

One of the most important results was actually a failure.

I preregistered an 80% historical-contract coverage target before evaluating strategy results. The final coverage missed that threshold, and the downstream executable sample did not contain enough valid observations to support a defensible performance estimate.

Instead of loosening spreads, replacing failed events, changing the threshold, or tuning the signal afterward, I kept the original rules and reported the result as inconclusive.

That was frustrating, but it was also the most important research decision in the project.

What I learned

I started the weekend thinking the hard part of systematic trading was finding a clever signal.

I left realizing that the hard part is often proving that the signal existed when you claim it existed.

A backtest can look sophisticated while quietly depending on survivorship bias, revised datasets, future metadata, unrealistic fills, or convenient missing-data assumptions. Building Driftmaxx forced me to think about systematic trading more like experimental science: define the hypothesis first, freeze the rules, track every exclusion, preserve the out-of-sample period, model execution realistically, and be willing to accept an inconclusive result.

The final project is not a claim that I discovered a profitable anomaly. It is a reproducible research pipeline for testing whether option-implied expectations contain useful information about post-earnings drift—and a record of where that hypothesis became constrained by real historical market data.

Built with

Python · HiPerGator · Slurm · Databento OPRA · Massive · FMP · NumPy · Pandas · Matplotlib · Git/GitHub

Built With

  • algorithmic-trading
  • databento
  • hipergator
  • massive
  • python
  • quantitative-finance
  • slurm
  • times-series
Share this project:

Updates

Submission history