← readthetape.cc Chart-reading guides Monkey Index Patterns tested

You said it couldn't be read. We graded everyone who tried.

The Tape Report No. 3 5 July to 24 August 2026

In July this game was posted to Hacker News and the thread argued about five things. Seven weeks of charts and 40,501 blind calls later, we humbly present the data.

This report was drafted by Claude Fable and edited by me, a literal human. I'm a team of one.

Read the Tape deals five real S&P 500 charts a day. Sixty daily candles, ticker and dates hidden, prices rescaled so the first close is 100, and one question: does this close higher or lower five trading sessions from now. Everybody gets the same five charts. Nothing that identifies the stock reaches the browser until the call is made.

Because the chart is anonymous, anybody can take the same test, and we can put them all on the same scale. So we did. Below are the crowd, the classic technical playbook, three frontier language models, and the up only play that doesn't even consider the chart.

the scoreboard
who is callingsampleright95% CI
Always up, never looks at the chart235 charts
58.7%
52.3 – 64.8
Wisdom of the crowd, the majority side235 charts
55.3%
48.9 – 61.5
Claude Opus 5, best of three models243 charts
55.6%
49.3 – 61.7
The average human call40,501 calls
53.9%
·
The textbook's net lean155 charts
49.0%
41.3 – 56.8
Fading the wisdom of the crowd235 charts
44.7%
38.5 – 51.1
Every row scored on the settled charts dealt between 5 July and 24 August 2026. Wisdom of the crowd takes the side most players called on each chart and grades that one collective call per chart; fading it takes the opposite side on the same charts. The average human call is graded per call rather than per chart, which is why it carries no chart-level interval. The 235 are the released charts where the crowd was not exactly tied (the open file below holds 241; six were dead ties). The textbook is scored only on the 155 where its eleven signals carried a net lean, and the models on the 243 charts we could rebuild bar for bar. Always-up on that 243 is 57.6%, so it wins that sample too. Every chart-level figure on this page recomputes from charts.csv and llm_calls.csv, published below. The vertical rule is a coin flip. Intervals are 95% Wilson on charts, not on calls.
what the thread actually said

The five objections below come from the Show HN thread, each linked to the part of the report that answers it. The full comments are quoted in their sections.

what the thread saidwhat the data says
“You can beat it by always picking up”Right, and by 5.5 points. Only 23.4% of 4,202 desks beat the rule, and practice does not close it.
“I would love to see an LLM's prediction in the stats”Three frontier models, same blind charts. None beat always-up. All three are far better calibrated than the humans.
“Technical analysis is astrology for boys”Backtested over 758,032 sessions. Seven of eleven patterns are noise, and both continuation patterns point the wrong way.
“Barely enough data in the charts to do TA properly”We shipped six more indicators. Accuracy did not move. Stated confidence fell.
“You are going to train an ML model to do the inverse”We ran the arithmetic. Fading the crowd scores 44.7%. The inverse is worse than the crowd.
Two of the five went against us: the crowd-fade result we expected to headline dissolved, and the indicator release did not do what we predicted it would.
the setup, and one honesty note

Each chart is 60 daily candles of a real S&P 500 constituent, from a random window whose decision point is at least 380 days in the past, prices normalised so the first visible close is 100 and volume divided by the window mean. The window is drawn by a seeded random pick, not chosen by hand. Before each call the server computes eleven classic signals on the visible bars only, trend, range position, momentum, RSI, MACD and Bollinger stretch, each carrying the direction the textbook assigns it, and stores them with the call. No lookahead: every signal is computed from bars the player can see.

The honesty note comes before any number, and it is the same one Tape Report No. 1 carried. Everyone plays the same five charts, so the calls are not independent observations. The window holds 40,501 calls from 4,202 desks, but the effective sample for anything chart-level is 241 charts, and that is what the intervals below are computed on. Every interval is 95% Wilson. This is seven weeks of one upward-drifting window and it cannot convict technical analysis of anything. What it can do is report the running score.

objection one of five

“You can beat it by always picking up”

"Yes - by always picking Up. Random stock on a random day has 53-55% chance of closing higher. Over 5 days, you will be right ~60%"

spizder

Correct, almost to the decimal. Across 40,501 calls players were right 53.9% of the time. A rule that ignores the chart entirely and calls up every time was right 59.4% on exactly the same calls, within a point of the comment's estimate. That gap has not closed in seven weeks.

It is not a handful of bad desks dragging an average down. Of the 4,202 desks that made at least five calls, 23.4% finished ahead of the always-up rule. And the share does not climb with practice: 19.3% of the 228 desks with 20 or more calls, 16.9% of the 118 with 50 or more. Those upper rows are thin and their intervals overlap each other, so the honest reading is "no visible improvement at the sample we have" rather than "practice makes you worse". The finding is that most desks fall short of the rule, not that the remainder have found an edge. Over five calls, chance alone puts desks on both sides.

desks withdesksshare that beat always-up
5 or more calls4,202
23.4%
20 or more calls228
19.3%
50 or more calls118
16.9%
The share of desks finishing ahead of the always-up rule, by how much they have played. The vertical rule marks half. The upper rows are thin and their intervals overlap, so read the table as "no visible improvement", not "practice makes you worse".

The mechanism is not subtle. 40.8% of all calls were down, in a market that rose. Up calls were right 61.3% of the time and down calls 43.2%. Players are not mispricing the charts so much as repeatedly betting against the drift that made the sample.

IS THE CHART GOING UP? YES NO CALL UP
The complete decision procedure of the rule at the top of the scoreboard.
objection two of five

“I’d like to see an LLM’s prediction in the stats”

"Would love to see the “prediction” of a LLM in the stats after playing"

lejeanvaljean

So we gave the test to three frontier models, one from each of the three labs: Claude Opus 5, GPT-5.6 and Gemini 3.1 Pro. Each one saw exactly what a player sees and nothing more, 60 rows of open, high, low, close and volume as plain numbers, prices rescaled so the first close is 100, no ticker, no dates, no indicator panel. Same question, same five-session horizon, one call per chart, no retries on a parsed answer and no best-of-n. Each model was reached through its own vendor command-line tool on our machine, so the exact command is publishable next to the numbers, and the prompt is published verbatim with the data.

$ claude -p "$PROMPT" < chart_001.txt UP · confidence 60 # five sessions later: -1.6% $ claude -p "$PROMPT" < chart_002.txt UP · confidence 56 # +0.9% $ claude -p "$PROMPT" < chart_003.txt UP · confidence 56 # -6.0%
The run's first three charts, verbatim from llm_calls.csv: one for three, and never more than 60. Across all 243 charts the best model called up 88.1% of the time at a mean confidence of 56.7, which is another way of saying it learned the base rate.
on the 243 charts all three answeredright95% CIsaid
Always up, never looks at the chart
57.6%
51.3 – 63.7·
Wisdom of the crowd, same charts
55.3%
48.9 – 61.573.8
Claude Opus 5
55.6%
49.3 – 61.756.7
All three, majority vote
54.7%
48.4 – 60.9·
Gemini 3.1 Pro
52.3%
46.0 – 58.559.6
GPT-5.6-sol
50.6%
44.4 – 56.856.3
“Said” is mean stated confidence. The crowd row is scored on the 237 of these charts where it was not exactly tied. The three models agreed with each other on 155 of the 243 charts. Scored instead on the full set each model answered, Claude Opus 5 took 55.6% against 57.6% for always-up, GPT-5.6-sol took 50.6% against 57.6% for always-up, Gemini 3.1 Pro took 52.3% against 57.6% for always-up. No arrangement of these numbers puts a model above the rule that never looks.

The accuracy column is the boring half. The confidence column is the finding, and it is far less sensitive to the sample than the ordering above it.

56.7 said, 55.6 scored

Claude Opus 5 stated about as much confidence as it earned. GPT-5.6-sol said 56.3 and scored 50.6, Gemini 3.1 Pro said 59.6 and scored 52.3. Against them the humans said 73.8 and scored 53.9. On the same blind charts the models are wrong about as often as people and roughly right about how often that will be, which is the part people are not.

Score them as probability forecasts rather than as calls and the gap stops being cosmetic. Against a forecaster who states the base rate every time and never looks at a chart, Claude Opus 5 lands a Brier skill score of +0.005, GPT-5.6 -0.012 and Gemini 3.1 Pro -0.029. All three sit within three points of simply knowing the base rate. The humans sit at -0.212. Two caveats keep that honest: the human figure is computed across all 40,501 calls rather than these 243 charts, and the players answer through a three-position control with a 55% floor while the models could name any number from 50 to 100. Neither caveat is worth twenty points.

Three limits, and the first is the one that matters. These models have read the market's history. Normalising the prices and stripping the dates stops a lookup, but it cannot stop a model recognising a series from its shape, and we make no claim that it did not happen. What the test measures is what a model does with an anonymised chart, which is exactly what a reader would try. Second, 243 charts is still 243, not 40,000. Every interval in the table above spans more than twelve points and they all overlap, so the ordering inside the model rows is not a result. What survives the interval is the comparison the section exists to make, which is with the rule that never looks. Third, a language model reading numeric bars is not the same instrument as one reading a picture, and we did not test the picture.

what we did not find

No model refused a single chart. All three answered all 243, which is worth saying because a refusal rate that differed between models would have quietly biased the comparison. The three agreed with each other on only 155 of the 243, so they are not one opinion wearing three badges, and they still land in the same place.

objection three of five

“Technical analysis is astrology for boys”

"Technical analysis is astrology for boys."

xnx

We are not going to argue with that. We backtested it instead, on a sample far larger than the game will ever produce: eleven textbook patterns over 758,032 sessions, 153 tickers, 2005 to 2024, scored on the same five-session horizon the game uses. The base rate of an up move over that sample is 54.7%.

patterntextbook saysfiredup nextvs baseverdict
60-day low breakdowndown32,18958.0%+3.3real, textbook backwards
RSI oversoldup21,04057.8%+3.1real, textbook right
Bullish engulfingup8,42656.0%+1.3not distinguishable from noise
Shooting stardown6,67255.9%+1.1not distinguishable from noise
Death crossdown2,12855.5%+0.7not distinguishable from noise
Dojinone79,77855.1%+0.3not distinguishable from noise
Bearish engulfingdown14,93054.8%+0.0not distinguishable from noise
Golden crossup2,19054.8%+0.0not distinguishable from noise
Hammerup5,95353.8%-0.9not distinguishable from noise
60-day high breakoutup79,94952.6%-2.1real, textbook backwards
RSI overboughtdown55,84252.4%-2.3real, textbook right
758,032 sessions across 153 S&P 500 constituents, 2005 to 2024, five-session horizon. “Up next” is the share followed by an up move against a base rate of 54.7%. “Real” means the p-value clears a Bonferroni correction for eleven tests (p < 0.0045). Definitions and the script are in the repo below, so the rules can be argued with directly.

Seven of the eleven are indistinguishable from the base rate. Four survive a Bonferroni correction for eleven tests, and those four split cleanly in a way the textbook will not enjoy. The two mean-reversion signals point the way the book says. Both continuation signals point the opposite way. A close at a 60-day high, the textbook's bullish breakout, is followed by a weaker-than-average week. A close at a 60-day low, the textbook's bearish breakdown, is followed by the strongest week in the table. On this sample the breakdown is a buy signal wearing a sell label.

Before anyone reaches for that as a strategy: the largest effect in the table is 3.3 percentage points, on a base rate of 54.7%. The best rule in the book gets you from 54.7% to 58.0%, which is roughly where you already were by not reading the chart.

today's horoscope, for boys
A golden cross forms in your chart this week. It means nothing (p=0.96).
RSI enters retrograde above 70. Expect weakness. For once, the data agrees (p<0.0045).
A doji at dawn signals indecision. It has fired 79,778 times and meant nothing every time.

Our own charts agree, at much smaller n. On the 155 of 241 charts where the eleven signals carried a net lean, that lean was right 49.0% of the time, interval [41.3, 56.8], which is a coin. The deficit is one-sided and matches the players': the book's up-leans were right 53.4% of the time, its down-leans 40.4%.

objection four of five

“Barely enough data in the charts”

"It’s a fun game and it throws funny shade for getting the answers wrong, but who would have guessed and sized these answers right based on this sparse data without any additional context? There’s barely enough data in the charts to do TA properly."

gizajob

This one we could answer, because after the thread we shipped the extra data. On 22 July the game gained SMA200, ATR and a split moving-average panel, and on 26 July Bollinger bands and a MACD histogram. Every call since 24 July records which overlays the player switched on or off before committing, so we can compare the calls where somebody reached for the indicators against the calls where they did not.

on that call the playercallsdesksrightstated confidencebrier
left the panel alone9,06174952.2%74.60.3162
switched an indicator on or off3,92943151.2%70.50.3040
Client-recorded calls from 24 July to 24 August. Roughly one desk in five blocks the tracker, so these are not all 40,501 calls.

More data did not make anyone more accurate. Pooled, the difference is a point the wrong way and not distinguishable from nothing (p=0.29). Comparing each desk only against itself, across the 96 desks with at least five calls on both sides, 39 were better with the indicators and 55 were better without (sign test p=0.12). That is a null, and at this sample it is the honest answer to the objection: the extra bars and the extra lines did not buy accuracy.

64 of 91

desks stated lower confidence on their indicator calls than on their untouched ones, by 2.8 points on average (sign test p=0.00013). We predicted the opposite. More instruments made people less sure, not more, and slightly better calibrated for it, without making them more right.

Two honest limits on that. It is observational and not randomised: a player chooses when to reach for an indicator, and if they reach on the charts they find hardest then the accuracy comparison is biased against the panel by construction. And it measures touching a control, not having one on screen, because two moving averages are on by default for everybody. A clean answer needs an experiment that withholds the panel at random, which we have not run.

objection five of five

“You’re going to train a model on the inverse”

"I 100% think you are going to harvest these decisions to train an ML model to do the inverse."

FajitaNachos

It is the best idea in the thread and we owe it an actual number, so we ran it. On the 235 released charts where the crowd was not exactly tied, the crowd's majority side was right 55.3% of the time, interval [48.9, 61.5]. Fading it therefore scores 44.7%. The inverse of the crowd is not a strategy. It is a worse strategy than the crowd.

The interesting part is why the crowd looks good here and still loses the scoreboard. The crowd's majority called up on 75.3% of charts, in a sample where 57.7% of charts rose. Most of the majority's 55.3% is inherited drift, not reading. Test it the other way: on the 58 charts where the majority said down, the market went up anyway on 56.9% of them. So the one place fading the crowd genuinely pays is its down calls, and "fade the crowd's down calls" is, of course, merely always-up.

this one went against the plan

An early read of this, on the first 52 settled charts, had fading the crowd comfortably ahead of following it, and we expected to publish it as the headline. At 235 charts it reversed and dissolved. We are reporting it because we said we would report it either way, and because "the crowd is not even reliably wrong" is a more useful sentence than the one we were hoping for.

what confidence buys

Every call carries a stated confidence, and the confidence sizes a paper-money stake, which is a stronger elicitation than a costless slider. Across 40,501 forecasts mean stated confidence was 73.8% and realised accuracy 53.9%.

stated confidencecallsright
55%, the floor8,052
51.6%
70%18,720
53.7%
90%13,715
55.5%
The control has three positions; these rows hold the 40,487 calls made at exactly those settings, and the remaining 14 of the 40,501 carry legacy values from an older control. Bars share one scale from 0%, and the vertical rule is a coin flip.

Thirty-five points of stated confidence buy 3.9 points of accuracy. Scored as probabilities the calls make a Brier score of 0.3011 against 0.2485 for a forecaster who states the base rate every time and never looks at a chart. The Brier skill score is -0.212: stating how confident they were made players measurably worse than saying nothing.

One caveat we state every time this number appears. The control has three positions and its floor is 55%, so a player cannot state a coin flip, and part of the 19.9-point gap between stated and realised is imposed by the interface rather than expressed by the player. The flatness of the curve is not.

a correction to tape report no. 2

No. 2 reported that players raise their stake after a loss, the classic double-down. Comparing each desk only against itself, across 271 desks with at least five calls on both sides, the call after a loss is 0.0 points worse than the call after a win, and that is not distinguishable from no difference (127 desks better after a win, 138 better after a loss, sign test p=0.54). The 1.8-point drop we published was composition: a weak desk produces more after-loss calls than after-win calls by construction. The earlier figure was a real number computed the wrong way round, and this one supersedes it.

what this can and cannot say
the data

Everything above is derived from the files and scripts below, and all of them are published. They are generated rather than typed, which is the rule this desk works to: copy carries only numbers a script printed. The data files download from this page and are mirrored, with the code, in the open repo: github.com/wstock/readthetape-data.

241 settled charts, one row each: ticker, window, decision date, the five-day return, the eleven textbook signals at the decision point and their net lean, the number of calls, the crowd's up-share and the share it got right. 39,569 calls sit behind those rows and none of them is in the file. No player rows, no ids, no per-desk anything. Every decision point is at least 380 days old, so the tickers are safe to name.

The eleven-pattern table over 758,032 sessions, and the script that produced it. It runs against Yahoo data with no dependency on us, so the definitions can be disputed and rerun. MIT.

All 729 model calls, one row per model per chart, with the stated confidence and the outcome, plus the runner and the prompt verbatim and the exact command used for each of the three vendor tools. MIT.

How charts.csv is built, and the check on this page. chart_release.py rebuilds each chart from its ticker and decision date, recomputes the signals with the game's own code, and drops any chart whose outcome does not reproduce exactly; 14 of 255 were dropped that way. tr3_stats.py recomputes every chart-level figure in this report from charts.csv and llm_calls.csv alone, and its output ships beside the data as tr3.json.

Licence: data CC BY 4.0, code MIT. Corrections and refutations are welcome and will be published. The game deals five new blind charts at 00:00 UTC every day, so the sample grows by five charts a day and every figure here will be regraded in public.