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.
cumulative return
Dollar-neutral proportional tilt on factor-neutralized score · vs price-weighted DJIA · quarterly
how it works
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.
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.
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.
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
5 steps plug and play guide
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
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 →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
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
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-pro | 3 | 0.139 (-0.026, -0.047) | 3.24★ | +0.026 | $44 |
minimal harness | mimo-v2.5-pro | 3 | 0.167 (+0.021, -0.004) | 2.67✓ | -0.019 | $7 |
fintel - verifier | mimo-v2.5-pro | 3 | 0.104 (+0.020, -0.059) | 2.59✓ | +0.008 | $24 |
fintel + feedback loop | mimo-v2.5-pro | 3 | 0.118 (+0.008, -0.048) | 2.45✓ | +0.009 | $46 |
minimal harness | minimax-m3 | 3 | 0.097 (+0.070, +0.028) | 2.15✓ | -0.059 | $8 |
trading agent | mimo-v2.5-pro | 3 | 0.127 (+0.032, +0.012) | 2.10✓ | -0.045 | $46 |
minimal harness | grok-4.3 | 3 | 0.091 (+0.002, -0.002) | 1.70 | -0.005 | $8 |
openclaw | mimo-v2.5-pro | 3 | 0.077 (+0.049, +0.013) | 1.35 | -0.043 | $70 |
minimal harness | grok-4.5 | 3 | 0.058 (+0.048, +0.005) | 1.24 | -0.038 | $27 |
minimal harness | glm-5.2 | 3 | 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] Universe: DJIA-30, point-in-time constituents. Cadence: quarterly, 2022-07 → 2026-04 (16 decision dates).
- [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] 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] Per-run span: (+up, −down) from the ensembled factor-neutralized IC to the max / min per-run mean IC across K=3 repeats.
- [5] Factor neutralization Δ = factor-neutralized IC − agent IC (post − pre). Positive means factor-neutralization lifted the idiosyncratic signal.
- [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] Cost: LLM token spend (USD) for K=3 repeats × 16 dates, from paper Appendix A.
- [8] Source: delorean pearson reports (cache-viewer default compare set). Methodology: optimizing AI agents for alpha generation →