JOEL ESTADAThe line

03/05QUANT · DATA · SOFTWARE

Ottometrix

We analyze. You decide.

A quantitative engine that ranks US stocks by how attractive they look twelve months ahead, and the SaaS built on top of it. I designed and built it end to end: the data pipeline, the statistical validation and the interface.

ROLE
Sole founder — engine, data, validation and product
YEAR
2026
STATUS
In development · private
Stock file for Intel: score of 85, key ranges, price chart and the anatomy of the score by factor
Summary: the score, the numbers that frame it and how each factor adds up.
  1. 1Composite score of the stock, 0–100
  2. 2Seven modules, one question each
  3. 3Price over the last year, with its ranges
  4. 4Anatomy of the score: each factor’s percentile × 25 %
Score tab: every sealed score of the stock over five years and its return in the following twelve months, next to the trajectory of each factor
Score: every past sealed score, and what the stock did in the twelve months after it.
Fundamentals tab: ten years of revenue, profit and cash flow, margins and returns against the sector
Fundamentals: ten years of growth, margins and returns, against the sector.
Expectations tab: the earnings growth the market expects and how the estimate has moved
Expectations: the bar the market has set, and how far it has moved.
Risk tab: risk level from five signals and the drawdown profile
Risk: what you would have had to sit through — drawdown, time under water, balance sheet.
News tab: balance of material news and a timeline of news on top of the price
News: tone and timeline of material news over the price. They never move the score.
Report tab: a one-page report with the conclusion and the score, ready to export as PDF
Report: a one-page synthesis of the six modules, exportable to PDF.
Portfolio simulator: a matrix of positions by factor with editable weights and the simulated score
Portfolio: positions × factors, with editable weights and the score they add up to.
Ottometrix screener: a ranked table of US stocks with score rings, sector and factor profile, and filters on the left
Screener: the ranked universe, filterable by sector, size, score and factor.
Ottometrix home: a greeting, a search box, an engine notice and a histogram of the universe with the user’s holdings placed on it
Home: what changed since the last seal, and where your holdings sit in the universe.

01 / 10Stock file · INTC — Summary

~2,400US stocks rankedper cohort, every six months
4factors, ¼ eachweights fixed in advance
13tests pre-registeredand logged for multiple testing
+0.062IC in sample+0.007 out of sample

HOW IT WORKS

  1. Data13,330 tickers from EODHD, delisted companies included
  2. UniversePrice ≥ $5, market cap ≥ $200M, no financials; all inputs or out
  3. FactorsValue, quality, momentum and asset growth, point-in-time
  4. ScorePercentiles 0–100, equal weights
  5. SealRanking frozen with a SHA-256 hash and a date
  6. ProductScreener, stock file, portfolio X-ray

The problem

Retail investors are sold stock-picking tools full of indicators and promises. More metrics do not mean more accuracy: most published factors disappear once you remove micro-caps, look-ahead data or survivorship bias.

I wanted an engine that uses the minimum number of factors that still hold out of sample — and that is honest about what it cannot prove.

The engine

Every six months the engine ranks the investable US market on four academic factors, each turned into a 0–100 percentile and weighted a quarter. The weights were fixed before looking at the data and have never been optimised.

  • ¼ValueEBIT / enterprise value
  • ¼Qualitygross profitability (Novy-Marx 2013)
  • ¼Momentum12-1 month return
  • ¼Asset growthyear-on-year change in total assets, inverted
  • Strict point-in-time: a filing counts from its date + 1 business day; nothing is imputed
  • No survivorship bias: delisted companies stay in, with delisting returns (Shumway 1997)

Validation

Every experiment is pre-registered with its hypothesis and pass threshold before it runs, and every run is logged so the Sharpe ratio can be deflated for multiple testing. Thirteen training cohorts (2018–2024) decide; a three-cohort holdout can be looked at only once.

Twelve improvements were proposed. None survived. The one that passed in sample failed on the untouched holdout in all three cohorts, and was reverted.

Test record · 13 tests

Each change to the engine was tested against the baseline on the training cohorts, with a pass rule fixed in advance.

13 · H1.3 holdoutREVERTED

The same change, on the untouched holdout

Worse in 3 of 3 cohorts

The engine runs on the original four factors. It does not claim proven alpha, and the product says so.

The product

The SaaS turns the ranking into something an investor can use without a statistics degree: a screener over the whole universe, a file for every stock that shows what happened after each past score, and a portfolio X-ray that reads your holdings against the engine.

Pricing is designed (free, €15 and €30 a month, and institutional) and the marketing site embeds the real app instead of mock-ups.

Bill of materials

Engine
  • Python 3.12
  • pandas
  • NumPy
  • DuckDB
  • EODHD API
  • pytest
  • ruff · black · mypy
Product
  • Next.js 15
  • React 19
  • TypeScript
  • Tailwind 4
  • TanStack Query
  • Zod
  • Vitest
Method
  • Pre-registered hypotheses
  • Decision log (55 entries)
  • AI-assisted development with written rules

What I learned

A previous attempt ran 463 iterations and overfit. Ottometrix exists because of that lesson: fewer factors, fixed weights, a holdout you only get to use once.
Data engineering is most of the work: point-in-time filings, delistings, share counts, sector labels.
Saying “this does not work” with evidence is a result, not a failure.

We analyze. You decide.

Ottometrix is private while in development. I am happy to walk you through the current SaaS.