Before business school I was a software engineer at Amazon and VMware, building backend systems where reproducibility and correctness were the core of the work. I carried that same discipline into Wharton, where I have spent my first year studying how markets are priced and, in particular, where they are priced inefficiently.
These six projects draw on both halves of that background. Each is inspired by concepts from my Behavioral Finance coursework at Wharton and built with the engineering rigor I developed writing production software. Each one takes an idea from the literature, implements it from the ground up, and tests whether it survives once you account for transaction costs and the temptation to look ahead in time. A consistent theme runs through the set: the places where markets misprice assets tend to be the places where investors behave in predictably irrational ways, and that is where the behavioral research and the data line up most clearly.
Everything here is downloadable and runs end to end with a single command. Select a project above to read the write-up and download the code.
Options Pricing & the Volatility Surface
Price an option three different ways, then read the market's fear off the shape of the curve.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt. Run python run.py to rebuild everything from scratch; the pricers, the fitted volatility surface, and the plots all regenerate into the results/ folder. The README has the method notes and the validation tests if you want to go deeper.Cointegration Pairs Trading
Find two stocks that wander apart, then bet they snap back together.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt, then run python run.py. That runs the full loop: it screens the universe for cointegrated pairs, fits the spreads, and writes the backtest metrics along with the spread and equity-curve plots into results/. The README explains the trading rules and the in-sample versus out-of-sample split.A News-Sentiment Signal
Turn a headline into a number, then ask whether it tells you anything about tomorrow.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt, and run python run.py. It scores the bundled headlines, builds the signal, and drops the information-coefficient plot, the event study, and the equity curve into results/. The README explains the timestamp alignment and how to point it at your own headline data.A Regime-Switching Allocator
Let the data decide when the market's mood has flipped, then move with it.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt, then python run.py. The model fits, infers the regimes causally, and writes the shaded regime chart and the performance comparison against a 60/40 split into results/. The README has the notes on why the inference stays strictly past-only.A Black–Litterman Engine
Blend the market's implied view with your own, then watch overconfidence wreck the result.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt, and run python run.py. It builds the equilibrium and posterior portfolios and generates the weight-comparison and confidence-sensitivity plots in results/. The README walks through how to set your own views and confidence levels.The Lottery Effect
Go long the boring stocks and short the ones that look like lottery tickets.
New here? Read the README inside the zip for full setup and method notes.
pip install -r requirements.txt, then python run.py. That builds the MAX signal, runs the quintile sorts and the long-short backtest, and writes the factor regression and the plots into results/. The README covers the signal construction and the Fama-French controls.