The financial reasoning behind each stage, with the actual formulas. The aim is a reading you can argue with: every number on the panel traces back to a tweet, a date and a close.
Three assets, chosen because they are the ones finance Twitter argues about most and each has a clean daily instrument to score against:
| Asset | Instrument used for scoring | Why this one |
|---|---|---|
| Bitcoin | BTC-USD | Spot composite; trades every day, so every call has an exit close. |
| Gold | GC=F | COMEX front-month future, not spot — it is what most "gold to $3,000" calls are actually watching. |
| S&P 500 | ^GSPC | Index level; calls on SPY, ES and "the market" are mapped here. |
The roster is fixed: ~100 accounts grouped into five schools — Macro, Crypto, Quant, Technical, Goldbug — spanning English and Turkish. Everyone on the roster contributes; nobody is pruned by hand. Trust does the filtering.
Only original posts are read. Replies and retweets are excluded at every layer, because a reply's context is unknowable and a retweet is not the account's own call.
A call is an explicit, falsifiable claim about where one of the three assets is going. It has four fields and an optional fifth:
| Field | Values | Notes |
|---|---|---|
| asset | BTC · GOLD · SPX | One row per asset when a post calls several. |
| direction | BUY · SELL · NEUTRAL | Neutral is a stated "sideways / no edge" view, not the absence of one. |
| horizon | SHORT · MEDIUM · LONG | 0–3 months · 3–12 months · 1–5 years. Taken from the author's own frame: level and pattern talk reads short; an undated expectation reads medium; a valuation or structural thesis reads long; a stated date wins. |
| confidence | 0–1 | How committed the language is. |
| price target | USD | Only when a level is actually stated. "100k" becomes 100000. A target implies direction. |
Everything else is not a call, and this list is where most of the precision comes from: reports of what already happened, news forwarding, ETF flow and volume, questions, chart captions with no opinion, generic macro commentary, and two-sided conditionals ("if it breaks up, moon; if it breaks down, crash"). Sarcasm and idiom are read as intended — "gold is a bubble" is a sell, however it is phrased.
Every call stores the exact phrase from the post that justified it. That is what makes the dataset auditable rather than a black box: any label can be checked against the words in seconds.
A call is scored once, when its horizon matures — 90 days for short, 365 for medium, 730 for long — against the daily close of the instrument above. Nothing is scored early and nothing is re-scored.
The return is compared to a flat band scaled to the asset's own volatility and to the horizon, so that noise in Bitcoin and a rounding error in the S&P over two years are not both counted as moves:
In practice the band is about ±11–13 % for Bitcoin over three months, ±22–24 % over a year, and about ±6 % for the S&P over a year. The market's own direction is then up above the band, down below it, flat inside it, and the call resolves to one of three outcomes:
| Outcome | Points | When |
|---|---|---|
| Correct | 1.0 | Called direction matches the market's direction (or called neutral and the market stayed inside the band). |
| Partial | 0.5 | Called a direction and the market stayed flat — or called neutral and it moved. |
| Wrong | 0.0 | Called one direction, market went the other. |
A stated price target is the most falsifiable thing an account can say, so it carries its own adjustment: +0.25 if any daily close inside the horizon touched the target, −0.25 if none did. The best close reached (the "extreme") is recorded either way, so a near miss is visible.
Trust is a per-account score for each asset and horizon, built only from matured calls:
The +5 / +10 is a prior of 0.5 worth ten calls. It pulls small samples toward the middle so that one lucky call does not outrank a fifty-call record, and it fades as evidence accumulates — with n = 100 the prior is worth 9 % of the weight. When an account has no matured calls for a specific cell, the lookup falls back to its asset-level score, then its overall score, then the 0.5 prior.
Two properties matter for reading the numbers:
For each of the nine cells (asset × horizon), every call inside the horizon window is weighted and summed:
The recency term halves a call's weight every third of the window, and calls older than the full window drop out — a three-month-old short call is stale by definition. The label is Buy above +0.15, Sell below −0.15, Neutral between, and n/a when there is too little weight to say anything. Each school also gets its own sub-reading per cell, weighted by the sum of its members' trust, so a one-person school cannot dominate.
Direction, not magnitude. A Buy cell says the trusted part of the roster leans long; it says nothing about how far.
Regime bias is real. Most of the period covered has been a bull market for all three assets, and most of the roster is structurally bullish. Trust scores partly reward having been long while things went up — long-horizon hit rates run 78 % against 57 % for short. A flip away from Buy is therefore more informative than a Buy.
Volume is not evidence. One account can post a thousand calls a year; trust caps its influence but a prolific, decent account still carries the most weight in its cells. The contributor list behind every cell is on the panel.
The extraction is a model. Labels are produced by a language model checked against a hand-labeled reference set; on that set it agrees on whether a post is a call about 90 % of the time, on direction about 90 %, and on horizon about 80 %. Horizon is the softest field, which is why the three horizons are kept separate rather than blended.
| Metric | Value |
|---|---|
| Original posts read | — |
| Explicit calls extracted | — |
| Calls matured and scored | — |
| Correct · partial · wrong | — |
| Hit rate, short · medium · long | — |
| Accounts with ≥ 20 scored calls | — |
| Data through | — |
The full per-account, per-cell breakdown, every call with its tweet and price points, and the contributor list behind each reading are on the panel. Request access.