Method · version 3.0
How Veduta forecasts, and how often it is right.
Veduta does not say where a stock will be. It says how far the price is likely to travel, as a band, and then keeps score of every band it ever drew. This page explains both halves and shows the score so far.
In short. The app looks at how much a stock has moved lately, runs hundreds of possible next months from that, and draws the range where most of them end: half inside the dark band, 9 in 10 inside the light one. When the time is up, it checks where the price really ended. If its bands miss more often than they say they will, it makes them wider. The rest of this page is the detail, for anyone who wants it.
Tested on seven and a half years of real prices
The desktop app's model (version 3.0.4) was run on the real daily prices of 60 US-listed stocks and two index funds, SPY and QQQ, up to July 2026: 46 of the stocks and both funds from January 2019, the other 14 from mid-2022, once each had a year of history in the data. Every fifth market day, for every stock, it drew the band the app would have drawn that day, fitted only on the closes known then, with 2,000 simulated paths. Each band was then checked against the close a day, three days, a week, two weeks, a month, two months and three months later, where that day had come by July 2026. That makes 20,882 bands and 144,500 checks, every miss included.
| Horizon | Bands | Middle half held aim 50% | 9 in 10 held aim 90% | Width middle half | Width 9 in 10 | Likely range 90%, for 9 in 10 |
|---|---|---|---|---|---|---|
The likely range is a 90% interval for the 9 in 10 figure, from redrawing runs of calendar months at random 2,000 times: results from the same weeks hit or miss together, so the range is wider than the count alone suggests. The runs are two months long up to a month's horizon and longer beyond it, since a 3-month band shares most of its path with its neighbours. The width is the median distance from the bottom of the 9 in 10 band to its top, as a share of the price on the day it was drawn.
How narrow the bands were
Month by month
A plain rule, a band from the last year's volatility alone, held 89.8% at a month against Veduta's 90.6%, with bands about as wide (29% of the price against 28%). Month by month, its worst month held 24%, Veduta's 28%, and it fell under 80% in 7 of 90 months, Veduta in 5.
Where the prices landed
Stock by stock, at a month
The same test, in the browser
Veduta for the web and Veduta Lite run the same model, written again in JavaScript, from closing prices only. On the same stocks and days, at a month, it held a little less often than the desktop.
The same test on index and sector funds
The same model, days and horizons, on 14 funds that hold many companies at once: DIA, IWM, GLD, TLT and ten of the US sector funds (XLB, XLE, XLF, XLI, XLK, XLP, XLU, XLV, XLY, XLRE). They are counted apart from the stocks above.
| Horizon | Bands | Middle half held aim 50% | 9 in 10 held aim 90% | Width middle half |
|---|---|---|---|---|
What this test leaves out
- Stocks picked today. These are large, well-known companies now. A stock that collapsed or was delisted since 2019 is not in the list, which flatters any test a little.
- The plain model only. No earnings allowance, because past report dates were not in the data, and none of the corrections the app makes from its own record. Both would widen bands that run too narrow.
- Prices adjusted for splits and dividends, from the app's own saved Yahoo Finance prices. The drop on the day a dividend is paid out is taken away, so a band that held here held for the return with dividends, which can differ a little from the quoted price.
- A good run for stocks. Most of these rose over the period, partly because they were picked today, so more closes landed above the middle of the band than below it. The middle assumes only a modest rise, close to the market's long-run average, so a falling market would tilt this the other way.
- A model designed afterwards. Each band was fitted only on what was known that day, but the model's design (its long-run drift, how it picks the shape of the shocks, the half-and-half blend for the width) was settled later, with these years already in view.
- Calibration, not profit. This checks whether the bands hold as often as they say. It says nothing about whether trading on them would make money, and Veduta makes no claim that it would.
Run on 18 October 2026 with the code of version 3.0.4. Each stock's first year of prices only fed the model, so no band was drawn before it had a year of history.
The live record, since launch
| Horizon | Scored | Middle half held aim 50% | 9 in 10 held aim 90% | Missed the 9 in 10 |
|---|---|---|---|---|
Counted from every copy of the app that shares its record (Settings > Engine), for the plain model's bands; deep analyses, which set their own width, are counted apart. Each item is a horizon and whether the price ended inside the band; no symbol, price or person is sent. The figures cover the last year and update every ten minutes.
What "right" means for a band
A forecast that says "this stock will be $212 in a month" is almost always wrong, and saying so tells you nothing. A band can be checked properly. If Veduta says half of the likely paths end between $195 and $225, then over many forecasts the price should end inside that range about half the time. If it lands inside 30% of the time, the bands were too confident. If it lands inside 80% of the time, they were too timid to be useful.
So the app is judged on two things: whether its bands hold as often as they claim (calibration), and how narrow they are while doing it (sharpness). A band as wide as the whole market always holds and is worth nothing. The goal is the narrowest band that still keeps its promise.
On direction, over a few weeks the model has almost no opinion. It reports the share of simulated paths that end higher, and says "no clear direction" when that share is close to half, which it usually is.
How a band is drawn
- Volatility from the stock's own history. A GARCH(1,1) model is fitted to up to three years of daily returns (750 trading days). Its long-run level is anchored on the most recent year, so a calm or wild spell three years ago does not set today's width. Where daily highs and lows are available they are used too, because the day's range says more about volatility than the close alone.
- A second opinion on width. A HAR model of realised volatility, which looks at the last day, week and month, is blended in by how well each has scored on this Mac.
- Shocks with real tails. Each simulated day draws a shock from the stock's own fitted distribution: a Student-t when the data supports one, or a block bootstrap of the stock's past surprises, chosen automatically. Ordinary bell-curve shocks understate how often big moves happen.
- Earnings days. When an earnings report falls inside the horizon, the band gets a one-off allowance sized on that stock's own past reporting days, shrunk toward a published average when it has reported only a few times.
- The middle. The centre blends the volatility model with two others: the closest past episodes that looked like today (k-nearest neighbours) and a short autoregression. News tone, technical signals and the market regime may nudge it, but only within a small fixed budget, so they can never turn a band around on their own.
- Many paths. The model simulates the stock forward 600 times for the chart, 2,000 times for a tracked stock and 6,000 times in a deep analysis. The band is read off where those paths end: the middle half, and the 9 in 10.
How a band is corrected
Models drift from reality, so the drawn band is checked against the app's own history. Every band is written down the moment it appears on screen, whether or not anyone asked for it, and scored once its day arrives. Writing every band down matters: a record kept only when someone remembered to press a button would be a record of when they remembered.
Once 25 bands at a horizon have been scored, the app corrects new ones with split conformal prediction: it looks at how far past outcomes landed from the middle, measured in the band's own units, and widens or narrows the band to match what actually happened. It uses the order statistic with the (n + 1) adjustment behind split conformal's coverage guarantee. That guarantee assumes past and future forecasts are alike, which prices are not quite, so the target also adapts (Gibbs and Candès), tightening or loosening as recent coverage comes in. What that promises is coverage on average over time, which is why the record above is checked rather than assumed.
New in 3.0: a copy with fewer than 25 scored bands of its own borrows the correction from everyone's shared record above, and only ever to widen. Its own record takes over as soon as it is big enough.
Deep analysis
For a stock you care about, Deep analysis takes up to a minute to check the model against that stock's own past. It goes back to as many as 120 earlier days, fits the model on only what was known then, and checks the bands it would have drawn against what followed, a week, a month and three months later. If the bands were too narrow for this particular stock, it learns how much wider they need to be, shrinks that toward no change by how little evidence it rests on, and draws the forecast with it from 6,000 paths. It reports the stock's technicals and fundamentals beside the forecast without adding them in. The forecast stays deep, drawn in teal, until it is run again or switched back to normal. Veduta for the web and Veduta Lite run the same backtest on the device, from the daily closes they already have.
How the score is kept
- Tracked stocks. Track on Scorecard writes the model's estimate (the middle of its band) and the bands for eight checkpoints, from one market day to three months, and fills in the actual close as each day comes.
- Coverage with its uncertainty. The Scorecard reports how often bands held with a 95% interval, counting forecasts that end on the same day once, because they tend to hit or miss together.
- Against a baseline. Accuracy is scored with CRPS, a measure of how good a whole forecast distribution was, and compared with a random walk on the same forecasts. A Diebold-Mariano test says whether the difference could be luck, and the figure is coloured only when it probably is not.
- Shape, not only width. A uniformity test on where outcomes fell inside their bands catches bands that hold often enough but in the wrong places.
Limits
- The model only knows prices, a few fundamentals and headline tone. A takeover, a fraud or a court ruling lands outside any band drawn from history.
- The shared record counts what copies send. The site limits how much one address can add in a day, and the owner can pause it, but it is not proof against someone sending invented results.
- A few hundred scored bands is a start, not a verdict. The intervals on the Scorecard say how much the numbers could still move.
- None of this is financial advice. It is a careful estimate of how uncertain a price is, kept in check by scoring itself.
Download Veduta to see the bands for your own stocks, or read how to install it.