01 · Marks & log
Excel marks book
Official NAV, beta, drawdown, and ratio wall: source of every headline number on this page. Trading log proves fill-level diary claims.
HULT CHL-0200 • 20 JAN → 1 MAY 2026
Adaptive Efficiency
An Opinionated Post-Mortem on Implementing Investment Fundamentals, Qualitative Book Management, and Strict Risk Discipline Under Q1 2026 Stress
Enter · Space · or skip to main content
adaptive efficiency chl-0200 static archive
Bottom line
-4.37%
About $43.7k on $1M paper. Stated without hedging.
Vs SPY (full term)
-2.08%
SPY (full term)
-2.29%
Max drawdown (Apr 2)
-6.44% vs SPY -11.72% (+5.28pp)
Portfolio beta (close)
0.63
At a glance
Adaptive Efficiency names this site: a personal frame for the run, from Andrew Lo’s adaptive-markets idea that desks and regimes adjust over time. The title describes the frame. It does not claim we beat the simulation.
Ten-week paper desk: smaller trough drawdown than SPY at the Apr 2 low, slower April re-risk after the ceasefire. Filed memo is the narrative authority for grades. This page is my scan path.
Faculty sign-off already happened (422 / 430). This microsite is an independent, unofficial archive (not Hult, the professor, or teammates). What follows is my personal take and presentation on the same filed data. If this page disagrees with the Excel close or memo, the filed artifacts win.
Sources
Marks book + log, committee memo, and client deck. Everything else on this page points back to these.
01 · Marks & log
Official NAV, beta, drawdown, and ratio wall: source of every headline number on this page. Trading log proves fill-level diary claims.
02 · Written
~2,600 words filed for the chair: strategy rationale, crisis hedge, April miss, and post-mortem frame.
03 · Oral
20-slide defense narrative. PDF for review. PPTX if you need to edit slides.
Brief
CHL-0200 program rules, grading frame, and desk window, before the narrative and marks.
Eight student teams. One simulated capital mandate.
Manage $1,000,000 in paper capital across US equities and ETFs, deployed in real time through a simulated brokerage, with the same order, margin, and short mechanics as a live desk.
Grading weights Sharpe ratio and risk-adjusted return over headline P&L. The question is whether process discipline held under constraint.
This archive is Team BWC's post-mortem on how that mandate was actually run.
Course term
20 Jan – 1 May 2026 Briefing, live simulation, post-mortem, and presentations
Live desk window
2 Feb – 11 Apr 2026 StockTrak trading period. Headline marks frozen at close
This archive
Sunset 1 May 2026 Static engineering snapshot. No live sync
Story
A stressed Q1 book across four phases: the crash window and a recovery we re-entered too slowly.
Architecture vs P&L
Filed memo line: the risk architecture was defensible, but converting macro views into realized P&L lagged at regime changes, hedge roll-off, and post-shock re-risk.
March trough
Low-beta book plus crisis hedge: peak desk drawdown about -6.5% vs SPY -8.5% in late March. Relative downside protection while beta sat near zero.
April re-risk
After the 8 Apr ceasefire, we re-entered equities slowly and under-captured the snap-back.
Honest frame
Regime reads were often right. Execution lagged in fast windows. The log shows losers held roughly twice as long as winners.
We signed up for moderate risk, a SPY benchmark, and a filed memo target of ~10% p.a. with ~1.0 average beta (Foundation ~1.0, Growth ~1.1, Crisis ~0.0, Ceasefire ~0.6). We kept logs and limits, but the closing return was red on both SPY and our own stated goal.
Phase 3 invoked Section 5 of the charter: with twelve trading days left and the book last in class, we ran emergency triage instead of a routine risk reduction. At the Apr 2 trough, desk -6.44% vs SPY -11.72% (+5.28pp).
Trade log audit
Timing, disposition, conviction, and turnover on the closed StockTrak book. Same post-hoc check the validator runs on diary claims.
Loading audit…
Desk
Headline cards, ratio wall, and desk-only charts from the filed Excel close.
Ended at
$956,280
About $43.7k below $1M start.
Vs SPY (full term)
-2.08%
Headline miss vs grading benchmark.
Vs filed target
-4.37%
Memo target ~10% p.a. Ann. -23.5% (68-day, Excel caveat).
Max drawdown (Apr 2)
-6.44%
SPY -11.72%, +5.28pp relative preservation.
Closed trades
28.6% wins
Negative expectancy. Detail in post-mortem modal.
Desk (graded): Excel close, 11 Apr 2026. Headline -4.37% total. Trough drawdown -6.44% vs SPY -11.72%.
Be profitable and have fun: Calmar, M2, and a full ratio wall were optional extras beyond the grading sheet.
Labels match the grading sheet. Read the cards above first.
Research
The brief asked for process evidence. Eight operators split execution, IPS compliance, and journal discipline, with a Python overlay as a confidence check in the diary (cited there, never wired to execution).
Three parallel lanes on one book. The mandate was given. We had to operate inside it and document that we did.
Execution lane
StockTrak fills, sizing, stops, and crisis-overlay trades. One operator carried primary execution while the desk debated macro in parallel.
IPS / compliance lane
Position limits, beta targets, and mandate checks against the filed IPS. A sub-team tracked drift before trades cleared committee chat.
Journal lane
Rationale for every open and close, win or loss, plus bi-weekly logs translating diary entries into trade-level justification.
What the deliverables list required, expressed through sleeves, screens, and memo sections across several research lanes.
Macro / top-down
War headlines, rates, and ceasefire windows drove hedge and re-risk timing.
Sector sleeves
AI, defence, financials, and defensive retail expressed as ETF and single-name sleeves.
Technical timing
Stops and trailing stops on extended names, with trend confirmation before adds.
Fundamentals / 10-K
Quality and balance-sheet screens on high-conviction singles alongside ETF beta.
ESG review
Committee-facing lens on contested names: narrative risk within the main book.
Quant / AI pitches
Screens and pitches informed debate. Execution still ran through StockTrak and IPS.
Beyond the brief: a Python overlay on the closed trading universe. It ran rule-checks against the closed book after volatile weeks. Cited in diaries, never wired to live execution.
Python backtest and forward-cast stress test on the closed universe. Desk marks stay in Desk.
Overlay cells refresh from data/full-metrics.json when fetch succeeds.
Motion loops, desk-vs-overlay charts, and Plotly exports from the engineering freeze. Grouped for scan. Full depth in engineering docs.
Stack
Audit-first engineering
An audit-first build: auditability, repeatable runs, and explainable outputs over alpha research.
Python audit engine
Ingest → validate → attribute → chart. Terminal-first CLI surfaces. No live signal feed to StockTrak.
Factor attribution
09_fama_french).factor-loadings).Allocation & optimization
02_efficient_frontier).06_black_litterman, optimizer.py).12_kelly_criterion).Backtest & desk compare
backtest-compare).08_backtest_equity).return-dist).equity-curve, drawdown).desk-performance).Risk & simulation
11_stress_testing).14_quadratic_variation).full-metrics.json).Regimes & macro
04_vol_surface_3d).13_yield_curve).Macro mood labels flag when trades did not match the labeled environment. Labels only. No automated rotation.
Momentum / carry sleeves higher
Value / re-risk sleeves higher
Vol / quality higher
Cash / duration hedge higher
Signals suppressed. Min-variance + cash buffer
| Group | Packages (non-exhaustive) |
|---|---|
| Core numerics | numpy, pandas, scipy, polars, pyarrow, statsmodels |
| Portfolio & quant finance | pyportfolioopt, quantstats |
| ML / optimization / graphs | scikit-learn, networkx, cvxpy, cvxopt |
| Data vendors | alpaca-py, yfinance, polygon-api-client, openbb |
| Infra & runtime | duckdb, appwrite, apscheduler, typer, pydantic |
| Scrape & comms | scrapy, feedparser, requests, httpx, python-telegram-bot |
| Viz & UX | plotly, matplotlib, seaborn, manim, rich, streamlit, asciichartpy |
| Dev / CI | pytest, ruff, ty, bandit, deptry, pre-commit, mkdocs-material |
| Layer | Technology | Role |
|---|---|---|
| Analytics DB | DuckDB | portfolio.duckdb (gitignored): EOD price matrix, fast SQL/pivot |
| Fast transforms | Polars | Pivot in topological_run.py: DuckDB to wide matrix |
| Classic stack | pandas, NumPy, SciPy, PyArrow | Time series, stats, optimization |
| Cloud sync | Appwrite SDK | Snapshots, signals, alerts, scraped data (historical, frozen at archive) |
| Calendar | pandas-market-calendars | Trading-day logic |
| Source | Client / fallback |
|---|---|
| Prices (primary) | Polygon (massive_feed.py) · yfinance |
| Prices / fundamentals | yfinance, Alpaca · Scrapy spiders |
| Macro | FRED (fred_feed.py) |
| News | feedparser, Google RSS spider · Alpaca news |
| Filings | SEC EDGAR spider + sec_feed.py |
| Scraping infra | Scrapy on Zyte Scrapy Cloud · Appwrite |
| HTTP | requests, httpx · rate-limited pulls |
| Layer | Technology | Role |
|---|---|---|
| Language | Python 3.11-3.13 | Core quant engine |
| Package manager | uv + uv.lock | Reproducible installs (uv sync --frozen) |
| Packaging | pyproject.toml (PEP 517) | Build metadata for quant_monitor |
| CLI | Typer | project, project-dashboard, project-bootstrap, plus doctor, backtest, and dashboard entrypoints |
| Config | TOML + Pydantic | config.toml, config.py: holdings, MA periods, regime weights, thresholds |
| Secrets | Doppler | API keys at runtime (never committed) |
| Surface | Stack |
|---|---|
| Terminal | Rich CLI dashboard (dashboard/app.py) |
| Market toolkit | OpenBB Platform (openbb_views.py, fundamentals via obb) |
| Static archive | Plotly, matplotlib, seaborn, asciichartpy |
Faculty
Professor Daniela Neiderer, Hult. Grades are on record. Process and logs scored high. Headline return missed.
422 / 430
Architecture & logs
147/ 150
Strategy & final report
118/ 120
Client presentation & post-mortem
118/ 120
Peer eval & leadership
39/ 40
Macro miss
We were slow to match the April rally after the ceasefire headline and Brent move.
Drawdown win
At the Apr 2 trough only: desk -6.44% vs SPY -11.72% (+5.28pp). That is the trough preservation figure only. Full-term Sharpe, Sortino, and expectancy stayed negative.
Team friction
Some wanted live alerts from Python. We kept it as a post-hoc check layer only.
Prep / rehearsal
Eight-person schedules clashed. Full desk dry-runs were rare. Some oral defense answers reflected that gap.
Tech depth across team
Not every member carried the same quant load. The lead owned validator design and integration.
Breadth vs depth
Wide role split (macro, risk, sectors) vs one shared quantitative standard.
What we'd change
Next time every operator, not just the lead, owns at least one validator surface.
Principles
Four lines we would defend in a PM review or faculty debrief.
Report the loss first. The trough-relative figure vs SPY is supporting context.
Faculty and future employers should see the red number before the hedge story: that is how we would present to an IC today.
Logs, diary, and filed limits (e.g. 25% max single name) mattered more than one lucky trade.
The 147/150 architecture score reflects reproducible records and diary discipline. The discipline we took into compliance and risk internships.
PSQ/SH cost -$19,205 on the Apr 2 tariff rally. AA/CENX (+$17,169) and lower exposure at the trough did more protecting than inverse ETFs.
SH/PSQ behave like short futures, not convex puts. Next desk would size 1–2% NAV in OTM SPY puts instead, and still pre-write a ceasefire re-risk playbook.
Python audited diary claims after each week. It never routed orders to StockTrak.
Each week we could run the same rule check the overlay was built for.
Team
Eight operators on CHL-0200. LinkedIn is the direct line if you want the person behind a lane.
Contact
PM, recruiter, faculty, or a desk building something comparable: questions on the validator, reproducible data sandbox, or a short walkthrough of what we filed vs what we built are welcome. I also help teams ship similar audit layers and committee-facing archives at their own shop. Email kartavya@kartavya.tech. Kartavya Jharwal, Team BWC lead.