Discover how markets move in recurring patterns by analyzing return data as geometric structure. Use vectors, matrices, and dimensionality analysis to see regimes as clusters in reduced space.
linear-algebra · svd · dimensionality · market-regimes · quant
Learners placed at Morgan Stanley NYC · Optiver AMS
A regime-detection toolkit, built section by section - hands-on, but never alone. Theory first, then you implement it, and checkpoints confirm each section clicked before the next one opens.
Section 0
What Is a Market Regime?
Section 1
Turning Market Days Into Vectors
vectors.py
Section 2
Do Markets Explore All Directions?
spectrum.py
Section 3
Identifying Dominant Movement Patterns
directions.py
Section 4
Visualizing Regimes in Reduced Space
projection.py
Section 5
What Information Is Lost?
reconstruction.py
Section 6
How Regimes Change Over Time
transitions.py
Section 7
Putting It All Together
regimes.py
Never stuck
Reveal a hint when you want a nudge - or the full worked solution when you want the answer. Every exercise ships one.
Theory before code
Each formula is explained step by step before you implement it. Nothing is assumed mid-build.
Yours to keep
Finish with the complete research notebook - keep extending it with your own data.
Section 0What Is a Market Regime?
1 task · 2 questions
Section 1Turning Market Days Into Vectors
3 tasks · 2 questions
Section 2Do Markets Explore All Directions?
2 tasks · 3 questions
Section 3Identifying Dominant Movement Patterns
3 tasks · 2 questions
Section 4Visualizing Regimes in Reduced Space
3 tasks · 2 questions
Section 5What Information Is Lost?
3 tasks · 2 questions
Section 6How Regimes Change Over Time
3 tasks · 2 questions
Section 7Putting It All Together
1 task
FinishProject Complete
Your rewards
Real code from inside the project. Press Run to catch a market flipping from calm to violent with a 20-day volatility gate. Open this page on desktop to run it live in your browser.
import numpy as np
rng = np.random.default_rng(3)
# Two years of daily returns: a calm market that turns violent mid-sample.
calm = rng.normal(0.0004, 0.006, 300)
storm = rng.normal(-0.0002, 0.022, 200)
r = np.concatenate([calm, storm])
# The simplest regime detector there is: a rolling volatility gate.
window = 20
roll_vol = np.array([r[max(0, i - window):i].std() for i in range(1, len(r) + 1)])
in_storm = roll_vol > 0.012
print(f"days flagged high-vol : {in_storm.sum()} of {len(r)}")
print(f"true storm days caught: {in_storm[300:].mean():.0%}")
print(f"vol ratio storm/calm : {r[in_storm].std() / r[~in_storm].std():.1f}x")The full build replaces this simple gate with real structure discovery on market data.
Resume bullets
Copy-paste ready - with the build behind you to back every line.
3 more resume bullets inside the project
Interview ammo
“Explain SVD for dimensionality reduction: singular values measure variance along orthogonal directions, allowing compression of high-dimensional data”
You answer this with a system you built, not a definition you memorized.
4 more talking points inside the project
Full access to this build and the rest of the pipeline - every project in the vault, plus the lessons, exams and certificates behind them. Guided from the first line to the last.
~9h build · +250 XP · 4 resume bullets · 5 interview answers