Methodology (v1.9)
Last updated (v1.9: analyst weight cut to 7.5% and bucketed; see changelog) · ThetaGrade Research · About us
House Rating
Universe: ~250 most-traded S&P 500 members (banks, REITs and balance-sheet financials excluded: consumer-finance lenders, insurance underwriters, mortgage/thrift finance and insurance-led holding companies; fee-based financials such as payments, exchanges and insurance brokers stay in). Each factor is a percentile (0–100) within the stock’s GICS sector; pillars combine with fixed weights. Grades: A = top 5% of the rated universe by score (currently score ≥ 61, 49 stocks) · B 65+ (not top 5%) · C 50–64 · D 35–49 · F <35. “Best of the best” = every stock scoring 70+. Missing data (v1.5): nothing is imputed. A factor without usable data is marked “data gap”, left out, and its weight is shared among the other factors in its pillar; if a whole pillar has no data, the remaining pillar weights are renormalized to 100%. Each rated page shows a “data gap” badge and the share of the method weight backed by data (coverage). Coverage floor (v1.6): a stock with under 80% coverage keeps its score-based grade (B–F) with a “limited data” badge, but is not eligible for grade A, Weekly Picks or the CSP screen; A slots go to the next eligible names by rank. Fallbacks before a gap is declared: gross profit = revenue − cost of revenue (CostOfRevenue, CostOfGoodsAndServicesSold, CostOfGoodsSold, CostOfServices and ex-D&A variants); operating income = OperatingIncomeLoss, else revenue − CostsAndExpenses, else pretax income + interest expense (EBIT proxy), else revenue − (cost of revenue + OperatingExpenses), each cross-checked against the EBIT proxy; interest expense from nine standard tags incl. interest paid; EPS diluted → basic → net income ÷ diluted shares; Market cap = SEC share count (cover page, else balance sheet, else latest-quarter weighted shares) × end-of-day close; P/E = end-of-day close ÷ SEC trailing-twelve-month EPS (market cap ÷ TTM net income when no current EPS series is tagged); share counts and EPS are put on the current share basis after stock splits (v1.7). The source used for each metric is recorded and shown on the stock’s page. Hygiene exclusions: price <$10, market cap <$2B, 20-day ADV <$20M.
| Pillar | Weight | Factors |
|---|---|---|
| Analyst sentiment | 7.5% (bucketed) | Consensus score (1–5) 3.8% · 90-day net rating shift 3.8% |
| Growth | 30.8% | Revenue growth YoY (TTM) 12.3% · EPS growth YoY (TTM) 12.3% · Revenue acceleration 6.2% |
| Profitability | 18.5% | Operating margin 9.9% · 4Q gross-margin change 8.6% |
| Balance sheet | 18.5% | Net debt / EBITDA 9.9% · Current ratio 4.9% · Interest coverage 3.7% |
| Cash flow | 12.3% | FCF margin 6.2% · FCF yield 6.2% |
| Valuation | 12.3% | P/E (inverted) 6.2% · EV/Sales (inverted) 6.2% |
Analyst sentiment (v1.9): 7.5% of the rating, from consensus and the 90-day net rating shift only; the broker-target upside factor is no longer used. The pillar score is bucketed (negative 17 / mixed 50 / positive 83), so it can move a rating by only a few points. Raw analyst data is not shown. Each company is counted once (secondary share classes such as GOOG are merged into GOOGL). Data-sanity flags (review only, never change a score): revenue or EPS YoY beyond ±100%, operating- or gross-margin change beyond ±15pp, or a debt/equity change beyond 2× year over year. “90-day net rating shift” = change in (strong buy + buy) − (sell + strong sell) analyst counts vs three months earlier (proxy for upgrades minus downgrades).
Picks, exits, screener
Weekly Picks: House Rating 65+, no earnings within 7 days (SEC-estimated window or company-confirmed date), max 2 per sector, top 5 by score. Exit rules (nightly): rating <60 or −15 pts; revenue growth negative or op-margin −300bp; net debt/EBITDA >4× or negative FCF; consensus −0.5 in a month or ≥2 net downgrades; 13-week review. Watch: close below 200-day.
CSP screen (v1.4 rules; v1.6 adds the 80% data-coverage floor): House Rating ≥65; no earnings before expiry; buy-leaning sentiment (≥60% buy ratings and consensus ≥3.5/5); high IV = the 30–45 DTE put’s implied volatility is at or above the 75th percentile of the universe’s 20-day realized volatility (IV history for a true IV Rank is not available, so this IV-percentile-vs-universe method is used and labeled); 30–45 DTE, standard monthly preferred; strikes at delta −0.20 to −0.30; liquidity OI ≥500, volume ≥100, bid-ask ≤10% of mid; annualized yield ≥12%; no trend filter; IV premium vs the stock’s own 20-day realized vol shown for context only. Output per strike: expiry, delta, est. avg credit (mid × 100, rounded to the nearest $10, delayed, for education), annualized yield (mid ÷ strike × 365 ÷ DTE), collateral (strike × 100), breakeven (strike − mid). The RSI-oversold and EMA-cross requirements were removed. Small-account tier (v1.3): the same passing names, filtered to the best-yield qualifying strike with collateral under $10k or under $25k per contract. Option chains, IV, Greeks and analyst counts come from a read-only Robinhood connection; raw quotes are not republished. On the site, implied volatility is shown only as a rank bucket vs the universe (for example “top 10% of universe”), never as an exact percentage (v1.8).
Futures
Expected move = implied vol ÷ √252 (day) or √52 (week) from Cboe VIX/VXN/GVZ/OVX; ZN uses TLT 20-day realized vol. Levels are floor pivots from ETF proxies (SPY, QQQ, GLD, USO, TLT). Positioning = CFTC Legacy COT non-commercial net, ranked in its 1Y/3Y range.
Fear & Greed gauges (Stocks, Futures)
Two 0–100 composites built by ThetaGrade (our own inputs and weights). Each input is turned into a score by ranking today’s value against its own trailing 252 sessions (a percentile; “fear-like” inputs such as volatility are inverted). The gauge is the weighted average of the inputs that have data; a missing input is a data gap and its weight is spread across the rest (nothing imputed). Labels: Extreme Fear 0–24 · Fear 25–44 · Neutral 45–55 · Greed 56–75 · Extreme Greed 76–100. Daily change = today’s score minus the previous session’s.
Stocks: breadth, share of our ~250-stock universe above its 50- and 200-day averages (25%); S&P 500 ETF vs its 125-day average (15%); net new 52-week highs minus lows, 10-day average (15%); volatility, our own 20-day realized volatility of the S&P 500 ETF, level and 5-day trend, inverted (15%); options skew, S&P 500 ETF put vs call implied volatility (10%, collecting history: weight renormalized until about 60 sessions exist); stocks vs bonds, 20-day return of the S&P 500 ETF minus a long-Treasury ETF (10%); credit appetite, 20-day return of a high-yield bond ETF minus a 7–10-year Treasury ETF (10%).
Futures: CFTC Commitments of Traders large-speculator net positions for E-mini S&P 500, E-mini Nasdaq-100, gold and crude, each placed in its 3-year range (40%; weekly report, used from the Friday release); volatility, our 20-day realized volatility of Nasdaq-100, gold and crude ETF proxies, inverted (30%); trend, S&P 500, Nasdaq-100, gold and crude ETF proxies vs their 50- and 200-day averages (30%). Futures prices are licensed, so ETF proxies stand in.
History: the 1-year chart is rebuilt from end-of-day bars; points in the first months use a shorter look-back (at least 126 sessions) and are marked as early estimates. Breadth uses today’s universe for past dates (survivorship bias). We publish only our scores and labels, never third-party prices, index levels or spreads. Updated each weekday after the close. Positioning data: U.S. Commodity Futures Trading Commission (public domain), credited to the CFTC.
Not financial advice. Sentiment readings describe mood; they do not predict returns, and extreme readings can persist.
Crypto
Coins: Bitcoin, Ether, Solana, XRP, Dogecoin, Cardano, Chainlink, Avalanche, Litecoin and Bitcoin Cash (large, non-stablecoin; reviewed quarterly). Crypto Fear & Greed (0–100), same scale and labels as above, inputs ranked against their own trailing 365 days: trend of Bitcoin, Ether and Solana vs 50/200-day averages (30%); 30-day momentum (20%); 30-day realized volatility of Bitcoin and Ether, inverted (20%); breadth, share of the 10 coins above their 50-day average (15%); spot bitcoin/ether ETF up-day volume share over 10 sessions (15%).
Per-coin labels: trend (uptrend, downtrend, mixed), momentum vs the coin’s own year (weak to strong) and a volatility bucket (low, normal, elevated, high). A short weekly crypto take is written from these labels for the newsletter. We never publish crypto prices.
Not financial advice. Crypto assets are highly volatile, lightly regulated and can lose most or all of their value.
Data sources
- SEC EDGAR XBRL companyfacts (fundamentals)
- Finnhub free tier: recommendation trends only (market cap and P/E moved to SEC data in v1.7; earnings dates in v1.8)
- SEC EDGAR submissions: 8-K Item 2.02 (earnings release) filing dates, used to estimate the next report date; company announcements for confirmed dates
- Massive free tier: grouped daily end-of-day bars (whole market, one call per day) and stock-split reference data
- Robinhood (read-only connection): option chains, implied volatility, Greeks, open interest, analyst buy/hold/sell counts (delayed snapshot)
- Cboe public index history; CFTC Public Reporting API
- Federal Reserve FOMC calendar; BLS release schedules (CPI, Employment Situation)
- Public RSS headlines (titles + links only)
Display and redistribution licences will be confirmed with each vendor before any paid tier.
Changelog
- v2.0 (2026-10-17): new ThetaGrade Fear & Greed gauges (Stocks, Futures) and a Crypto section, all our own derived scores and labels; volatility inputs use our own realized volatility; credit appetite uses ETF returns (no third-party spread data). House Rating unchanged.
- v1.9 data update (2026-10-17): no change to weights or rules. More fallbacks from SEC filings, nothing imputed. Capex now also comes from a company’s own 10-K XBRL tag when it has no standard capex tag (SEC companyfacts leaves these out). Capitalized software and intangibles count as capex when no PP&E line is reported. TTM EPS = TTM net income ÷ latest-quarter diluted weighted shares for filers that tag EPS only annually. Q4 = full year − 9-month year-to-date when the quarter sum turns negative after a restatement. Operating cash flow comes from the freshest fiscal-year tag. Pretax income is the EBIT proxy when no interest expense is tagged. Per-share series with scale errors in a filing are rejected. Names under the 80% coverage floor fell from 18 to 11.
- v1.9 (2026-10-17): Analyst sentiment cut from 25% to 7.5% of the House Rating and made qualitative: consensus and the 90-day net rating shift only (the broker-target upside factor is dropped), with the pillar score bucketed into negative / mixed / positive (17 / 50 / 83). The five fundamental pillars keep their relative weights and share the other 92.5% (Growth 30.8, Profitability 18.5, Balance sheet 18.5, Cash flow 12.3, Valuation 12.3). Effect: the A-list cutoff rose from 66 to 70; VRT, FIX, SYK and AVGO left the A-list and CF, EXPE, OXY and CBOE joined; CF replaced VRT in the Top 5; the CSP screen now passes MU only (AVGO fell to 63). The v1.8 scores are archived with the track record. CSP rules are unchanged; the screener adds a near-miss list (names failing exactly one rule). Futures volatility gauges (VIX, VXN, GVZ, OVX) are shown only as low / normal / elevated / high on fixed bands, and expected moves are rounded.
- v1.8 (2026-10-17): Earnings dates now come from SEC filings, not Finnhub. Each company’s past earnings-release 8-Ks (Item 2.02, matched to its 10-Q/10-K filings) project the next report: the same quarter a year earlier plus 52 weeks. The date is shown as “estimated” with a ± window. Back-tested on 247 companies (four quarters each), the median error is 0 days; for the names we call reliable, 100% landed within 7 days (mean 1.6 days). Dates confirmed from a company’s own announcement are shown without the “est.” label. The pick rule (no earnings within 7 days) and the CSP rule (no earnings before expiry) test the whole estimate window; a name with no estimate is not eligible until its date is confirmed. Third-party analyst data is no longer shown raw anywhere on the site or in llms.txt (no rating counts, buy percentages or consensus values); pages show only our own derived, rounded outputs (pillar score, a qualitative positive/mixed/negative lean). Screener IV is shown as a rank bucket vs the universe, not a percentage. Fundamentals are refreshed only when the EDGAR daily filing index shows a new 10-Q/10-K for the company.
- v1.7 (2026-10-17): Market cap and P/E now come from SEC filings and the end-of-day close instead of Finnhub (market cap = SEC shares × close; P/E = close ÷ SEC TTM EPS). Stock splits are applied to SEC share counts and per-share figures, which also fixes trailing EPS for companies that split during the year. Names whose SEC filings carry no total share count (class-level only, e.g. Visa) now show market cap, P/E, FCF yield and EV/Sales as data gaps. Screener implied volatility is shown as a whole number and newsletter-preview credits are rounded to the nearest $10.
- v1.6 (2026-10-17): 80% data-coverage floor for grade A, Weekly Picks and the CSP screen (“limited data” badge below it). More SEC XBRL fallbacks for gross profit, operating income, interest expense, D&A and EPS, plus EDGAR-based P/E and market-cap fallbacks; the source of each metric is recorded. Names with any data gap fell from 181 to 105 of the universe; median coverage rose from 93% to 100%. Universe: the $10 price rule is applied at selection, so SKYD’s slot went to the next most-traded eligible name, FSLR; fee-based financials stay in. Finnhub basic-financials metrics were not added as a source.
- v1.5 (2026-10-17): Universe now also excludes balance-sheet financials (removed COF, AXP, TRV, PGR, CB, ALL, BRK-B; backfilled with the next most-traded eligible names: ITW, VRSK, BDX, YUM, SKYD, CF, AXON). Missing data is no longer set to 50: it is a data gap and the remaining weights are renormalized (nothing imputed), with a “data gap” badge on the stock’s pages; the zero-capex and prior-year-capex assumptions for free cash flow are removed. EDGAR parser: revenue falls back to Revenues → RevenueFromContractWithCustomerExcludingAssessedTax → SalesRevenueNet (filled quarter by quarter only where the tags agree), utility operating-revenue tag added (fixes XEL), stale tags rejected, TTM figures require contiguous quarters (16-week fiscal quarters supported), operating income and gross profit are summed on the same quarters as revenue (stale operating-income and gross-profit tags were previously mixed in for several names), capex adds PaymentsForCapitalImprovements and oil-and-gas property tags; predecessor-registrant history merged for XOM.
- v1.4 (2026-10-17): Data-sanity check now uses per-metric limits (revenue/EPS YoY ±100%, margin change ±15pp, debt/equity change 2×); flags are review-only and never change scores. EDGAR parser: revenue tag chosen among tags with fresh quarterly data, largest total (fixes stale CBOE/NEE revenue and fee-only COF revenue); capex merged across tags and matched to the operating-cash-flow year, otherwise FCF is a data gap (fixes NEE, CBOE). CSP: screening uses IV percentile vs the universe only, with IV premium vs the stock’s own realized vol shown as a secondary column; 12% minimum annualized yield enforced; no trend filter; small-account tier shown on the screener.
- v1.3 (2026-10-17): “Upside to mean target” factor now live (broker analyst targets, read-only; stored only as a derived sector percentile). Each company counted once (GOOG merged into GOOGL). EDGAR parser fix for mis-dated duplicate XBRL facts (corrected FIX revenue growth from −48% to +46%). Fundamentals with YoY moves beyond ±40% are flagged for review. Weekly rating and daily IV snapshots started. CSP small-account tier (collateral under $10k / under $25k).
- v1.2 (2026-10-17): CSP screener reworked: removed RSI-oversold and EMA-cross requirements; added high-IV (universe IV percentile ≥75), buy-leaning sentiment and option-liquidity rules; real delayed option data replaces model estimates; credits shown rounded.
- v1.1 (2026-10-17): Grade A redefined as the top 5% of the universe (was ≥80). Weekly Picks and CSP threshold lowered to 65+ (was grade A / ≥70). Added “Best of the best (70+)” list.
- v1.0 (2026-10-16): initial method.
FAQ
- How often are ratings updated?
- Nightly after the close once live; fundamentals change when new 10-Q/10-K filings appear in EDGAR.
- Why rank within sector?
- Margins, leverage and valuations differ structurally across sectors; comparing a utility to a software firm would be misleading.
- Is the House Rating a recommendation?
- No. It is an educational summary of public data under a published, versioned method.