TEJAS PANDYA — quantitative finance
Résumé
Tejas Pandya · Quantitative finance

Nothing is free. The work is pricing the trade-off.

I build quantitative models end to end, then try to break them. My work spans the full stack of a quant team: a C++20 matching engine that clears ~21M messages a second, an execution model tested against a reinforcement-learning agent on 207,361 real bars, a portfolio optimizer that prices its own trading costs, and the VaR and FRTB numbers a regulator signs off on. Three years running market-risk infrastructure at Nomura taught me what production demands. The MS in Financial Engineering at NYU Tandon (3.84 GPA) gave me the theory to go further. I use point-in-time data, ship tests with every model, and report what failed alongside what worked.

Open to full-time quant roles from 2027: research, trading, development, risk · New York
MS Financial Engineering · NYU Tandon '27 ex-Nomura market risk Python · C++20 · SQL
paths 0hover to add paths
3 yrsmarket risk · Nomura
12tested, CI'd repositories
3.84MSFE GPA · NYU Tandon
~21Mmsg/s · C++20 matching engine
What I bring

Four quant tracks, each backed by shipped work

I am not narrowing myself to one seat. Research, trading, development and risk draw on the same habits: careful data, honest statistics and code that is tested before it is trusted. Here is the evidence for each, with the résumé written for it.

Researchsignals · inference · ML

Claims I can defend under scrutiny

I have tested cross-sectional alpha on 495 names with Newey–West inference and false-discovery control, trained purged walk-forward learners, and audited my own regime model against NBER dating, finding it too jumpy. I treat every t-statistic as a claim that has to survive its own robustness check.

Tradingexecution · options · market making

Models that meet a real order book

I calibrated Almgren–Chriss to a live Deribit book and stress-tested it against a policy-gradient agent, fitted SABR to the BTC volatility smile, and am now building a Deribit options market maker with latency-aware fills, delta hedging and P&L after fees.

DevelopmentC++20 · Python · data

Systems built for the hot path

I wrote a zero-allocation C++20 matching engine that clears ~21M messages a second and an options library that prices three independent ways and agrees to within 0.6%. At Nomura I built Python and SQL pipelines that removed 50+ hours of manual work a month.

Riskmarket · regulatory · counterparty

Three years of numbers that had to reconcile

At Nomura I owned VaR and sensitivity models across equities, rates, FX and commodities, and Basel 2.5 and FRTB submissions reconciled 100% to front-office systems. I have since built a historical CVA that measures wrong-way risk by experiment rather than assuming it.

Now building

What I am building right now

Market making · derivatives

Deribit BTC options market maker

A C++20 engine that replays recorded Deribit order books, runs several quoting strategies side by side, simulates fills with latency, hedges delta on the BTC perpetual, and reports P&L after fees and adverse selection. The same engine then runs live on paper. If a strategy loses money after costs, that is the result.

In progress
  1. M1 · Recorderwebsocket recorder, book rebuild check, fee schedule
  2. M2 · C++ coreevents, order books, exchange-time clock
  3. M3 · PricingBlack-76, IV solver, SABR fits reused
  4. M4 · Simulatorfills, fees, accounts, first strategies
  5. M5 · Resultshedgers and the full strategy grid
  6. M6 · Livepaper-trading dashboard and demo video
7-day recording
2026-09-28 21:42 → 2026-10-05 21:42 UTC
C++20Pythonwebsockets ~120 options + BTC-PERPETUAL at 100 mscode goes public at M6
Selected work

Six studies, each with its limitation stated

Every figure below is reproducible from its repository, covered by tests in CI, and reported with the assumption that could break it. Where a published effect failed to replicate, I say so. That is the standard I would bring to any desk: a number you can defend in front of a risk committee, not one that only survives a slide.

01 — Signal research

Averaging your alpha signals loses money

I tested eight cross-sectional signals on 495 S&P 500 names over 2010–2026: six built from prices and two from the tone of 15,575 SEC filings. Each is scored by Spearman rank information coefficient with Newey–West t-statistics, then Benjamini–Hochberg across all eight tests. Only Amihud illiquidity survives. Low volatility and the lottery signals come out with the wrong sign.

So the obvious move, z-score everything and average, loses 7.8% a year at a Sharpe of −0.57. Learning the combination with LightGBM under purged walk-forward CV with a one-month embargo, charging 10 bps a side, reaches 0.79 out of sample: within a quarter-point of the best single signal at two-thirds of its drawdown.

The text factor was the filing calendar. A 10-K reads more negative than a 10-Q (median net tone −0.0164 against −0.0097), so differencing tone across form types hands every 10-Q→10-K transition a −0.0081 "signal". Differencing within form takes its t-statistic from 1.37 to 0.46 and its standalone Sharpe from +0.35 to −0.14. Both versions stay in the repo.
Limitation: the universe is current index members extended backward, so it is survivor-only. I would want point-in-time constituents before defending any single t-statistic.
github.com/6ixE11even/equity-xs-alpha ↗
SignalMean ICNW tHitBH q
amihud0.0325.3262%0.000
tone_chg_naive0.0071.3757%0.46
mom_12_10.0080.6954%0.60
strev_1m0.0060.6448%0.60
tone_chg0.0030.4655%0.65
skew_120d−0.004−0.7046%0.60
max5−0.015−1.1648%0.49
lowvol_60d−0.023−1.5047%0.46
Portfolio, netAnn. retVolSharpeMax DD
amihud8.5%8.2%1.03−13.5%
ml_combo7.3%9.3%0.79−9.1%
mom_12_12.0%16.0%0.12−36.7%
equal_weight−7.8%13.7%−0.57−69.1%
139 out-of-sample months from 2015-02. Standalone Amihud beats the learned combination on Sharpe, on 0.14 turnover where the combination needs 1.07. The combination's claim is the drawdown and honest signal selection, not a higher number.
02 — Execution

The optimal schedule, and the agent that rediscovered it

I calibrated Almgren–Chriss liquidation to a live Deribit BTC-PERPETUAL book, taking volatility, volume and the touch spread from the feed and scaling impact as 1/ADV. On a 10%-of-ADV order, $41.4M over five days, it takes 38% off TWAP's cost risk and pays for it: 7.7 bps of expected impact against 4.8.

I then trained a policy-gradient agent on 207,361 real five-minute bars, cut into 5,752 three-hour episodes and split chronologically, with every input estimated only from bars that closed before the episode opened. It was never shown the closed form and converged to it anyway: 0.060 bps apart out of sample, paired t = 0.10.

Nothing beat TWAP, the closed form included. Almgren–Chriss costs 0.107 bps more (t = 0.38), because its theoretical edge is 0.6% of cost against a 49 bps per-episode standard deviation. What the agent did win was dispersion: 33.8 bps against TWAP's 49.2.
github.com/6ixE11even/optimal-execution ↗
Fig. 1 — Efficient frontier of execution
BTC-PERPETUAL · 538 contracts (10% of ADV, $41.4M) · 5 days · 20 slices
drag or hover
Risk aversion λ—
Expected cost—
Cost risk σ—
Half-life—
Out of sample, bpsShortfallRiskObjectiveσ / episode
TWAP1.4990.0471.54649.2
Almgren–Chriss1.6230.0301.65339.8
REINFORCE agent1.6860.0261.71333.8
1,726 test episodes. A control variate, subtracting TWAP's cost on the identical price path, is what made the agent trainable: 1.993 → 1.713 bps. Gradients are hand-derived in NumPy and checked against central differences in CI.
03 — Portfolio construction

A conclusion that survives a 20× move in its own assumption

Macro regimes from 120+ FRED-MD indicators drive a sector allocation. In developed markets the best regime-aware long-only book earns 11.2% a year against the equal-weight benchmark's 5.6%, after lagging every macro input by its publication delay. Position sizing is then posed as a convex program with transaction costs inside the objective: an L1 turnover penalty, a Cholesky second-order-cone risk term and a market-impact term, re-solved monthly over a receding horizon. Each cost level takes 494 solves, and every one reaches optimality.

The impact coefficient is assumed, not fitted from tick data. So the useful test was sweeping it. Drag the chart: the multi-period line barely moves across the whole 0–100 bps range while the frictionless book collapses.

What changed when I fixed it: this used to say the frictionless book wins below ~12.5 bps. That crossover was an artifact — the backtest was allocating each month on macro data published the month after. With the publication lag applied, the multi-period book wins at every cost level in developed markets, and emerging still crosses, between 0 and 5 bps. A finding about where two lines cross is a finding about the alpha feeding them.
Audit of my own detector: against NBER dating and two alternatives on the same 798-month panel, the K-Means regime model calls a new regime every 3.8 months where NBER changes its mind every 44.7. It wins the cluster-quality scores only because they measure the Euclidean separation it optimizes. It is too jumpy, and that is the next thing to fix.
github.com/6ixE11even/macro-regime-allocation ↗
Fig. 2 — Net Sharpe vs. linear cost
10 bps
Frictionless—
Cost-aware—
Multi-period—
04 — Rates & counterparty risk

P&L attribution that has to add up, and a CVA that tests its own assumption

I bootstrap a discount curve from FRED Treasury constant-maturity par yields and mark a ten-swap, $255M book from 2 to 30 years. Every par instrument reprices to under 1e-9. Daily P&L splits into carry, roll-down and level, slope and curvature moves through key-rate durations, with convexity booked as an explicit residual so the parts reconcile to a full revaluation.

I then extended it to counterparty exposure, block-bootstrapping 8,478 joint daily observations of the curve and Moody's credit spreads (1986–2026) into 20,000 thirty-year paths. Peak EPE $2.35M, peak PFE $13.5M. Wrong-way risk was priced by experiment: resampling rates and credit from the same days keeps their −0.38 correlation, resampling them from different days destroys it. The coupling is worth $89,553, 16.9% of CVA, and both runs share their curve paths bit-for-bit, so the difference cannot be Monte Carlo noise.

Scope: a Treasury curve, not SOFR fixings (ICE swap rates are licensed); one curve; a historical CVA rather than a risk-neutral desk reserve; no CSA. On a quiet day the residual is 0.9% of P&L. On April 16, 1980, when the curve fell 51–76bp, it is 9% — the honest limit of a first-order attribution.
github.com/6ixE11even/sofr-swap-pnl-attribution ↗
Fig. 3 — Attribution, Aug 31 → Sep 1, 2026
2–6bp sell-off
Reconciles to1e-6
Total P&L−237,106
Wrong-way risk+16.9% CVA
05 — Derivatives pricing

Three methods, one interface, and the gap between them documented

A dependency-free C++20 engine values the same contract three independent ways: closed-form Black–Scholes with analytic Greeks, Monte Carlo with exact terminal sampling, and a Crank–Nicolson finite-difference solver on a 400×400 grid — Thomas algorithm for Europeans, projected SOR on the early-exercise complementarity problem for Americans.

They agree to roughly 0.6% on an at-the-money call, pinned as regression tests. On barriers they don't, and that disagreement is the interesting part.

Where they diverge: checking a barrier only at each time step misses crossings between samples, so discretely monitored Monte Carlo overprices a 50-step up-and-out by more than $0.25 against the PDE. Weighting each step by the Brownian-bridge survival probability brings it within $0.05 at the same 50 steps, where naive monitoring is still wrong at 3,200. Both are asserted in tests.
github.com/6ixE11even/options-pricing-engine ↗
ContractBlack–ScholesMonte CarloCrank–Nicolson
European call10.450610.479410.4481
European put5.57355.56165.5711
American put——6.0875
Up-and-out call—3.51623.3326

Early-exercise premium

0.5139 — American 6.0875 less European 5.5735

Test tolerance

< $0.02 FDM · < $0.06 MC against a ~$10.45 price
06 — Market microstructure

The O(1) claim, with its fine print

I built a deterministic limit order book and matching engine in C++20 that enforces strict price–time priority. Resting orders sit in intrusive doubly-linked lists per price level, so cancelling is a pointer splice rather than a search. A pre-warmed memory pool means the matching loop never allocates — which is what keeps the tail flat, not just the mean.

Prices are fixed-point unsigned integers with no floating point on the hot path, because float comparison in a price-priority book is a correctness defect rather than a slowdown.

The qualifier: "O(1) for everything" isn't true. Inserting at a new price level is O(log L) — the ordered map has to track the touch. Four of five hot-path operations are O(1); the fifth fires whenever the book opens a level it didn't have.
github.com/6ixE11even/hft-matching-engine ↗
OperationCostWhy
Add — existing levelO(1) avghash + tail append
Add — new levelO(log L)ordered-map insert
CancelO(1) avgintrusive splice
Execute at bestO(1) / fillFIFO head pop
Best bid / askO(1)map front

Throughput

~21M msg/s — Apple M2, dependency-free core~36M msg/s — Linux aarch64, same silicon

Not measured

Per-message latency. Only throughput was benchmarked, so no latency figure is quoted.
Further work

Six more studies, held to the same standard

07Volatility

SABR calibration to the live BTC smile

The calibration recovers α, ρ and ν to within 0.01 of the truth under 30bp of injected quote noise. On Deribit's 18SEP26 expiry it fits 21 strikes at 0.43 vol points RMSE, with the worst fit in the 95,000-strike wing.

Python · SciPy · Deribit API
08Surveillance

Spoofing and layering detection without labels

There are no labels, so it ranks rather than classifies. Isolation Forest and ECOD over 27 order-flow features agree on 76% of their top-5% flags; the ensemble exists for the other quarter.

Python · ECOD · Isolation Forest · PyTorch
09Commodities

34 years of futures settlement anomalies

Across WTI and Henry Hub settlements from EIA (1990–2024), the detector flags 112 events, 79 of them corroborated by an Isolation Forest. It had been blind to the −$37.63 WTI print because a log transform turned it into NaN.

Python · Streamlit · Plotly · EIA API
10Stat arb

A pairs backtester that rejects its own pairs

Pairs are chosen on the first 60% of the sample only, and all 15 Engle–Granger tests go through Benjamini–Hochberg. On real Deribit data no pair survives out of sample. An earlier, better-looking result came from look-ahead and was deleted.

Python · statsmodels · Deribit API
11Prediction markets

The arbitrage that is really a bond

A Polymarket scanner for multi-outcome baskets whose prices don't sum to 1. The 2028 nominee baskets sum to about 0.93: that is not free money but the cost of capital, roughly 3.4% a year for locking collateral up to 2028.

Python · Polymarket Gamma API
12Machine learning

ML algorithms from scratch in NumPy

I implemented trees, ensembles, SVM, MLP, LSTM and PCA by hand. Logistic regression, linear SVM and a decision tree match scikit-learn's test accuracy to four decimals; the random forest does not (0.937 against 0.958), and the README says so.

Python · NumPy · SciPy
Journey

Engineering, then finance, then production risk, then research

05/26 — 08/26

Quantitative Research — QWIM Industry Capstone

NYU Tandon · industry-hosted by Bank of America · five-person team
  • Studied regime-conditioned risk budgeting across SPX, investment-grade bonds, high yield, emerging markets and gold, 1999–2025: equal risk contribution and hierarchical ERC on Conditional Drawdown-at-Risk, evaluated as a four-level ablation so each layer's contribution is measured rather than asserted.
  • My workstream's result: the best variant lifts Sharpe to 0.55 against 0.37 for 60/40 and cuts maximum drawdown from −37% to −24% at about half the volatility. Absolute return is lower, 5.4% against 5.7% — the win is risk, not return.
  • Built the regime risk-budgeting tab in the team's Shiny dashboard and a Typst client-report exporter with 12 unit tests.
  • Found the test suite was running zero tests on macOS while reporting success; fixed 13 plugin and dependency faults to get 10,423 passing, with 22 pre-existing failures documented.
08/22 — 07/25

Senior Risk Analyst — Market Risk Infrastructure

Nomura
  • Built Python and SQL pipelines reconciling daily P&L, positions and market data feeding VaR and sensitivity dashboards, removing 50+ hours a month of manual processing.
  • Owned the production lifecycle of VaR and sensitivity models across equities, rates, FX and commodities — daily backtesting and P&L attribution.
  • Built Python anomaly-flagging that attributed each exception to its cause — upstream data, a stale mark, a booking error — rather than merely raising it, cutting investigation time roughly 40%.
  • Partnered with front-office and regulatory teams on quarterly Basel 2.5 / FRTB stress testing and capital submissions, with rules-based validation reconciling 100% against front-office systems.
  • Led a three-person workstream that cut overnight batch runtime 35% and built the VaR and exception dashboard used by senior stakeholders.
09/25 — 03/26

Graduate Teaching Assistant

NYU Tandon · Finance and Risk Engineering
  • FRE-GY 6811 Financial Software Laboratory: taught C++ and financial-software concepts in labs and office hours.
  • FRE-GY 6023 Financial Economics: taught micro-, macro- and financial economics and graded coursework.
Background

Education & tools

Education

MS Financial Engineering
NYU Tandon · expected 05/27 · 3.84/4.0
MBA, Finance
NMIMS Mumbai · 2022 · 3.3/4.0
BTech Mechanical Engineering
VIT · 2020 · 8.9/10.0

Languages & libraries

Python — NumPy, Pandas, Polars, SciPy, statsmodels, scikit-learn, LightGBM, PyTorch, cvxpy C++20 — STL, Boost, CMake, CTest SQL · MOSEK · Linux · Git · pytest

Domains

Market risk · VaR & sensitivities · FRTB · CVA Execution · market making · market microstructure Portfolio construction · risk budgeting · convex optimization Derivatives pricing · volatility calibration Statistical learning · econometrics · time series

Certifications

CFA Level IC++ for Financial Engineering — Baruch College Bloomberg Market ConceptsCFI FMVA