Methodology v2 · the range, and the record

What we publish

For every US-listed name we cover, Watstock publishes a RANGE over the next five trading sessions: a 10th, 50th and 90th percentile. The width of that range comes from the name’s own trailing realised volatility. The middle is nudged by two cross-sectional factors whose measured information coefficients are near 0.038. The word BUY, HOLD or SELL is a label on the middle — it is not a probability, not a claim of skill, and not a recommendation to trade. The only accuracy we claim is the published record on the scoreboard, shown next to a no-change baseline so it can be read. Watstock is a free information product: it executes no orders and holds no funds.

The stack, and what each part does now

One thing to read before the list: none of these models sets the published range. The width is trailing realised volatility and the centre is two cross-sectional factors; everything below is computed, shown on the name as context, and does not move the forecast. It used to, and that version was measured — see “what we stopped doing”.

  • FinBERT (finbert.org) — live. 86–97% on Financial PhraseBank. Domain-trained on SEC filings and news. Headlines scored through the Pro cloud API, then blended with FinLex, and shown as context on the name.
  • World Monitor equity layer — live. Server-authoritative Country Instability Index across 31 strategic states, Hormuz/Kerch chokepoints, Polymarket probabilities, and four engineered feature classes (level, delta, divergence, convergence). Mapped onto listed names with named drivers. It is shown beside a name as context and carries no weight in the published range — it was a 10% sleeve on the retired blend.
  • FinGPT v3 — LoRA-tuned LLM, strongest on several finance sets, needs a GPU. Reserved for a later training cluster, not the live desk.
  • FinLex — Loughran–McDonald + VADER valence + earnings phrases. Always on, transparent, and the fallback when FinBERT is cold.

The 5-day range

The range is the product. For every name we publish a 10th, 50th and 90th percentile over five trading sessions. The word beside it is a label on the middle of that range — not a claim of skill, not a probability, and not a recommendation to trade.

The width is the measured part. It is the trailing 60-session realised volatility scaled by the square root of five — a random walk, and deliberately so. We tested a pretrained time-series foundation model (Chronos-2) against that baseline over this universe at a five-session horizon, and the baseline won on every distributional measure: 80.82% of outcomes landed inside the stated 80% interval, against 75.69% for the model, with a better PIT histogram and a better pinball loss. The same model was also beaten on point accuracy by assuming no price change at all. So the best-calibrated forecaster we have measured is the simple one, and it is the one that ships.

The centre is nudged, not aimed. On a survivorship-free universe of roughly 3,400 names, two cross-sectional signals cleared a tradeable bar and are non-overlapping: 12-1 momentum (the 12-month return excluding the most recent month) and low volatility. Their information coefficients are +0.0379 and +0.0388, at a monthly horizon, with a shuffled-target control collapsing both to +0.0013. These rank names against each other. They are not a per-name price prediction, and they are not presented as one: each name’s cross-sectional z-score is converted into a shift of the centre sized by that measured information coefficient, scaled down to the five-session horizon, and hard-capped so the centre can never move more than a third of the way to the edge of the interval. In practice the shift is a fraction of a percent, which is what an information coefficient of 0.038 is actually worth over a week.

What we stopped doing. Until October 2026 the five-day number came from a weighted blend of a technical score, a news-sentiment score, a 5-vs-5 “sequence window”, the trailing five-day return, a hand-written direction vote and a geopolitical tilt. We measured it. Its cross-sectional information coefficient was +0.0001 (t +0.01), and its output was +0.877 rank-correlated with the trailing five-day return: it was extrapolating the previous week and printing the result as a forecast. It is gone. Technicals, the news tape and the World Monitor layer are still computed and still shown, now labelled as what they are — context about a name, not inputs that move the forecast.

  • Range width — trailing 60-session realised volatility x sqrt(5), lognormal about the last close
  • Centre — MOM_12_1 and LOW_VOL cross-sectional z, sized by measured IC, capped at a third of the interval
  • Context, shown but not driving — SMA/EMA, MACD, RSI, ATR, Bollinger, Stochastic, Aroon, OBV
  • Context, shown but not driving — FinBERT.org neural sentiment blended with FinLex
  • Context, shown but not driving — World Monitor equity layer: CII, chokepoints, prediction markets, divergence/convergence
  • Tape — Massive licensed aggregates, last print, and news

Signal-to-instrument map

Every World Monitor family is wired to the listed names it most plausibly leads. The event-alpha sheet on World Monitor is this map, live.

  • CII levels and 24-hour deltas → country ETFs (EWZ, EWW, TUR, KSA, UAE)
  • Prediction-market shifts → defense primes, energy majors, VXX
  • Hormuz / chokepoints → FRO, STNG, USO, BNO, refiners; airlines inverse
  • GPS / jamming / OREF → LMT, RTX, NOC, GLD
  • Cyber IOC language → CRWD, PANW, FTNT
  • Critical minerals → ALB, MP
  • Climate / crop stress → DBA

This map is context, not a forecast input: it says which listed names a geopolitical family plausibly touches, and nothing on it moves a published range. The product is decision-support analytics — you keep discretion, and we stay on the research side of the advisory line.

Buy, hold, sell

One number decides the word, and it is the centre of the range. It is the same number, read by the same function, that grades the call afterwards — so what we publish and what we are scored on cannot drift apart.

  • BUY — the centre of the 5-session range is +1.0% or more.
  • SELL — the centre is −1.0% or less.
  • HOLD — the centre is anywhere inside that band.

Expect a great many HOLDs, and read that as information rather than timidity. A weak cross-sectional rank signal moves the centre by a fraction of a percent, which is far inside this band. A confident five-day directional call on a single name is not something our measurements support, and we would rather publish a range we can defend than a word we cannot. Where the signals do carry information is the ordering of the book, which is the only form in which they were measured.

Sentiment floors and RSI overrides used to pull a directional forecast back to HOLD. They no longer do. A row held back that way was published as a flat view and then graded on the quiet-week rule — the label and the grade described different statements, and nothing we measured justified the cost. Calls published under those overrides keep a reason code on the record so the history stays describable.

There is no confidence score

We used to print a confidence percentage next to every call, built from agreement between the technicals and the news tape, headline coverage and a volatility stability term. We measured whether it predicted its own call being right. Its out-of-sample AUC was 0.477, with a confidence interval of [0.458, 0.497]; a coin flip is 0.500, and the entire interval sits below it. Isotonic calibration pooled twelve of its fourteen distinct values into a single constant — calibration can make a number mean what it says, but it cannot put information into an input that has none.

So we deleted it. The only number we will print beside a call is the published record: the trailing hit rate on calls that have already resolved, always with its sample size, and nothing at all until enough calls have resolved to report one. Uncertainty is carried by the range, which is the part of the forecast we can show you a coverage statistic for.

Scoreboard

Every published call is written before the fact and resolved against market prices after the fact. The correctness rule is fixed, published, and never tuned after the fact. Under methodology_v2 it is the same band the call is published on:

  • BUY is correct when return is at least +1.0%
  • SELL is correct when return is at most −1.0%
  • HOLD is correct when the absolute return is under 1.0%

Every rate is published next to a no-change baseline. A forecaster that assumes the price does not move publishes HOLD on every row, and under the rule above it is counted correct whenever the name finishes inside 1.0% — which most names do over five sessions. So a hit rate on its own tells a reader nothing. We score that baseline on the same rows with the same function and print it beside our own figure, with the sample size on both, and we publish the difference even when it is negative. We also print the mean absolute error of both, because an average error is meaningful before 10 calls have resolved and a rate is not.

The 1.0% dead band exists so HOLD is a real call, not a free win. A name with fewer than 10 resolved predictions shows “insufficient history”, never a percentage. Every call carries the methodology version it was published under and is graded under that version, so a rule change scores forward only. We never rescore the past.

What we claim, and refuse to claim

WATSTOCK claims exactly one thing: that its record is real. We refuse to claim accuracy percentages as marketing, guaranteed returns, or predictive certainty of any kind. Prior materials asserting figures of that sort — including the withdrawn 2017 plan — form no part of the product.

What it costs

Nothing. Watstock is a free information product: the five-session calls, the whole weekly ranking including the top of it, the watchlist, alerts, desk chat, the paper book and the public scoreboard are open to every account. There is no plan, no checkout and nothing held back behind one. Desk chat carries a daily question cap — that is abuse protection on a metered model, not a gate on the research.

Paper book and bank tickets

Open an account. Each book starts with $100,000 virtual cash. A mock fill uses the last session close. “Send to bank” issues a signed instruction you share — copy, download, email, SMS, or the phone share sheet — into your banking or brokerage app. We also deep-link to Fidelity, Schwab, IBKR, Robinhood, and E*TRADE research pages. We never transmit an order.

Services you can subscribe to

Nothing is required to run the desk. These keys upgrade the same app without a rewrite:

  • Massive — live. Formerly Polygon.io. Licensed US daily bars, snapshot last print, reference names, and news. Set MASSIVE_API_KEY.
  • World Monitor — live. Pro enterprise API. Equity layer: CII, country briefs, chokepoints, prediction markets, and market-transmission cards. Set WORLD_MONITOR_API_KEY.
  • Twelve Data — alternative tape. Set TWELVEDATA_API_KEY.
  • Hugging Face — live. Official ProsusAI/finbert weights. Set HF_TOKEN.
  • finbert.org — live backup. Pro cloud API, same three-class model. Set FINBERT_API_KEY.
  • Neon / Postgres — durable accounts and paper books. Set DATABASE_URL. Docker Compose includes Postgres.

Honest limits

Daily bars, not a streaming tape. The range is a random walk around the last close, which is the best-calibrated forecaster we have been able to measure — not a promise of alpha. The factors that move the centre were measured cross-sectionally at a monthly horizon; carrying them to five sessions is an assumption, and it is stated above rather than hidden. Published “98% accuracy” CNN-LSTM papers do not survive a live US book. World Monitor is a geopolitical overlay, not a stock model. Use the table as a structured second opinion — then do the work at your bank.