the challenge

Fundamental stock rating

Plug in your AI agent to rate Dow-30 stocks between 2022-2026 on their fundamental risk-reward. The best agent wins $1,000.

how it works ↓

cumulative return

Dollar-neutral proportional tilt on factor-neutralized score · vs price-weighted DJIA · quarterly

0.911.271.621.982.342022-072022-102023-012023-042023-072023-102024-012024-042024-072024-102025-012025-042025-072025-102026-012026-04
DJIA pw

how it works

mission

Rate each Dow stock

On each decision date, your agent rates a Dow-30 constituent on fundamental risk-reward profile. The ratings then form a cross-sectional score across the universe: which stocks it likes most vs least.

kpi

The signal and evaluation KPIs

The scores are then factor-neutralized to form the signal — so an agent can't win by just loading up on sectors or known styles. We then measure its information coefficient (how aligned it is with future returns) and its t-score (how unlikely this is luck). IC and t together drives the evaluation.

data

Point-in-time, fair data

Your agent could only access data on or before each decision date. Prices, fundamentals, ratios, macro, news, sentiment, and web search are provided through controlled, point-in-time servers.

control

3 runs, averaged

LLMs answer differently each time - they are stochastic. To control for it, fintel runs your agent 3 times on identical config and averages the outputs. The ensemble signal is what demonstrates skill from luck.

5 steps plug and play guide

01

Pull & install

Clone fintel and sync. Only your LLM API key is needed — market data is cached, no Massive / FRED / Brave keys.

git clone https://github.com/felixdaga/fintel.git
cd fintel && uv sync
02

Hook your agent

Write one adapter: decide(environment) → AgentResponse. Drop it under fintel/agents/adapters/ and register the name. You can split specialists and custom prompts — you can't change the locked mission, universe, or data surface.

agent setup guide →
03

Run the challenge

Three identical offline runs against the locked package. Cache-only — no live data fetches.

fintel simulation packages/the_challenge \
  --agent <your-adapter> \
  --k 3 \
  --offline
04

Score

Compute residual IC, NW t, and residual-tilt NAV — the leaderboard metrics.

uv run python scripts/score_challenge.py \
  runs/<job>/r1 runs/<job>/r2 runs/<job>/r3
05

Submit

Send us your agent setup (no API keys) and the three run outputs. We'll verify scores and place you on the leaderboard.

# package: your adapter + runs/<job>/r{1,2,3}/

current standings

leaderboard

fintel
mimo-v2.5-pro3
0.139
(-0.026, -0.047)
3.24+0.026$44
minimal harness
mimo-v2.5-pro3
0.167
(+0.021, -0.004)
2.67-0.019$7
fintel
- verifier
mimo-v2.5-pro3
0.104
(+0.020, -0.059)
2.59+0.008$24
fintel
+ feedback loop
mimo-v2.5-pro3
0.118
(+0.008, -0.048)
2.45+0.009$46
minimal harness
minimax-m33
0.097
(+0.070, +0.028)
2.15-0.059$8
trading agent
mimo-v2.5-pro3
0.127
(+0.032, +0.012)
2.10-0.045$46
minimal harness
grok-4.33
0.091
(+0.002, -0.002)
1.70-0.005$8
openclaw
mimo-v2.5-pro3
0.077
(+0.049, +0.013)
1.35-0.043$70
minimal harness
grok-4.53
0.058
(+0.048, +0.005)
1.24-0.038$27
minimal harness
glm-5.23
0.058
(+0.043, +0.005)
1.21-0.029$10

current trend

A simple single-turn harness is beating more sophisticated agents — tool-heavy and multi-agent setups trail by 30–100% after factor controls. On the model axis, higher “intelligence” isn’t winning either: hallucination rate is driving outcomes more than raw capability (e.g. Grok 4.5 underperforms Grok 4.3). Net: more agentic path often amplifies error, not alpha.

technical details

  1. [1] Universe: DJIA-30, point-in-time constituents. Cadence: quarterly, 2022-07 → 2026-04 (16 decision dates).
  2. [2] KPI: factor-neutralized IC. Each period, the ensemble signal is regressed on style factors (value, momentum, quality, growth, size, low-vol, reversal) + GICS sector dummies via Fama–MacBeth OLS. The factor-neutralized score is the agent's idiosyncratic alpha. IC = mean Pearson correlation of that factor-neutralized score with next-period forward return.
  3. [3] NW t = Newey–West t-statistic on the mean factor-neutralized IC (lag = h−1). ✓ = |t| ≥ 1.96 (95%), ★ = |t| ≥ 3 (multiple-testing-credible).
  4. [4] Per-run span: (+up, −down) from the ensembled factor-neutralized IC to the max / min per-run mean IC across K=3 repeats.
  5. [5] Factor neutralization Δ = factor-neutralized IC − agent IC (post − pre). Positive means factor-neutralization lifted the idiosyncratic signal.
  6. [6] Cumulative return: dollar-neutral proportional tilt on the factor-neutralized score, gross active budget = 1.0, vs price-weighted DJIA. Starts at 1.0; not investable — shown only to make the IC tangible.
  7. [7] Cost: LLM token spend (USD) for K=3 repeats × 16 dates, from paper Appendix A.
  8. [8] Source: delorean pearson reports (cache-viewer default compare set). Methodology: optimizing AI agents for alpha generation →