▶  Session Replay  ·  20 September 2026

Building a rates trading dashboard
from an empty file

The full session, start to finish. We build a working rates risk screen in Python and explain every decision as we go. Slides and the complete source code are free to download below.

⏱ 56 minutes
💻 Python, Dash, AG Grid
📈 P&L, DV01, VaR
📥 Code included
Recorded live on Sunday 20 September 2026. No edits beyond trimming the top and tail.
Take it with you
Everything from the session

Free, no sign up. The code is commented in numbered blocks so you can follow it alongside the video, and the sample data is included so it runs the moment you unzip it.

Two minutes
Run it yourself
terminal
unzip desk-ready-rates-dashboard.zip
cd desk-ready-rates-dashboard

python3 -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

pip install -r requirements.txt
python app.py

Then open http://127.0.0.1:8050. The sample data ships with the pack, so there is nothing to download or configure. If you want to regenerate it with different numbers, run python generate_data.py and change the seed.

The ground we covered
Fifteen slides, one working screen
01

The stack, and why

pandas, Dash, AG Grid, Plotly and NumPy, and what each one is actually doing.

02

Setup, once

Virtual environments, why they matter, and picking the right interpreter in VS Code.

03

The data model

Four CSVs: the book, 250 days of yield history, VaR history and the intraday P&L path.

04

DV01, and one minus sign

Why a long position makes money when yields fall, and how that single sign drives the whole P&L column.

05

VaR in three steps

Historical simulation, the method most desks actually report. No normal distribution assumed anywhere.

06

Dash in one idea

Layouts describe the page, callbacks say what recomputes when. You write no JavaScript.

07

AG Grid column anatomy

One dict per column: value formatters, aggregation and the conditional formatting that turns P&L red and green.

08

One callback, six buttons

Pattern matching ids, so the country rail is one callback instead of six near identical ones.

09

Comparing markets properly

Rebasing series to zero so you read basis points moved, not yield levels. A JGB and a Gilt are not comparable raw.

10

Live repricing

Make a cell editable, type a new yield, and watch the move, the P&L and the colour all follow.

Learn from ours
Three things that will cost you an hour

Every one of these came up while building it. They are the difference between a smooth afternoon and a frustrating one.

01

The grid renders bare

AG Grid version 33 and up ship a new theming system. If you style with the classic CSS theme you have to pass theme: "legacy" in dashGridOptions and load the stylesheets yourself. Miss it and you get an unstyled table.

02

Enterprise features look broken

Set filters, row grouping and totals need enableEnterpriseModules=True. Without a licence key they still run in full, you just get a small watermark and a console notice. Nothing is actually restricted.

03

NaN across the totals row

The grand total row has no value in the columns you did not sum, so every valueFormatter has to cope with null. Otherwise d3 prints NaN across your footer.

Why this belongs on your CV
The bullet point, written for you
📝 Copy this, then make it true

Built an interactive rates risk dashboard in Python (Dash, AG Grid) covering P&L attribution, DV01 laddering and historical simulation VaR across six sovereign markets.

Run it, change something, break it, fix it. Then you can talk about it in an interview, which is the entire point. A project you cannot explain is worth nothing on a CV.

Sessions are built from your questions

This one existed because people asked how a trading dashboard actually gets built after the August CV workshop. Tell us what you want next and it goes on the calendar.