Can AI Read Stock Charts? What 201 Blinded Tests Actually Showed
A developer-run benchmark on 201 historical charts, the 11 cases it got wrong, the two controls for memorization, and the number that stayed weak.
On 201 clear historical chart windows, an isolated Quant AI test engine classified the trend regime correctly 94.5% of the time, rising to 97.0% once ticker and date were hidden and 98.3% on charts from after the model's training cutoff. Every error was a directional chart called flat, never a bullish chart called bearish. None of this measures prediction, returns, or profit.
AI can read a stock chart, in a narrow and testable sense: it can look at a picture of price and tell you whether the period was trending up, trending down, or going nowhere. We measured how often it gets that right. On 201 historical chart windows the answer was 94.5%, and on charts drawn after the model's training data ended it was 98.3%.
What it cannot do is tell you what happens next. That distinction is the whole post, because almost every claim you have read about AI reading charts quietly slides from the first thing to the second.
Below is what we tested, the 11 charts it got wrong, the two controls we ran against the obvious objection, the one metric that came out genuinely weak, and what any of it means if you are pointing an AI tool at your own charts.
What "can AI read stock charts" actually has to mean
The question is unanswerable until you turn it into a task with a right answer.
Ours: show the model one image of 60 daily sessions and ask it to classify the window as bullish, bearish, or range. Truth came from arithmetic, not opinion. We fit a line through the log closes and required a fitted change of at least 18% with an R-squared of at least 0.65 for a directional label. Range meant fitted change inside 2.5% and a net move under 8%.
The task is deliberately clear. Charts that sat between those thresholds were left out of the corpus entirely, which means the result applies to obvious regimes and says nothing about the ambiguous ones traders argue over. We would rather have a narrow number that holds than a broad one that does not.
The corpus was 201 non-overlapping 60-session windows from 25 liquid US stocks, daily data from 2005 through 2025, balanced at 67 bullish, 67 bearish, and 67 range. Chart layouts rotated between price only, price with volume, and price with volume and RSI. Every image contained exactly 60 sessions and no future candles.
One more thing that matters more than it sounds: we wrote the protocol, picked the thresholds, set the pass marks, and hashed the prompt and the model before we scored anything. The gates were fixed in advance so we could not move them afterwards to make a result look better.
The headline number, and the sentence that has to follow it
The tested engine classified 190 of 201 charts correctly. Macro accuracy of 94.5%, with a 95% confidence interval of 90.5% to 96.9%.
Per class it was 92.5% on bullish, 91.0% on bearish, and 100% on range.
Bar chart of classification accuracy by trend type. Bullish charts were classified correctly 92.5 percent of the time, bearish 91.0 percent, and range 100 percent. A dashed line marks the 80 percent accuracy gate that was set before scoring began. All three classes cleared it.
Now the sentence that has to follow it, every time: 94.5% is retrospective classification accuracy, not prediction accuracy. The model was shown a finished chart and asked what already happened in it. Nobody made money from that. It says nothing about returns, slippage, transaction costs, or whether a single trade would have worked.
A model that reads a completed chart correctly 19 times out of 20 has told you nothing about tomorrow.
If you only take one thing from this post, take the gap between those two claims, because it is exactly where marketing copy in this category tends to land.
Every error went the same direction
This is the part we did not expect, and it is more useful than the headline.
All 11 mistakes were directional charts labelled as range. Five bullish charts and six bearish charts got called flat. Zero bullish charts were called bearish. Zero bearish charts were called bullish.
The model's failure mode was abstention, not inversion. Uncertainty pushed it toward flat. For anyone acting on this kind of output that is the better of the two ways to be wrong: a missed move costs opportunity, a reversed call costs money.
It also showed up in the confidence scores. Correct answers averaged 77.1 confidence, incorrect ones 61.3. The model was measurably less sure when it was wrong, so the confidence number carries information you can actually use.
A worked example of a miss
Case historical-016, GE, 9 June to 1 September 2011. Truth was bearish. The model said range, at 52 confidence.
Look at why. The fitted decline was 19.5%, barely over the 18% bar, with an R-squared of 0.654 against a 0.65 threshold. The chart cleared both directional tests by a hair. And the last ten candles rebounded from the mid $54s back toward $59, so the window ended by going up.
The evidence the model listed was accurate throughout. It saw price in the mid $66 area on the left, the sharp decline into the mid $54s, volume surging during the selloff, and RSI dipping below 30 near the trough before turning up. It read the chart correctly and then declined to commit to a label, because a decline that ends in a bounce genuinely does look less consistently bearish than one that ends at the lows.
Our threshold said bearish. A careful human might well have said the same thing the model did. Borderline cases look like this, and most of the 11 errors sat in that same band.
The memorization objection, and the two controls
The obvious complaint about testing a language model on historical charts: these are famous stocks in famous periods. GE in 2011. Visa across the 2008 crash. The model may simply remember what happened.
That objection is correct, and we ran two controls against it.
Control one, blinding. We re-rendered the same 201 charts with the ticker, company name, calendar dates, currency, and absolute prices removed. Each chart became Day 1 to Day 60 with a price index starting at 100. Nothing identifying survived.
Accuracy went to 97.0%, up 2.5 points from the baseline, with a 95% interval of 93.6% to 98.6%. Stripping the identity clues did not hurt performance, which is hard to square with a model leaning on recall.
Control two, the training cutoff. Stronger test. The model's knowledge cutoff is 31 August 2025, so we built 180 fresh windows from 180 unique stocks where every chart started after that date, spanning September 2025 to May 2026. Charts the model could not have seen, of periods it was never trained on.
Accuracy was 98.3%, interval 95.2% to 99.4%, on 180 of 180 valid responses.
Both controls point the same way. Neither one closes the case, and the honest limits are these: visual pattern memorization is still possible, because a rising staircase looks like a rising staircase whether or not you know the ticker. The post-cutoff set was drawn from current S&P 500 members, which builds in survivorship bias, since a company still in the index in 2026 was by definition not wiped out during the test window. And the whole thing remains retrospective classification.
What came out weak
A benchmark that only reports its wins is advertising. Three numbers came back soft.
Recent momentum accuracy: 60.2%. Asked what price was doing in the final stretch of the window, the model came close to a coin flip on a three-way question. Reading the shape of a completed 60-day window is a very different skill from reading the last few candles, and the model is clearly better at the first.
Action agreement on repeat runs: 66.7%. Ask the same chart three times and the trend answer held 95.8% of the time, but the suggested action (long, short, hold, no setup) only held two thirds of the time. The read is stable. The recommendation built on top of it is not, and that gap is worth sitting with if you are treating any AI output as a signal.
One unstable case. On a bearish AMD chart, six requests split three ways between bearish and range across control, crop, dark mode, and JPEG variants. Most charts did not do this, and image-variant agreement across the stability subset was 98.6%. But it happened, on a borderline chart, and borderline charts are where you least want the answer to depend on how you cropped the screenshot.
There is also a scope limit worth being blunt about. This was 25 US stocks on daily charts. Crypto, forex, intraday timeframes, and thinly traded names were not tested at all, even though the app covers several of them.
How the number got here
Three studies got us here, and the earlier two are why the third is worth anything.
Bar chart showing benchmark accuracy across three studies. The synthetic pilot scored 69.4 percent, the first holdout scored 90.5 percent, and the confirmatory study scored 94.5 percent. The studies used different models, prompts, and labelling thresholds, so the rise is not a like-for-like comparison.
The pilot ran GPT-4o mini against synthetic charts and scored 69.4%, failing badly on range detection. The first holdout moved to real charts with a looser 10% directional threshold and reached 90.5%, but it surfaced borderline bearish errors and weak stability, which is what prompted a tighter protocol.
The confirmatory run used different stock symbols from the first holdout, a stricter 18% threshold, and gates frozen before scoring. Read the chart above as a record of how the testing changed. It is no evidence that one model is 25 points better than another. Model, prompt, thresholds, and corpus all moved between the bars.
Total cost for the confirmatory scored run was $1.11 using the Batch API, and $3.99 across the whole experiment. That is worth stating because it means anyone can replicate this cheaply, and because a benchmark nobody can afford to re-run is not really checkable.
What this means if you use an AI chart tool
You do not need to run a benchmark to apply the findings. Four things follow directly.
- Trust the regime call more than the trade call. The trend read held 95.8% across repeats. The action recommendation held 66.7%. Those two outputs come out of the same response and they are not equally reliable, so treat "this window is bullish" as much firmer than "go long here."
- Treat a low confidence score as a real signal. Wrong answers averaged 61.3 confidence against 77.1 for right ones. When an AI tool tells you it is unsure, it tends to be unsure for a reason, and a flat answer on a chart that looks directional to you earns a second look before you override it.
- Ask what evidence it used. In our run, 99.5% of returned evidence pointed at things visible in the image, and the model listed its own limitations, including no volume panel and no numeric candle labels. Output you cannot trace back to something on the chart is output you cannot check. This is the same discipline that applies when you detect chart patterns from a screenshot: the machine finds the geometry, you verify the level is real.
- Do the levels yourself. Classifying a regime is not the same as finding where price actually turned. Marking support and resistance and reading what price action is doing at those levels is still the work, and it is still yours.
Common mistakes when reading AI chart output
- Reading a classification number as a prediction number. 94.5% describes labelling a finished chart. It is not a hit rate on trades and it never was.
- Assuming the benchmark covers your market. Stocks on daily charts were tested. Crypto, forex, and intraday were not, and there is no basis for assuming the numbers carry across.
- Ignoring the abstention. When a model calls a chart flat that looks directional to you, you are usually looking at a borderline chart. Check the fit before you dismiss it.
- Treating one screenshot as context. Every limitation list in our run said the same thing: only one chart was provided, so broader market context could not be assessed. One window is one window.
- Taking a vendor's accuracy claim without a protocol. Including ours. A number without a stated task, a labelling rule, a sample size, and a published failure list is not a result.
What we are not claiming
Worth being explicit, because the temptation runs the other way.
The engine tested here is an isolated candidate, not the shipped app. The live Quant AI endpoint, its prompt, and its model were unchanged throughout this study and did not run this benchmark. Nothing here says the app you can download performs at these numbers.
We are not claiming prediction accuracy, that anyone can earn money from these outputs, or that the model works purely from pixels with no memorized knowledge. The blinded and post-cutoff controls reduce the memorization concern. They do not eliminate it.
And the study was designed and run by the developer of the product it evaluates. Independence is the one concern on our register we cannot resolve ourselves, which is why the protocol, the prompt hash, the model snapshot, the raw evidence, and the batch IDs are all published. The point of publishing them is that you do not have to take our word for it.
Frequently asked questions
Did the model see future candles? No. Each image showed one 60-session window, and the label was computed from those same displayed sessions. Nothing after the window's last candle entered the image or the truth label.
Does 94.5% mean it predicts stocks 94.5% of the time? No. It classified the trend regime of a chart that had already finished. No forecast was made or scored.
Could the model just be remembering these stocks? Partly addressed. Hiding tickers, dates, currency, and prices raised accuracy to 97.0%, and 180 charts from after the training cutoff scored 98.3%. Visual pattern memorization is still possible, because chart shapes repeat.
Does the app I can download use this engine? No. The benchmark candidate stayed isolated from the production endpoint. Any change to the live product would need its own controlled deployment and evaluation.
Why were ambiguous charts excluded? Because ground truth on them is unreliable. If two experienced traders would disagree about the label, scoring the model against one of those opinions measures nothing. The tradeoff is that the result only covers clear regimes.
What was the weakest result? Recent momentum accuracy at 60.2%, and action agreement across repeat runs at 66.7%. Both stayed outside the publication gates on purpose, because neither was good enough to claim.
Was crypto or forex tested? No. 25 US stocks on daily charts only.
Where this leaves the question
AI can read a stock chart the way a competent assistant can: it sees what is on the image, describes it accurately, classifies the obvious cases reliably, and goes vague at the edges. Real capability, and much narrower than the marketing around it.
Quant AI reads a chart screenshot and returns the trend it sees, the levels it can find, and the evidence it used, so you can check the reasoning behind the verdict. The regime read is the part this testing supports. Deciding whether a setup is worth risking money on is still the part that is yours, and the benchmark above is not evidence that any of it is profitable.