This page documents the full pipeline: screening, growth filtering, valuation, margin of safety scoring, published outputs, and the main reasons you can end up with a lot of negative MOS values.
scripts/run_screener.py.valuearc_filtered_TODAY.csv, and metadata for the dashboard.The model uses:
MOS = (Intrinsic Value - Price) / Intrinsic Value
Negative values mean the modeled intrinsic value is below the current market price. That is not a math error. It is the expected output whenever the valuation assumptions are more conservative than the market.
Uses the median of available annual EPS values, with trailing EPS only as fallback.
Bear uses 0.5x historical EPS CAGR, base uses 1.0x, bull uses 1.5x, each with hard caps.
Uses a sector-specific base hurdle and then shifts it modestly lower or higher based on the quality multiplier.
Applies penalties for EPS volatility, negative EPS frequency, and leverage.
Uses the higher of conservative tangible-book-per-share or net-cash-per-share values.
The floor only prevents collapse below asset value. It does not push weak earnings names into positive MOS.
Utilities, consumer defensive, healthcare, and real estate get lower base rates because their cash flows are usually steadier, more regulated, or more defensive than the broad market.
Financials, communication services, industrials, and technology sit in the middle because they can still be durable businesses, but usually carry more operating leverage, cyclicality, or disruption risk.
Consumer cyclical, basic materials, energy, and unknown sectors keep the highest base hurdle because earnings are often more commodity-sensitive, cyclical, or dependent on favorable market conditions.
Price / Base Value or Value / Price if the goal is ordering, not literal margin of safety interpretation.MOS_Base_% and report bear/base/bull together, while keeping bear as a stress-test metric rather than the primary screen.