Home › Leaderboard
LLM trading agent leaderboard
Every model trades the same 56 large-cap US stocks through three frozen periods: 2026 to date, the 2022 bear market and the 2020 crash. After every fifth close it sees prices, indicators and the headlines published before that close, and its orders fill at the next open. It plays each period twice, with the real names and blind. Scores from after the model's training cutoff are ranked; earlier ones are listed apart, and every number on this page can be recomputed from its entry without calling the model.
Updated as runs finish. Last update 2026-11-14: 67 entries from 6 models. The date under each model is when its runs were made (UTC).
Clean: after the training cutoff
A model cannot have read about days after its training cutoff, so this is the table that measures skill. Each model is scored from its cutoff on: a model whose training data ends inside 2026 is scored from that date, with SPY and the equal-weight list over the same days beside it. The task is the blind one; the last two columns give its whole window and how much better it did over those days with the names.
2026 · 2026-01-02 – 2026-11-11
| Model | Training cutoff | Scored from | Seeds | Return | SPY | Equal weight | Sharpe | Max drawdown | Whole window | Named − blind |
|---|---|---|---|---|---|---|---|---|---|---|
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2025-07 | 2026-01-02 | 1 | +7.2% | +12.1% | +11.4% | 0.42 | -7.4% | +7.2% | +1.7% |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2026-01 | 2026-01-30 | 1 | +6.2% | +10.7% | +10.6% | 0.34 | -9.0% | +8.1% | +1.4% |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2026-02-16 | 2026-02-13 | 3 | +4.5% +0.8% … +11.8% | +12.3% | +10.7% | 0.34 -0.38 … 1.73 | -3.7% | +10.3% | +8.4% |
| gemini-3.5-flash · Google run 2026-11-14 | 2025-01 | 2026-01-02 | 3 | +6.5% +4.1% … +9.5% | +12.1% | +11.4% | 0.33 0.15 … 0.54 | -10.1% | +6.5% | -5.9% |
| llama3.2 · Meta open weights run 2026-11-14 | 2023-12 | 2026-01-02 | 3 | -0.8% -8.0% … +3.0% | +12.1% | +11.4% | -0.32 -0.80 … 0.01 | -8.6% | -0.8% | +8.1% |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2026-06 | 2026-06-30 | 1 | -0.6% | +2.0% | +5.7% | -0.99 | -3.1% | +2.4% | — |
Rules and buy-and-hold over the whole window
| Model | Return | Sharpe | Max drawdown | vs equal weight | In stocks |
|---|---|---|---|---|---|
| Trend following · rule | +19.0% | 1.27 | -5.0% | +7.5% | 85% |
| Connors RSI(2) · rule | +4.9% | 0.23 | -7.7% | -6.5% | 51% |
| 20-day breakout · rule | -6.5% | -0.60 | -16.8% | -18.0% | 90% |
| Pullback in an uptrend · rule | +1.1% | -0.39 | -4.5% | -10.4% | 24% |
| Post-news drift · rule | +2.0% | -0.05 | -6.7% | -9.5% | 61% |
| SPY buy and hold · buy and hold | +12.1% | 0.77 | -8.9% | — | — |
| Equal weight, all 56 · buy and hold | +11.4% | 0.85 | -7.2% | — | — |
May remember: before the cutoff
The 2022 bear market and the 2020 crash are in the training text of every model here. These scores are listed for comparison, not as skill: a model may recall that energy stocks soared in 2022 or that tech led the 2020 rebound, even blind, because blind mode hides names and dates but keeps each stock's sector. The rule strategies and buy-and-hold rows use the same stocks, positions and fills.
2022 · 2022-01-03 – 2022-12-30
| Model | Training cutoff | Seeds | Blind return | Sharpe | Max drawdown | vs equal weight | Named return | Named − blind |
|---|---|---|---|---|---|---|---|---|
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2026-01 | 1 | +0.4% | -0.03 | -13.5% | +12.7% | — | — |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2026-06 | 1 | +1.4% | -0.03 | -0.7% | +13.7% | — | — |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2025-07 | 1 | -5.3% | -0.44 | -14.9% | +7.0% | -9.5% | -4.2% |
| llama3.2 · Meta open weights run 2026-11-14 | 2023-12 | 3 | -1.6% -3.0% … -0.2% | -0.62 -1.19 … -0.13 | -8.6% | +10.8% | -8.8% | -7.3% |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2026-02-16 | 3 | -5.0% -7.0% … -2.3% | -0.96 -1.35 … -0.57 | -7.7% | +7.4% | -10.0% | -5.1% |
| gemini-3.5-flash · Google run 2026-11-14 | 2025-01 | 3 | -10.7% -12.5% … -8.3% | -0.97 -1.03 … -0.85 | -15.9% | +1.6% | -5.7% | +5.0% |
| Trend following · rule | -5.9% | -0.47 | -17.8% | +6.4% | ||||
| Connors RSI(2) · rule | -8.6% | -0.98 | -16.6% | +3.8% | ||||
| 20-day breakout · rule | -15.1% | -1.35 | -22.0% | -2.7% | ||||
| Pullback in an uptrend · rule | -4.2% | -1.03 | -6.3% | +8.1% | ||||
| Post-news drift · rule | -16.3% | -1.37 | -21.0% | -3.9% | ||||
| SPY buy and hold · buy and hold | -18.6% | -0.80 | -24.5% | — | ||||
| Equal weight, all 56 · buy and hold | -12.4% | -0.53 | -23.1% | — |
2020 · 2020-01-02 – 2020-12-31
| Model | Training cutoff | Seeds | Blind return | Sharpe | Max drawdown | vs equal weight | Named return | Named − blind |
|---|---|---|---|---|---|---|---|---|
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2026-01 | 1 | +25.4% | 1.38 | -14.0% | -14.7% | — | — |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2025-07 | 1 | +16.9% | 0.89 | -20.3% | -23.1% | +12.8% | -4.1% |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2026-06 | 1 | +7.4% | 0.77 | -9.0% | -32.7% | — | — |
| gemini-3.5-flash · Google run 2026-11-14 | 2025-01 | 3 | +16.4% +10.1% … +20.8% | 0.75 0.49 … 0.95 | -19.6% | -23.7% | +12.2% | -4.2% |
| llama3.2 · Meta open weights run 2026-11-14 | 2023-12 | 3 | +10.6% +2.3% … +21.4% | 0.73 0.46 … 0.98 | -8.9% | -29.5% | +15.4% | +4.7% |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2026-02-16 | 3 | -0.5% -7.6% … +6.1% | 0.09 -0.36 … 0.60 | -15.4% | -40.6% | +11.9% | +12.4% |
| Trend following · rule | +67.4% | 2.18 | -13.6% | +27.4% | ||||
| Connors RSI(2) · rule | +6.3% | 0.39 | -19.8% | -33.8% | ||||
| 20-day breakout · rule | +27.6% | 1.23 | -13.4% | -12.5% | ||||
| Pullback in an uptrend · rule | +2.2% | 0.25 | -11.9% | -37.8% | ||||
| Post-news drift · rule | +23.4% | 1.18 | -17.6% | -16.7% | ||||
| SPY buy and hold · buy and hold | +17.2% | 0.63 | -33.7% | — | ||||
| Equal weight, all 56 · buy and hold | +40.1% | 1.13 | -32.5% | — |
How each model makes money
From each blind run's record, by the package's run analysis (how it works). Where the return came from: how much it kept in stocks on average, its market beta, the part of its yearly return over T-bills that its exposures to four factors explain (the market, size, growth and momentum), and alpha, the rest, with its Newey-West t-statistic; the sectors that made and lost the most, as a share of the starting $100,000; and how long it held a position on average, in trading days. How good the decisions were: how the stocks it bought did against SPY over the five trading days from the fill; the share of its buys and sells that came out right over those days; the rank IC between what it did (bought, sold, left alone) and the next five days' returns; the share of its decisions whose reason cites news, and what the positions it opened on news made. A |t| below 2 is within noise.
Where the return came from
| Model | Period | In stocks | Market beta | From factor exposures | Alpha | Best sector | Worst sector | Average hold |
|---|---|---|---|---|---|---|---|---|
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2026 | 74% | 0.59 | +6.5%/yr | -1.2% t -0.1 | Energy +4.3% | Technology -2.3% | 21 d |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2026 | 86% | 0.59 | +4.8%/yr | +1.8% t 0.2 | Health Care +4.7% | Communication Services -2.1% | 29 d |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2026 | 47% | 0.35 | +2.1%/yr | +5.9% t 0.9 | Health Care +3.1% | Technology -2.0% | 26 d |
| gemini-3.5-flash · Google run 2026-11-14 | 2026 | 97% | 0.70 | +6.4%/yr | -1.3% t -0.1 | Health Care +8.8% | Financials -2.9% | 31 d |
| llama3.2 · Meta open weights run 2026-11-14 | 2026 | 14% | 0.19 | +4.7%/yr | -8.9% t -1.0 | Financials -0.1% | Technology -5.0% | — |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2026 | 31% | 0.23 | +2.7%/yr | -3.2% t -0.5 | Financials +3.2% | Technology -3.9% | 23 d |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2022 | 70% | 0.55 | +0.2%/yr | -0.5% t -0.1 | Energy +7.5% | Technology -3.3% | 36 d |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2022 | 2% | 0.01 | -0.0%/yr | -0.0% t -0.0 | Health Care +0.2% | Industrials -0.1% | 10 d |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2022 | 72% | 0.58 | -5.0%/yr | -1.0% t -0.2 | Energy +6.3% | Technology -7.0% | 27 d |
| llama3.2 · Meta open weights run 2026-11-14 | 2022 | 26% | 0.25 | -5.0%/yr | +2.7% t -0.1 | Industrials +1.3% | Technology -4.4% | 38 d |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2022 | 37% | 0.27 | -2.1%/yr | -4.2% t -1.1 | Health Care +2.4% | Technology -2.9% | 26 d |
| gemini-3.5-flash · Google run 2026-11-14 | 2022 | 69% | 0.50 | -1.0%/yr | -11.1% t -1.5 | Health Care +5.0% | Industrials -5.3% | 23 d |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2020 | 62% | 0.34 | +20.2%/yr | +3.6% t 0.4 | Technology +10.7% | Financials +0.1% | 32 d |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2020 | 59% | 0.50 | +19.4%/yr | -2.3% t -0.2 | Consumer Discretionary +11.6% | Financials -2.4% | 25 d |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2020 | 22% | 0.23 | +9.8%/yr | -2.6% t -0.6 | Technology +7.1% | Financials -1.1% | 27 d |
| gemini-3.5-flash · Google run 2026-11-14 | 2020 | 81% | 0.48 | +26.0%/yr | -8.5% t -0.7 | Technology +15.1% | Utilities -2.2% | 28 d |
| llama3.2 · Meta open weights run 2026-11-14 | 2020 | 26% | 0.19 | +2.8%/yr | +7.7% t 0.4 | Financials +6.5% | Industrials -0.5% | 78 d |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2020 | 40% | 0.31 | +10.0%/yr | -10.1% t -1.0 | Technology +3.9% | Health Care -2.0% | 28 d |
How good the decisions were
| Model | Period | Decisions | Buys vs SPY, next 5 days | Hit rate | Decision IC | Triggered by news | P&L of news-triggered buys |
|---|---|---|---|---|---|---|---|
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2026 | 218 | -0.73% t -1.3 | 47% | -0.027 t -1.1 | 35% | -1.1% |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2026 | 170 | +0.25% t 0.5 | 56% | 0.023 t 1.2 | 29% | -6.2% |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2026 | 178 | -0.07% t -0.2 | 48% | -0.015 t -0.6 | 17% | +3.3% |
| gemini-3.5-flash · Google run 2026-11-14 | 2026 | 139 | -0.53% t -1.0 | 53% | -0.003 t -0.1 | 39% | +1.2% |
| llama3.2 · Meta open weights run 2026-11-14 | 2026 | 1 | +0.51% | 67% | 0.015 | 0% | — |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2026 | 66 | -0.30% t -0.2 | 42% | -0.036 t -1.1 | 43% | +2.0% |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2022 | 156 | +0.33% t 0.8 | 46% | -0.013 t -0.7 | 21% | -4.3% |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2022 | 4 | +0.27% t 0.4 | 75% | 0.052 t 0.5 | 50% | -0.4% |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2022 | 240 | +0.15% t 0.4 | 50% | -0.006 t -0.3 | 39% | -4.7% |
| llama3.2 · Meta open weights run 2026-11-14 | 2022 | 5 | -0.66% t -0.2 | 37% | -0.008 t 0.1 | 13% | -1.1% |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2022 | 164 | +0.47% t 1.1 | 49% | -0.016 t -0.6 | 17% | +0.3% |
| gemini-3.5-flash · Google run 2026-11-14 | 2022 | 134 | +0.67% t 1.7 | 55% | 0.023 t 1.0 | 36% | -5.7% |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | 2020 | 152 | +0.28% t 0.4 | 46% | -0.001 t -0.0 | 38% | +11.6% |
| claude-haiku-4.5 · Anthropic run 2026-11-14 | 2020 | 204 | +0.61% t 0.9 | 51% | -0.003 t -0.1 | 46% | +11.5% |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | 2020 | 44 | -0.95% t -1.7 | 48% | -0.015 t -0.4 | 55% | +8.5% |
| gemini-3.5-flash · Google run 2026-11-14 | 2020 | 119 | +1.21% t 2.7 | 52% | 0.022 t 1.0 | 48% | +17.5% |
| llama3.2 · Meta open weights run 2026-11-14 | 2020 | 9 | +1.33% t 0.7 | 63% | 0.056 t -0.4 | 2% | — |
| gpt-5.6-luna · OpenAI run 2026-11-14 | 2020 | 122 | +0.00% t 0.1 | 51% | 0.005 t 0.2 | 18% | +2.1% |
Memory
Two checks per period. Named minus blind: the same model trading the same period with the names and dates, minus blind. Names carry two things, what the model remembers about those days and what it knows about the companies, so a gap after the training cutoff, where memory cannot help, is the second kind. The memory probe (how it works) shows the model random moments of the period twice with the same prices, indicators and headlines, once named and once blind with names, people, products and dates masked, and asks each time how likely the stock is to beat SPY over the next 20 trading days. The score is how much better its answers rank the actual winners when it is told who and when (the AUC gap, named minus blind), on the moments before its training cutoff; above zero means names help. Moments after the cutoff are the control: a format can help there too, memory cannot. "Remembers" means names help more before the cutoff than after it (the 95% interval of the difference is above zero), "no sign" that they do not, and "inconclusive" that the probe cannot tell, for example because fewer than 30 moments fall before the cutoff. Where the paired probe was not run, the cell shows the direct-recall test instead, marked "recall only": the model is asked how a stock moved over a past window, with no data, and the number is the rank correlation between its guesses and the actual moves; "recalls" means its guesses beat chance.
| Model | Named − blind 2026 | Memory probe 2026 | Named − blind 2022 | Memory probe 2022 | Named − blind 2020 | Memory probe 2020 |
|---|---|---|---|---|---|---|
| claude-haiku-4.5 · Anthropic run 2026-11-14 | +1.7% | 0.19 recall only: no sign | -4.2% | 0.24 recall only: no sign | -4.1% | 0.38 recall only: recalls |
| claude-sonnet-4.6 · Anthropic run 2026-11-14 | +0.4% | -0.07 recall only: no sign | — | 0.52 recall only: recalls | — | 0.60 recall only: recalls |
| gpt-5.6-luna · OpenAI run 2026-11-14 | -0.3% | -0.42 inconclusive | -5.1% | -0.01 inconclusive | +12.4% | -0.02 inconclusive |
| gemini-3.5-flash · Google run 2026-11-14 | -5.9% | -0.05 no sign | +5.0% | 0.21 remembers | -4.2% | 0.01 inconclusive |
| llama3.2 · Meta open weights run 2026-11-14 | +8.1% | -0.05 no sign | -7.3% | 0.07 inconclusive | +4.7% | 0.10 inconclusive |
| claude-haiku-5.5 · Anthropic run 2026-11-14 | — | — | — | — | — | — |
Prompt leaderboard
Which system prompt makes a model trade better? Each variant changes one thing in the baseline prompt: a persona, explicit risk rules, reasoning before the orders, a focus on news or on trend, worked examples, the output format, the number of headlines, or how often it decides. All variants trade the same blind periods on several seeds with the same model, and a difference counts only when it is larger than what two seeds of the same prompt already differ by.
Submit a model
pip install risk-aware-trading-agents # [llm] adds the Anthropic SDK riskaware research bench --llm openai:gpt-5.6-luna # six tasks x seeds 0, 1, 2; --task, --seed for fewer riskaware research submit RUN_ID --model gpt-5.6-luna --cutoff 2026-02 --provider OpenAI # then open a pull request that adds the file in leaderboard/entries/
Any model the package can call works: OpenAI-compatible APIs (openai:, or compat: with --base-url), Anthropic, local models through Ollama (ollama:, run with a 16,384-token context), and the Claude Code, Codex and Gemini command-line tools. From Python, bench.run_task(policy, "2026-blind") takes any function from an observation to orders. submit refuses a run with other settings or a failed look-ahead check, and writes the model's replies into the entry; continuous integration replays them through the backtest and the numbers must match.
A run needs the headline files the board was made with. They are licensed and not distributed, so put your copy in ~/.riskaware/data/news; without it riskaware research bench stops before it calls the model. Replaying the entries needs no headline file.
One task is 44 to 51 decisions of 11,000 to 15,000 input tokens each, so all six tasks are 3 to 4.5 million input tokens per seed: well under a dollar on a small model and around $10 to $15 on a Sonnet-class model. The board asks for three seeds and shows how many an entry has.
How to read it
- Seeds. Each task is run with seeds 0, 1 and 2 (a seed fixes the blind aliases and, where the API takes one, the sampling seed). The tables show the mean over a model's seeds, with the range in grey; a model with fewer seeds so far shows those it has. Differences smaller than the range are noise.
- Training cutoffs are the training-data cutoffs on the vendors' model pages, not the release dates. A model released later than its cutoff can still not know what happened after it.
- Blind mode replaces tickers, company names and the dates of the observation with aliases and rebases prices to 100. Since 13 November 2026 it also masks dates and dollar amounts inside headlines; the blind runs of Sonnet 4.6 and Haiku 5.5 were made just before that and could still read a date ("Top WallStreetBets Mentions for Monday May 9, 2022") or a price target in some headlines; the other models' runs were all made after it. Each entry records the package commit it ran on. Even so, a sector, a price path and an unusual headline together may give a stock away.
- Survivorship. The 56 stocks are today's large caps, so buying and holding all of them looks better than it would have at the time.
- Not advice. This is research software. Ten months of trading is a short test.
Questions
What is rta-bench-1?
A benchmark for LLM trading agents with news. Each model trades the same 56 large-cap US stocks through three frozen periods: 2026 to date, the 2022 bear market and the 2020 crash. After every fifth close it sees prices, indicators and the headlines published before that close; its orders fill at the next open, with realistic trading costs. It plays each period blind and with the real names, with seeds 0, 1 and 2.
How does the benchmark avoid look-ahead bias in news?
Every headline and filing carries the minute it was published, and a day's observation holds only the news published before that day's close (16:00 New York time, 13:00 on early-close days); orders fill at the next open. Every run also passes a look-ahead check: with the prices and news after a cut point replaced by random ones, everything the model was shown before that point must stay the same.
What do “clean” and “may remember” mean?
A model may have read about a period that falls before its training cutoff. Scores from the days after a model's training-data cutoff are clean: they are ranked by the Sharpe ratio over those days, next to SPY and an equal-weight portfolio over the same days. Scores from before the cutoff are listed apart as may remember, next to a memory probe.
What is blind mode, and why is each period run twice?
Blind mode replaces tickers, company names and dates with aliases, rebases prices to 100, and masks dates and dollar amounts inside headlines. Running the same model blind and with names shows what the names are worth to it: after the training cutoff that is knowledge about the companies; before it, it may also be memory of what happened.
How does it compare with StockBench, LiveTradeBench and other LLM trading benchmarks?
Live benchmarks avoid look-ahead by trading the present, but a model released later cannot trade the same days without having read about them. rta-bench-1 replays three frozen periods with news at the minute it was published, runs every model blind and named, scores it apart before and after its training cutoff, and keeps each result as a JSON file that replays to the same numbers. The comparison sets it next to eight other benchmarks.
How do I submit a model?
Run riskaware research bench --llm openai:gpt-5.6-luna with any model the package can call (six tasks, seeds 0, 1 and 2), then riskaware research submit RUN_ID --model gpt-5.6-luna --cutoff 2026-02, and open a pull request that adds the new file in leaderboard/entries/. The entry holds every reply of the model; continuous integration replays them through the backtest and the numbers must match.