Sentimenthalengine v1.0.0
Methodology

How the engine works, in the open.

Sentimenthal is an experiment in transparent forecasting. Every choice below is a decision we can defend — or refine publicly when the data says otherwise.

What we predict

For every S&P 500 company, we publish a versioned forecast five trading days before its earnings call. The forecast is a target price, an 80 % price band, and the probability the stock closes above its T-5 price.

The prediction is locked in at T-5 and never edited. If the company reschedules the call, the prediction stays but is flagged schedule-changed.

When we evaluate

We score each prediction at the first regular-session close after the report is public. This rule handles pre-market, mid-day, and post-market releases uniformly: whenever the market next closes after news hits, that's our reality check.

How we score

The per-prediction score S ∈ [0, 1] is a blend of direction and magnitude:

S  =  w_D · D  +  w_M · M
D  =  1  if sign(predicted Δ) = sign(actual Δ), else 0
M  =  max(0, 1 − |predicted − actual| / (k · ATR₁₄))
w_D = w_M = 0.5   k = 3

The magnitude component uses 14-day Average True Range (ATR) at T-5 as the yardstick. A $3 miss on a sleepy utility scores worse than a $3 miss on NVIDIA — the volatility of the stock itself sets the scale. A miss of 3·ATR or more scores zero on magnitude.

The rolling coefficient on the home page is the mean of S across the last 90 days of scored predictions. Below 30 scored predictions, we label it stabilizing— visible, but don't read too much into it yet.

The five signals (v1)

Five features drive the v1 engine. All are computable from public market data; none require options prices, transcripts, or anything behind a paywall.

MOM
Momentum
The stock's 20-day total return going into the T-5 lock. Positive when the stock has been running up into the earnings call; negative when it's been sliding.
VOL
Volatility regime
20-day realized volatility divided by 90-day realized volatility. Values above 1 mean the stock is unusually jumpy lately — a signal that the market is already pricing in uncertainty.
SURP
Earnings-surprise history
The signed, magnitude-weighted pattern of the last four EPS surprises (beats and misses against consensus). Companies that reliably beat tend to continue beating — until they don't.
DRIFT
Post-EC drift
The average first-close-after-report return over this ticker's recent earnings calls. Captures a ticker's typical reaction pattern — some stocks pop on reports, some fade.
REL
Sector-relative momentum
The ticker's 20-day return minus its sector ETF's 20-day return. Positive when it's outperforming its sector, which sometimes reverses through earnings.

The v1.0.0 baseline model

v1.0.0 is deliberately boring: the five signals are z-scored against a trailing window, multiplied by equal weights (0.20 each), then scaled by the stock's recent realized volatility to produce an expected return. The target is current × (1 + E[r]); the 80 % band is the target ± 1.28σ; P(up) is a standard normal CDF on E[r]/σ.

Starting equal-weighted is the honest move. The learning loop (below) is what earns the model the right to get clever.

How the engine learns

Every prediction stores its full feature vector and each feature's contribution to the forecast. Weekly, we measure which features correlated with higher S over the recent window and nudge weights toward the helpful ones — with a small step size and floors/ceilings so no feature collapses or dominates.

Bigger changes run as shadow versions alongside the live engine. If the shadow beats live with statistical meaning, it's promoted and the version bumps.

Versioning & changelogs

Every prediction is immutably tagged with the engine version that produced it (e.g. v1.0.422). Major bumps are new methodology; minor bumps are new or removed signals; patch bumps are parameter re-tunings. The versions page carries both the auto-generated parameter diff and a human note explaining why a version was promoted.

What this isn't

Sentimenthal is an experiment, not investment advice. We publish the coefficient whether it's flattering or not. Treat every prediction as a forecast from an engine that is learning in the open — interesting, auditable, and occasionally wrong.