AAPLmomentum+0.82
MSFTquality+0.61
NVDAsize-0.43
GOOGLvalue+0.27
METAbeta-0.18
RELIANCE.NSquality+0.71
TCS.NSmomentum+0.55
JPMprofitability+0.39
GSvalue-0.22
INFY.NSmomentum+0.83
HDFCBANK.NSquality+0.44
AMZNinvestment-0.31
AAPLmomentum+0.82
MSFTquality+0.61
NVDAsize-0.43
GOOGLvalue+0.27
METAbeta-0.18
RELIANCE.NSquality+0.71
TCS.NSmomentum+0.55
JPMprofitability+0.39
GSvalue-0.22
INFY.NSmomentum+0.83
HDFCBANK.NSquality+0.44
AMZNinvestment-0.31
institutional-grade · open source · AGPL-3.0 + commercial

From log-returns to alpha.
Fifteen layers. Zero black boxes.

Regime-aware factor weights, self-calibrating Black-Litterman confidence, and co-movement graph crisis detection — institutional quant research for Indian equities, derived from first principles.

Get started freeView pricing
$pip install drift
★ GitHubArchitecture →
drift 0.1.015 layers182 testsPyPIFastAPIMCP-native

Built on 182 passing tests · companion to OmniPulse (production audio fingerprinting) · AGPL-3.0 + Commercial licensing

the problem

Three ways traditional quant fails

Each failure has a mathematical cause and a mathematical fix.

01

Returns are fat-tailed. Your model isn't.

Pearson correlation assumes normality. A single earnings shock flips the IC sign. Rank transformation removes the sensitivity entirely.

IC = Spearman(s_t, r_{t+h})
02

Sample covariance collapses when N → T.

When assets approach observations, eigenvalues hit zero. Matrix inversion amplifies noise. Ledoit-Wolf analytical shrinkage is mandatory, not optional.

Σ̂ = α · F + (1−α) · S
03

Regimes change. Your signal doesn't know.

Momentum crashes in bear regimes. Drift detects market mood via HMM augmented with a co-movement graph — correlation tightening across sectors signals stress before the index falls.

w_f = 0.60·ICIR + 0.40·regime preference
the mathematics

Three pillars, derived step by step

Every formula is implemented directly. The derivations are in the build history.

Pillar 1 — feature extraction

Cauchy wavelet scattering

Morlet wavelets decay as exp(−t²). Cauchy wavelets decay algebraically: ω^α·exp(−ω) — keeping sensitivity to rare large events that matter in financial returns. Second-order coefficients capture volatility-of-volatility across pairs of scales. J=8 gives 37 coefficients per stock per date.

S₀ = ⟨|x|⟩
S₁(j) = ⟨|x ★ ψ_j|⟩
S₂(j₁,j₂) = ⟨||x★ψ_{j₁}|★ψ_{j₂}|⟩
1 + 8 + 28 = 37 coefficients (J=8, Q=1)
Pillar 2 — signal quality

Rank transform + IC / ICIR

Derived by solving s(1)=−1, s(N)=+1 as a linear map — two equations, two unknowns. ICIR is the Sharpe ratio of the IC time series, filtering signal strength from consistency. Negative ICIR gets zero weight in the combiner.

sᵢ = (2rᵢ − N − 1) / (N − 1)
IC_t = Spearman(s_t, r_{t+h})
ICIR = IC̄ / σ_IC
IC > 0.05 decent · IC > 0.10 strong
Pillar 3 — portfolio construction

Self-calibrating Black-Litterman

Reverse optimisation backs out equilibrium returns: μ_eq = λΣw_mkt. The posterior blends the CAPM prior with IC-derived views. The key upgrade: view-uncertainty Ω is endogenous — computed from the model's own measured IC and realized errors. Poor recent accuracy inflates Ω, automatically pulling the portfolio toward the market baseline.

μ_eq = λ Σ w_mkt
μ_BL = M [A μ_eq + Pᵀ Ω⁻¹ q]
Ω = f(measured IC, realized errors) — self-calibrating
Every formula above is fully derived on the math page.Read full derivations with step-by-step proofs →
interactive proof

Why rank transform

Drag the outlier to any value and watch what happens to the z-score.

Rank transform kills outliers
Drag the outlier. Rank score stays in [−1, +1]. Z-score explodes.
5.0
rank score — s = (2r − N − 1) / (N − 1)
v1
-1
v2
-0.5
v3
0
v4
0.5
outlier
1
z-score — unbounded, outlier dominates
v1
-0.58
v2
-0.53
v3
-0.47
v4
-0.42
outlier
2.00
Outlier = 5.0 · rank score = +1.00 (capped) · z-score = +2.00σ (uncapped)
platform demo

See what Drift produces

Synthetic three-year backtest on a 10-stock universe. Same pipeline as production.

0.70
Sharpe ratio
HRP 3-year backtest
88.6%
PSR
vs SR* = 0.0
−16.2%
Max drawdown
2022 bear market
0.294
ICIR · momentum
out of sample
7
Factors tracked
FF5 + mom + quality
182
Tests passing
0 failures
● Drift HRP● S&P 5002022 – 2024 · synthetic backtest
common questions

FAQ

Does Drift work with Indian equities (NSE/BSE)?+
Which data vendors are supported?+
How does Drift scale to large universes (500+ tickers)?+
Can I use this for live trading?+
Is the backtest forward-looking (lookahead bias)?+
What is the MCP server for?+
What changed in Drift 2.0?+
architecture

Fifteen layers, one pipeline

Follow data from raw prices to validated portfolio weights. Select any stage to inspect its role in the system.

L1 of 15 · Returnsactive

Returns

Simple and log returns from Zerodha Kite OHLCV. rᵢ,ₜ = Pᵢ,ₜ/Pᵢ,ₜ₋₁ − 1. Forward returns (h=21 days) are computed here for evaluation only — Axiom 2 prohibits them from appearing in any signal path. Strict data contracts enforced throughout.

modulesloader.py · cache.py
L1live system view
MARKET DATAZerodha KiteOHLCVFundamentalsasync enginerate-limitedFeatureStore(date, ticker)
get started

Running in three minutes

python — quick start
from drift.data import DataLoader
from drift.features.factors import FactorEngine
from drift.portfolio.hrp import HRP
from drift.backtest.engine import BacktestEngine

# one pipeline, fifteen layers
loader  = DataLoader()
ohlcv   = loader.equity_ohlcv(["RELIANCE.NS", "TCS.NS", "HDFCBANK.NS"])
result  = BacktestEngine(HRP()).run(ohlcv)
print(result)  # Sharpe=0.70 · PSR=0.89 · MaxDD=−0.16
the people behind drift

Founders

Drift applies the same mathematical foundations as OmniPulse — scattering transforms and optimal transport — to quantitative finance.

Y
Yash Mishra
SYSTEMS · OPTIMAL TRANSPORT
Senior Software Engineer, Bajaj Finance Ltd

Concurrent systems, optimal transport, and real-time indexing. Built the Rust orchestration layer for OmniPulse (HNSW + Sliced Wasserstein) and the full fifteen-layer Drift platform — from data ingestion through the Streamlit dashboard.

S
Samvardhan Singh
APPLIED AI · MLOPS
Automation Engineering & AI/MLOps, NielsenIQ

Automation engineering, AI/MLOps pipelines, and C++/CUDA DSP kernels. Architect of omni-wst-core — the scattering engine Drift's WST layer calls via PyO3 — and the Python agentic control plane for OmniPulse.

licensing

Open source for research. Commercial for proprietary use.

Drift is dual-licensed. Choose the license that matches how you deploy and distribute the platform.

open source

GNU AGPL-3.0

Use, modify, and distribute Drift under the GNU Affero General Public License v3.0, including for research, academic, and open-source work.

If you modify Drift and provide it to others over a network, you must release the complete corresponding source of your modified version under the same license.

Read the AGPL-3.0 license ↗
commercial

Proprietary deployment

A separate commercial license is available if you cannot or do not wish to comply with AGPL-3.0, including deployment inside proprietary products or services without releasing your own source.

Commercial terms can also cover production support, SLA, and proprietary premium components. This summary is not the commercial license agreement.

Request commercial terms →
running a systematic fund?

Get early access

Drift is available for institutional research use. Book a walkthrough or drop your email and we will reach out.

Analyse a portfolio →NSE screener →For advisors →API docs →
yash01012002@gmail.com·LinkedIn ↗·GitHub ↗
For advisors →API docs →