Methodology
Nothing on this site is entered by hand. Every figure is computed from a filing or a price series, and this page says exactly how.
The quality score
Four sub-scores, each 0–100, averaged into one composite and mapped to a letter. Every input comes from the company's own SEC filings.
| Sub-score | Inputs | Period |
|---|---|---|
| Growth | Revenue growth, earnings growth | year over year, annual periods only |
| Business quality | Gross, operating and net margin, ROE | latest annual filing |
| Financial health | Debt/equity, current ratio, cash/liabilities | latest balance sheet |
| Valuation | P/E, P/S, P/B | close × shares outstanding, over filed figures |
- Fixed bands, not percentiles. Each input is mapped onto a reference range — a 25% net margin scores high whether or not its peers do. A percentile computed over the few dozen companies currently covered would be noise dressed as precision.
- Missing inputs are named, not assumed. A sub-score averages only what could be computed, and the card lists what the filings did not provide. Nothing defaults to zero.
- Annual periods only. XBRL holds quarterly, year-to-date and annual figures under the same tag. Mixing them produces things like a 214% net margin, so every comparison is matched on period duration.
- It is not a recommendation. A high score describes filed financials. It says nothing about what a share is worth or what anyone should do.
The market brief and its two gauges
One brief is written before the open and one after the close, and every reader sees the same one — it is not personalised and does not know what you hold. A model writes the headline, the paragraph, the summary lines and the theme labels. It writes no numbers: every figure on the card is computed here and substituted in, and the narrative is checked against that same set, with anything untraceable flagged rather than shown as fact. If a generation fails, the previous brief keeps showing with its own timestamp instead of being replaced by an empty panel.
Sentiment, 0 (fear) to 100 (greed)
Ours, not CNN’s. We do not have their inputs and are not licensed to restate their index, so this is built from four things we can show our working for, averaged over whichever were available:
- Volatility — where the VIX sits inside its own trailing year, inverted, so a calm tape reads as greed.
- Breadth — the share of covered securities trading above their own 50-day average.
- Momentum — how far the S&P 500 is from its 125-day average.
- Highs against lows — how many covered securities sit within 2% of a 52-week extreme, and which way.
A component that cannot be measured is left out of the average rather than filled in with a neutral 50 — substituting a number is pretending to have measured something. Breadth needs at least 20 covered securities, and the highs-against-lows component needs at least six actually at an extreme: three names near highs and none near lows is arithmetically a perfect score and tells you nothing, and it read as “extreme greed” on a day the whole market was down until that floor was added.
Valuation, 0 (bargain) to 100 (extreme)
The median valuation sub-score across every covered security with enough filed fundamentals to score, inverted so that expensive reads high. The median rather than the mean, so one megacap on an extreme multiple cannot drag the whole reading. It is a reading on our covered universe, not on the whole market, and the card says how many securities that is.
Where data comes from, and how often
| Data | Source | Refresh |
|---|---|---|
| Quotes | Yahoo Finance | On request, cached seconds. 15-min delayed. |
| Daily bars | Yahoo Finance | Nightly 18:15 ET — history for charts and indicators. |
| Fundamentals | SEC XBRL companyfacts | Weekly, plus on filing detection. |
| Ticker universe | SEC company_tickers.json | Daily 04:00 ET. |
| Congress trades | House Clerk PTR filings | Daily 06:00 ET. |
| Executive trades | OGE Form 278-T | Weekly — scanned, so model-transcribed then validated. |
| Fund holdings | SEC 13F-HR | Daily 07:00 ET; filings cluster 45 days after quarter end. |
Prices are not real time. The current feed is 15 minutes delayed and licensed for development only; real time requires a paid provider. Quotes are fetched when a page asks for them rather than polled on a timer — polling spends requests on prices nobody is watching and is still stale for the ones somebody is.
Disclosed trades
Congressional and executive filings disclose an amount bracket, never an exact figure, and may be filed up to 45 days after the trade. Estimated values are the midpoint of the bracket, or shares × price where a filer volunteered them. Every row shows the trade date, the disclosure date and the gap.
The regulated brackets: $1,001–$15,000 · $15,001–$50,000 · $50,001–$100,000 · $100,001–$250,000 · $250,001–$500,000 · $500,001–$1,000,000 …
A ticker that does not resolve to a security in our universe is quarantined and never displayed. Attributing a trade to the wrong company is worse than omitting it.
Research and education only. Not investment advice, not a broker or registered adviser. Back to dashboard