
Algory Capital
2025
At Algory Capital, I progressed from Quantitative Researcher to Portfolio Manager, where I led research and trading for volatility-based equity and options strategies. I developed and executed cointegration-driven pair trading models, using statistical relationships to identify relative value opportunities across sectors. My work involved systematic backtesting, risk management, and performance attribution, all grounded in clean code and disciplined research. As I took on more responsibility, I focused on refining execution logic, improving signal durability, and managing capital allocation with a structured approach. The experience deepened my understanding of market structure, data-driven alpha generation, and the practical edge of quantitative decision-making.
Quantitative Investment Analyst (Jan 2025 – May 2025)
Volatility Analysis Code
1# Volatility Indicator Analysis
2import yfinance as yf
3import pandas as pd
4import numpy as np
5import matplotlib.pyplot as plt
6
7# Realized volatility: how much a stock’s price moves around
8# this function computes annualized volatility based on rolling log returns
9def compute_realized_volatility(prices: pd.Series, window: int = 20) -> pd.Series:
10 """Compute annualized realized volatility over a rolling window."""
11 log_returns = np.log(prices / prices.shift(1))
12 volatility = log_returns.rolling(window=window).std() * np.sqrt(252)
13 return volatility
14
15# ATR: captures intraday range
16# true range is the max of high-low, high-previous close, low-previous close
17def compute_atr(high: pd.Series, low: pd.Series, close: pd.Series, window: int = 14) -> pd.Series:
18 tr1 = high - low
19 tr2 = (high - close.shift(1)).abs()
20 tr3 = (low - close.shift(1)).abs()
21 true_range = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1)
22 atr = true_range.rolling(window=window).mean()
23 return atr
24
25# IQR Volatility: robust measure ignoring outliers
26# calculates difference between 75th and 25th percentile of log returns
27def compute_iqr_volatility(prices: pd.Series, window: int = 20) -> pd.Series:
28 log_returns = np.log(prices / prices.shift(1))
29 rolling_q75 = log_returns.rolling(window).quantile(0.75)
30 rolling_q25 = log_returns.rolling(window).quantile(0.25)
31 return (rolling_q75 - rolling_q25) * np.sqrt(252)
32
Presentation Slides
Presentation Slides