← BOARDCONGRESS →CONFLUENCE →INDICATORS →

READER'S GUIDE

How to use this paper

The views, the marks, and three ways to read them

What this paper is

Market Movers is an event-study paper in two halves. The first measures whether public figures' posts actually move the assets they name — abnormal returns against a market model, tested against random-date placebos so that luck has to announce itself. The second tracks congressional STOCK Act disclosures and follows each trade's forward returns; where a post and a trade land on the same ticker in the same month, the confluence page pairs them.

A guided tour

The front board

/

The board is the front page: one cell per tracked figure, ranked by nothing but reading order. It answers a single question at a glance — when this person posts about an asset, how hard does that asset move on the first day anyone could trade the news?

sig-mover
8.0%
MEAN |AR| DAY 0
▲ dir 6.2% · hit 83%
→ /figure/sig-mover

fig. 1 — one board cell

  1. 1The big number is the figure's average |event-day abnormal return| — the size of the day-zero move with the market's own drift subtracted, direction ignored.
  2. 2The dagger means the record is statistically significant: fewer than 1 in 20 random-date re-runs of the same events (the placebo test) produce a move this large. Without it, a muted “n.s.” says the number looks like chance.
  3. 3The footer is direction, never rank: green or red only says whether the market tends to go the way the posts imply, with the day-one hit rate alongside.
  4. 4The whole cell is a link — click through to the figure's drilldown.

The rankings ledger

/ (below the board)

Beneath the board, the same figures appear as a proper ledger with every statistic the engine emits. Click any column head to sort; the oxblood underscore marks the active column.

figure|ar| d0n / cleanhitp
sig-mover8.0%6 / 583%.030
noise-figure1.1%4 / 450%.610 n.s.

fig. 2 — two ledger rows

  1. 1Sortable column heads; the active sort carries the oxblood underscore.
  2. 2n / clean counts all scored events against those free of confounding corporate news — trust figures whose clean count is close to their total.
  3. 3The placebo p-value, with the dagger repeated at p < 0.05. A gaudy |AR| on four events and p = .61 is a shrug, not a signal.

The figure drilldown

/figure/[id]

Clicking a cell opens the figure's own page: a chart of directional cumulative abnormal returns by week, and the event log behind it. The chart settles the question the board can't — does the move stick, or does the market take it back?

012
w0w4w13

fig. 3 — directional CAR, weeks 0–13

  1. 1A line that jumps on day zero and holds above the zero rule through week thirteen: the market kept moving the post's way. That is persistence.
  2. 2A line that pops and bleeds back through zero: a splash, retraced. The event log below flags confounded dates where earnings or a split muddy the attribution.

Congress

/congress

The second half of the paper. Every row is one STOCK Act disclosure, followed forward from the reported execution date. Note the basis: returns run from the day the member traded, not the (often much later) day the filing made it public — the gap between the two is the lag, and disclosure-basis returns are what a copier could actually have earned. Below the trades, a members ledger totes up each member's year against SPY and the Dow over identical windows.

J. Q. Member · senate · 2025-01-14 · TSLA · buy · $50,001–$100,000
+365d +12.7%
armed services
earnings +12d

fig. 4 — one disclosure, folded

  1. 1The execution date — the day the trade happened. All printed returns start here; the public only learned of it on the disclosure date, weeks later.
  2. 2Amounts are disclosed bands, not position sizes; the paper equal-weights every trade.
  3. 3Forward return of the underlying at +30/90/180/365 days; blank until the horizon has elapsed.
  4. 4The overlap chip — the one loud mark in the paper — means the member sits on a committee that oversees the sector they traded.
  5. 5News chips within ±45 days are a caution: a nearby earnings date may explain the move better than the member does.

Confluence

/confluence

Where the two halves touch: a tracked figure's post and a congressional trade on the same ticker within thirty days of each other. Each pairing is scored on a five-dagger checklist; the sort puts the strongest coincidences first.

††††TSLA
sig-mover 2025-03-02 · bullish × J. Q. Member 2025-02-26 · buy
gap −4

fig. 5 — one pairing

  1. 1Strength, one to five daggers: base one, plus one each for direction agreement, a gap within seven days, committee overlap, and an amount band starting at $50,000. One dagger is a coincidence of ticker and month.
  2. 2The gap is signed — negative means the member traded before the post existed.
  3. 3Agreement: the post's sentiment and the trade's side point the same way (bullish + buy, bearish + sell).

The indicator desk

/indicators

For every post and trade, roughly 100 textbook technical indicators are evaluated on the ticker's daily bars as of the prior close — no lookahead — and each is scored a go (its condition agrees with the call) or a miss (it fights it). The desk holds two things: a leaderboard of the most common go-senders, and a list of every event where more than ten indicators piled in at once. A concurrence chip rides each row of the event log and the congress ledger too.

PODD · trade · 2026-05-07 · bearish
▼ 78/100 go
13 miss
go — technicals agree
rsi_14_osasof macd_12_26_9asofw5

fig. 7 — a concurrence chip, unfolded

  1. 1The chip is asof n_go / n_evaluated — gos out of the indicators with enough history. Over ten agreeing turns it oxblood: the concurrence flag, the same loud mark as the overlap chip. No match at all (the event predates the cached bars) shows nothing, not a zero.
  2. 2Click the chip to unfold the firing list, grouped go versus miss and family-ordered.
  3. 3Each indicator carries small asof / w5 tags: asof is the headline prior-close reading; w5 means it also fired somewhere in the prior five sessions. No single indicator is the edge — the busiest hover near a 53% go-rate — so read the count, not any one name.

The signal tape

/signals (top five above the board)

The desk's live summary, printed as of the last run: every ticker with recent activity, scored by decayed figure posts and decayed congressional disclosures. The top five run above the front board; the full ranked ledger, with every score's contributors, is the /signals page.

NVDA
▲ BULL
1.84signal
aligned
post sig-mover 2026-07-10 +0.038 · trade J. Q. Member 2026-07-14 +0.912

fig. 6 — one tape row

  1. 1The ALIGNED flag — the tape's one loud mark, echoed by the double oxblood rule at the row's edge: posts and trades point the same way at once, and the score carries a ×1.5 premium. It is a flag, never a data color.
  2. 2Direction, bull or bear, from the sign of the larger component — the only place green or brick appears.
  3. 3The signal score ranks the loudness of current agreement, not an expected return; every contribution fades on a half-life (posts 14 days, trades 21).
  4. 4The contributor line names the top post and top trade behind the score; the /signals ledger expands the full list per row.

Three ways to read it

Who actually moves markets?

start on the board →
  1. Scan the front board's big numbers — the average day-zero |AR| per figure.
  2. Discard anything without a dagger. A large number marked n.s. is what random dates produce; the dagger means the placebo test could not fake it.
  3. Click the surviving cell to open the figure's drilldown.
  4. In the CAR chart, follow the line past week 4 to week 13: above zero throughout means the move sticks; a fade back through zero means the splash was retraced.
  5. Confirm in the event log that the record isn't built on confounded dates, and back on the board check the hit rate sits well above a coin flip.

Follow a member

start on congress →
  1. Open the Congress page's trades ledger.
  2. Narrow the field with the state and member filters; add a date range if you care about a particular stretch.
  3. Click the +365d column head to sort by the year-out return; click it again to see the worst calls first.
  4. Before crediting skill, read the row's committee chip (do they oversee what they traded?) and the news ±45d chips (was earnings about to hit anyway?).
  5. Drop to the members ledger, filter to the same member, and read excess vs SPY year over year — beating the index is the bar, and a good sell counts by avoiding it.

Find smart-money alignment

start on confluence →
  1. Glance at the signal tape on the front page first — an oxblood ALIGNED row is this recipe pre-computed for today; /signals holds the full ledger.
  2. Then open the Confluence page for the event-by-event pairings.
  3. Set min strength to ≥ 4 — four of the five checklist marks.
  4. Set the agree filter to agree ✓ so the post and the trade point the same way.
  5. Read the gap with its sign: a negative gap d means the member traded before the post existed — the more interesting order of events.
  6. Cross back to the Congress ledger, filter to that member and ticker, and check the trade's news ±45d chips: if earnings sat between the post and the trade, the calendar, not confluence, may be the story.
  7. For one more angle, open the indicator desk → and read the row's concurrence chip: an oxblood go count over ten means the tape's own technicals already agreed with the call. Click it to see which indicators fired — the count is the signal, not any single name.

How the data gets here

Nothing on this site fetches the market. Hand-verified post dates live in seed/posts.csv; congressional filings are scraped from the Senate eFD and the House Clerk. The engine runs offline, prices everything, and writes plain CSVs to results/ — which these pages re-read on every request, so a fresh engine run appears on the next refresh, no rebuild required. From the repo root:

npm run corporate    # splits + earnings context (confounder flags)
npm run run          # post event studies  -> results/events.csv, rankings.csv
npm run congress     # STOCK Act trades    -> results/congress_trades.csv, _members.csv
npm run confluence   # posts x trades join -> results/confluence.csv

caveats, honestly stated

  1. a.Amounts are disclosure bands, not position sizes. Every trade is equal-weighted, so member figures measure per-trade judgment, never portfolio return.
  2. b.Option rows are priced on the underlying's move over the horizon — the bands disclose neither contract counts nor premiums, so the option's own leveraged P&L is uncomputable and is not shown.
  3. c.Price history comes from free-tier feeds with a bounded lookback. Returns print blank where a horizon runs past the available bars — a blank is missing data, not a zero.
  4. d.Disclosures arrive weeks after execution. Printed returns run from the execution date, which nobody outside the trade could act on; the lag column and disclosure-basis returns in the CSV measure the part a copier could actually capture.