I build optimization algorithms and research tooling for quantitative finance, from Palo Alto and Abu Dhabi.
Rhodes Scholar at Balliol College, Oxford, from 2004. DPhil on fast matrix functions, supervised by Nick Trefethen. Shadows of that past
- nncg — non-negative conjugate gradients, the reference implementation for Schmelzer & Stoll
- mean_variance_solvers — matrix-free and direct solvers for long-only mean-variance portfolios
Quantitative hedge funds from 2007, and higher-dimensional convex problems
- linalg — the linear algebra underneath portfolio optimization
- cvxcla — the critical line algorithm: exact efficient frontiers rather than sampled ones
- pyhrp — hierarchical risk parity, Schur complement risk parity, 1/N
- jquantstats — time series and portfolio analytics
- basanos — a first hurdle for expected returns
- cs — the 10-line CTA, and what convex programming reveals about its Sharpe ratio, kurtosis and trading costs. The engine underneath it is TinyCTA
Visiting scholar at Stanford in 2023, working with Stephen Boyd. Hence the cvxgrp work: cvxcla above, plus simulator for backtests small enough to read, cvxrisk for risk models you can compose, and cvxball for the smallest enclosing sphere.
In 2025 I launched Jebel Quant Research together with HE Omar Saif Ghobash — help with data, strategies and trading, and open source
- rhiza — one template repository that owns the boring parts of a Python project: CI, Makefile, linting, typing, test and coverage gates, docs build. A repo pins a template release and syncs, rather than drifting into its own configuration.
- rhiza-claude — the same workflow as slash commands for Claude Code:
/init,/update,/quality,/release - rhiza-education — training for and with rhiza, alongside a paper on what the plugin is for
The point is leverage: configuration written once, reviewed once, then inherited — so the time goes into the research and not the plumbing.
A Technology Vision for Quantitative Trading — fourteen pages, out of my exposure to ADIA's Team Q, arguing that the industry's problems are organisational rather than technical. The handover model, research in Python reimplemented in C++, buys diffuse accountability, reinvented wheels and reconciliation as an organising principle. What replaces it is one environment for research and production, a checkerboard team, and quality at every stage instead of inspection at the end. I trained as a mechanic at AUDI first, so the factory analogies come from the shop floor: Ford's assembly line is what the industry adopted, Toyota's is better, and a professional kitchen — calm, every station visible to every other — is better still.
Nearly 400 merged pull requests outside my own projects. The ones I keep returning to
- chebpy — a Python implementation of Chebfun, the most direct continuation of the DPhil I could have hoped for
- loman — computation graphs for quantitative research and trading
- investment-funnel — an open platform for backtesting investment strategies
- pycharting — high-performance charting for financial data
Smaller fixes, usually filed where a tool got in my way: scipy, cvxpy, marimo, PyPortfolioOpt, Clarabel, Kaleido, finmarketpy, connector-x, ISLP labs.
That badge measures volume, and volume was never the point. A more useful measure is what is still open. The table below is regenerated nightly, so a new project joins it on its first release without anyone editing this file.
| quality | coverage | downloads | issues | pull requests | branches | releases | latest | last commit | |
|---|---|---|---|---|---|---|---|---|---|
| cvxgrp/cvxcla | — | 100% | 3 | 39 | |||||
| cvxgrp/cvxmarkowitz | — | 100% | — | 5 | 2 | ||||
| cvxgrp/cvxrisk | — | 100% | 1 | 35 | |||||
| cvxgrp/simulator | — | 100% | 8 | 116 | |||||
| jebel-quant/basanos | 100% | 3 | 21 | ||||||
| jebel-quant/jquantstats | 100% | 2 | 68 | ||||||
| jebel-quant/linalg | 100% | 1 | 19 | ||||||
| jebel-quant/nncg | 100% | — | 1 | 10 | |||||
| jebel-quant/rhiza | — | — | 3 | 106 | |||||
| jebel-quant/rhiza-claude | 100% | — | 1 | 8 | |||||
| jebel-quant/rhiza-education | — | — | 4 | 1 | |||||
| jebel-quant/rhiza-hooks | 100% | — | 1 | 18 | |||||
| tschm/cs | 100% | — | 4 | 13 | |||||
| tschm/pyhrp | 100% | 1 | 140 | ||||||
| tschm/TinyCTA | 100% | 2 | 77 |
An issue that has been open for a year is not a backlog item, it is a decision that was never made.