Methodology
The whole point of adhdeck is that you don’t have to take our word for it. Here is exactly how the numbers are made — and what they deliberately exclude.
How a call becomes a number
Entry price
The official closing price on the call’s publish date (entry_date). If that date isn’t a trading day, we use the next trading day’s close.
Marking open positions
Open calls are marked to market at the latest available close (the “as-of” date of the most recent pipeline run). Closed calls are marked at the close on their exit_date.
Short returns
A short’s return is the negative of the price change: if the asset falls 10%, the short call is +10%.
Model portfolio
Equal-notional per call (each call’s weight defaults to 1). Each call contributes one equal-weighted position from its entry date. The equity curve is the combined, daily-rebalanced mark-to-market value of all open positions, rebased to 100 at the first call. Cash drag and financing/borrow costs are ignored in this version.
Benchmark
Each call is compared to its asset-class benchmark: equities, ETFs and ADRs vs the S&P 500 (SPY); crypto vs BTC. The portfolio-level benchmark is the S&P 500, with crypto calls individually benchmarked to BTC.
Unresolved calls
If price data is missing for a call, its status is unresolved: it is excluded from aggregate statistics and surfaced visibly in the table. We never silently drop or interpolate data to flatter the curve.
Data sources
- Equities / ETFs / ADRs — daily closes from Yahoo Finance.
- Crypto — daily closes from the CoinGecko API.
- Calls — hand-authored YAML in
/data/calls, committed to git (tamper-evident timestamps).
What we do and don’t count
- Public, time-stamped calls with a link to where we said it.
- Both open and closed positions (open marked to the latest close).
- Longs and shorts, equities and crypto.
- Private or undated opinions, or anything we can’t link to.
- Cash drag, leverage, financing, slippage, or fees (yet).
- Backdated, edited, or deleted calls — history is never rewritten.
Exposure Graph — relationship map, not a forecast
The Exposure Graph is a hand-curated, sourced web of who-depends-on-whom. Many things people want exposure to can’t be bought directly (Anthropic, OpenAI, private labs); the graph traces every buyable path to them — equity holders, suppliers, partners, and the themes they ride.
What the score means
An impulse on one node propagates across directed edges, decaying with distance, flipping sign on inverse (competitor/substitute) links, and scaling by each edge’s weight × confidence. A node’s exposure is the sum over every path, normalised so the strongest reached node sits at ±1. It is a qualitative measure of relationship strength and distance — never a predicted return.
Two directions
Downstream proxies trace outward from an entity to the buyable things it drives (how to get exposure to it). Upstream drivers trace inward to what moves a ticker — its dependencies, suppliers, and themes.
Every edge is sourced and dated
No unsourced relationships: each carries a source_url and an as_of date, with a confidence weight shown on selection. Private-company links come only from public disclosures. An LLM may propose candidate edges, but a human curates every one — the curated graph is the moat.
Buyable and liquid only
Public tickers are validated against a committed registry; illiquid or untradeable “proxies” are flagged, because fake exposure is worse than none.
The compiled graph behind the explorer is available at /api/graph.json.
Disclosures — the record as filed, not a signal
Disclosures tracks what public people and funds report to the SEC: insider transactions (Form 4) by the filer’s own reporter CIK and quarterly fund holdings (13F-HR). Every row is copied from the primary document and links to it on sec.gov. Nothing is estimated and nothing is inferred beyond the document.
Exact figures or the disclosed range — never both
Form 4 and 13F state shares and prices, so an amount_usd is shares × price. STOCK Act reports (Congress, phase 2) disclose only a range such as $15,001–$50,000; we keep the range as filed and never turn it into a number. A holding whose CUSIP is not in our committed registry shows ticker: null rather than a guess.
What importance means
One scale for the whole product (a federal contract reads 70–85, a material filing ~57). Money spent at market (code P) outranks money taken out (S); a discretionary sale outranks one pre-scheduled under a Rule 10b5-1 plan; grants, exercises and tax withholding are compensation mechanics and stay near the floor. Size lifts a score on a log scale ($10K → nothing, $10M → the full lift). Option-table rows are discounted and hidden by default. For a 13F, a new position or a full exit outranks a trim, lifted by the dollars involved.
The lag is content
Every item carries both the trade date and the filing date. A Form 4 is due within two business days of the trade; a STOCK Act report within 45 days. Past the deadline the item is flagged late_filing and scores higher — the delay itself is news. Weekends and holidays are excluded: the clock runs on the SEC/EDGAR business-day calendar (federal holidays with their observed-day shifts — a Saturday holiday closes the Friday before, a Sunday one the Monday after), so a holiday inside the two-day window never turns an on-time filing into a “late” one. A Form 4 filed alongside a Form 3 for the same issuer (an IPO, a new board seat) catches up on trades that predate the reporting duty and is never called late.
Ownership and plans as the document says
Direct holdings are self; indirect ones are classified from the filing’s own wording (spouse, joint, dependent, trust, fund). A 10b5-1 flag requires the filer’s affirmation on the form or a footnote stating the trade was made under such a plan — a footnote that merely mentions plans does not count.
Derived stats say what they are derived from
A person’s dossier computes a few numbers from the rows in the snapshot window and labels each with its basis (“derived · N filings · 90d”). The code breakdown keeps P / S / A / M / F / G apart and sums exact dollars only. The holdings series is holdings_after as filed, per ticker and owner, with the code that moved each step — it moves on grants and withholding too, so it is a balance, not a buying record. Sector exposure maps tickers through the Exposure sector tree; whatever the tree cannot place is shown as “not in graph” rather than dropped, so a partial share reads as partial. A portfolio chart is drawn only from a 13F (quarter-end long US equity positions, disclosed ~45 days later); a Form 4 filer’s page lists disclosed balances per issuer instead, because Form 4 covers only the issuers where they file — no portfolio weights can be drawn from it.
The graph overlay is a lookup, not a source
Disclosure tickers are linked to Exposure nodes by exact ticker through a committed map. The map never adds a node or an edge — a filing is not a source for a dependency, and the graph stays hand-sourced with asource_url and as_of on every edge. A company dossier lists what the tracked people filed on that node; that we track a handful of people means an empty list is not evidence of no activity.
Draft posts, human gate
Items above the post floor become deterministic draft texts (who, what, how much, when, lag, owner, link, disclaimer — no adjectives, no LLM). A person approves or rejects every draft; nothing is published automatically.
The snapshot behind the feed is available at /api/disclosures.json.
The derived data behind every chart and stat is available at /api/portfolio.json.
Not investment advice. Past performance is not indicative of future results.