Price Path Analysis PE decomposition, technical indicators, stretched score, and target accuracy tracking

Price Path Analysis operates at two levels: index-level (SPY, QQQ, SMH, IGV) for market regime context, and company-level for individual ticker flags. It answers the question: is the current price move driven by earnings growth or multiple expansion?

Index Price Path

Computed daily for four index ETFs that represent the platform's sector coverage:

IndexCoverage
SPYBroad market (S&P 500)
QQQLarge-cap tech (Nasdaq-100)
SMHSemiconductors
IGVSoftware

Technical Indicators

IndicatorParametersPurpose
RSI-1414-day, Wilder-smoothedOverbought (>70) / oversold (<30) detection
Bollinger Bands20-day SMA, 2 stdVolatility envelope; price above upper band = stretched
Moving Averages3M (63d), 6M (126d), 2Y (504d)Trend context; deviation from SMA = mean reversion signal
Price Deviation% from each SMADistance from trend indicates stretch or compression

PE Decomposition

Decomposes 6-month total return into earnings growth vs multiple expansion:

total_return = price_now / price_6m_ago - 1
earnings_growth = eps_now / eps_6m_ago - 1
multiple_expansion = total_return - earnings_growth
LabelConditionInterpretation
Multiple-DrivenExpansion > 60% of returnRally is P/E expansion, not earnings — fragile
Balanced40–60%Healthy mix of growth and re-rating
Earnings-DrivenExpansion < 40%Rally backed by fundamentals
ContractingNegative total returnBoth components declining

Stretched Score (0–100)

Composite measure of how extended the index is from fair value. 0 = oversold, 50 = neutral, 100 = stretched.

ComponentWeightScoring
Deviation from 6M SMA30%>10% above = 80+, at SMA = 50, >10% below = 20
RSI-1425%Mapped directly (0–100)
Bollinger Band Position15%Above upper = 85, within = 50, below lower = 15
PE Decomposition15%Multiple-driven = 75, balanced = 50, earnings-driven = 30
Price Acceleration15%Positive acceleration = higher score (more stretch risk)
LabelScore Range
Technically Stretched≥75
Elevated60–74
Neutral40–59
Mean-Reverting25–39
Oversold<25

Company Price Path Flags

Flags individual tickers where price has run ahead of fundamentals:

Trigger: price > 1Y analyst target × 1.05
AND PE expansion > EPS change × 1.5

Signal: price_path_flag = "stretched_multiple_expansion"
Valid: 7 days (TTL)
Surfaces in: Discoveries → Contrarian Sell pane
Why 1Y Analyst Target?

The valuation drift signal was updated to use the system's 1-year analyst consensus target (scaled from the 2-year thesis target) instead of the raw 2-year thesis target. This gives a more grounded comparison: if the stock is already 5% above where analysts think it should be in 12 months, and the move is multiple-driven, that's a concrete flag.

Target Accuracy Tracking

Daily comparison of two competing price targets against the current price:

TargetSourceField
Our 12M Targetinvestment_theses.target_12mScaled from 2-year thesis bull/base/bear framework
Analyst Consensusanalyst_ratings.target_consensusMean of sell-side 12-month price targets
our_gap_pct = (our_target / current_price - 1) × 100
consensus_gap_pct = (consensus_target / current_price - 1) × 100
our_closer = TRUE if |our_gap_pct| < |consensus_gap_pct|

Stored in target_accuracy_snapshots table. Over time, this builds a track record of whose price targets more accurately anticipate where the stock ends up.

Dashboard: Target Scorecard

The Predictive Analysis page shows a Target Scorecard grouped by custom sector taxonomy:

MetricDescription
Our Target Closer %Percentage of tickers where our target is nearer to current price than consensus
Avg Our GapAverage absolute distance of our target from current price
Avg Consensus GapAverage absolute distance of consensus target from current price
Win Rate by SectorOur closer % broken down by sector group

Refresh Schedule

TaskCadenceTime (ET)
Index price path (SPY/QQQ/SMH/IGV)Daily (Mon–Fri)8:35 AM
Company price path flagsDaily (Mon–Fri)8:35 AM
Target accuracy snapshotSunday4:50 AM (alongside conviction snapshot)