Scene summary
- Objective: isolate whether the loss is market, data, model, mapping, or lifecycle.
- Products: Winter-26 structured gas (storage, swing) + tolling.
- Key tension: unexplained PnL is not a bucket. It is a diagnosis failure.
Transcript
- Location: open-plan floor, power desk side.
- Time: 08:20.
- Ambient: phones chirping, brokers on squawk, risk team already online, day-ahead power printing early indications.
Anna’s voice is calm, but her body language isn’t. She has that Monday-morning trader look: coffee half-finished, screens already full, and a risk email open in the corner like a threat.
Lukas drags a chair over. He does not open with theory. He opens with the one thing that matters on a desk: what number moved, where, and why.
Anna points at her screen before Lukas even sits.
Anna: “Morning. Sit. Friday was ugly. Risk is asking why we lost seven hundred. I can defend maybe four. The rest is fog. And I want to be sure the tools you build match how we actually think on this book.”
Lukas glances at the subject line of the email on her second monitor: “PnL Explain Residual + VaR Breach — Action Required”. He nods once.
Lukas: “Alright. No speeches. Which book, which cuts, which system. End-of-day Friday Zurich time, yes?”
Anna: “EOD Friday. Main pain is Winter-26 structured gas. Storage, swing, plus spark spread tolling deals. Risk sent VaR and a stress pack I don’t fully buy. And PnL explain has this big unexplained bucket.”
He opens the risk dashboard but keeps it angled so Anna can see. That’s deliberate: this is not “quant explains.” It’s “desk and quant isolate the failure mode.”
Lukas: “First question: is the number real? Did we lose it in the market, or did the mark move because something in the chain changed?”
Anna gives a short laugh.
Anna: “That is exactly the question.”
He clicks into PnL attribution.
Lukas: “Okay. Here’s the standard breakdown.”
He reads it out loud like he is confirming a checklist, not teaching a course.
- Market move PnL by factor: gas curve, power curve, CO₂, FX
- New trades
- Carry / roll-down
- Fees and settlement items
- Residual / unexplained
Anna taps the “Residual” row with her nail.
Anna: “They say gas curve move and spark spread move explain about four hundred. Fine. But there’s three hundred in ‘other / unexplained’. That smells like a model or booking issue.”
Lukas does not contradict her. He tightens the question.
Lukas: “Residual means one thing: ‘yesterday’s risk’ didn’t predict today’s mark. Usually it’s one of five buckets.”
He enumerates them on his fingers.
- Greeks wrong for the instruments that moved
- Market snapshot changed (vendor correction, late fix, curve rebuild)
- Model version changed (pricing code, calibration, interpolation)
- Booking or mapping issue (wrong curve, wrong index, wrong delivery shape)
- Lifecycle / cashflow event (option exercise, settlement, nomination, gas day mismatch)
Anna’s eyes narrow at “gas day mismatch”.
Anna: “Don’t even start. Gas day and power day alignment has killed people.”
Lukas scrolls down to the largest contributor list.
Lukas: “Let’s find the top offenders. What position is driving the residual?”
He filters for top residual by trade. One storage deal sits at the top, then a swing, then two tolling deals.
Lukas: “This storage option. The explain says curve move effect is small, but the mark moved a lot. That pattern points at vol or calibration drift, not just forwards.”
Anna leans forward.
Anna: “Storage isn’t quoted on a nice clean vol surface. It’s not a listed option. Where is this ‘vol’ coming from in your system?”
Lukas pauses. He chooses honesty over elegance.
Lukas: “It’s coming from our proxy model. We infer an effective seasonal spread vol from OTC option marks and historical moves. Then we calibrate parameters so the library matches the desk’s agreed marks on a set of reference deals.”
Anna’s tone is sharp now.
Anna: “So the system can change my storage mark if the proxy calibration changes, even if the market hasn’t?”
Lukas: “Yes. Which is why calibration needs to be controlled. If the calibration set changed on Friday, you’ll see residual.”
Anna sits back, thinking in hedges.
Anna: “And if the Greeks are unstable, then risk thinks we’re hedged and we aren’t. That’s worse than losing money.”
Lukas clicks into the trade’s risk details: delta buckets by month, vega buckets by tenor, cross-greeks.
Lukas: “Before we talk about stability, let’s clarify what Greeks mean for your book. For Winter-26 structured gas we have three layers.”
He points at the screen in three blocks.
- Linear exposures (forwards and shaped blocks): delta by delivery month
- Vanilla option exposures (listed/OTC options): delta, gamma, vega on forwards
- Flex exposures (storage/swing/tolling): path-dependent, regime-dependent sensitivities
Anna: “I see ‘delta per month’ and ‘vega per tenor’ on the dashboard. But I don’t trust them. If the Greeks are wrong, we hedge ghosts.”
Lukas nods. That is a desk phrase. He uses it back, so she knows he heard it.
Lukas: “Agreed. For flex deals, we do finite-difference Greeks on Monte Carlo. They can be noisy.”
Anna doesn’t let him hide behind “Monte Carlo”.
Anna: “Noisy is one thing. Wrong sign is another. Last month, your report said the swing was long winter delta. But when I did a manual sanity check, it behaved short around peak days.”
Lukas’s face tightens. Not defensive. Focused.
Lukas: “That could be one of two things: either the delivery shape mapping was wrong, or the constraint logic in the swing optimiser changed and we didn’t rerun the reference pack.”
Anna points at the tolling deals.
Anna: “And these tolling deals… risk report calls them ‘spark spread options’. That is a lazy label. These are operational. Heat rates, min run, start costs, outages, fuel nomination limits. The payoff is not a single spread.”
Lukas: “You’re right. The risk system simplifies the factor labels. Under the hood, we’re shocking power, gas, CO₂, and sometimes capturing dispatch logic. But the explain report will still call it ‘spark’. It’s misleading.”
Anna exhales. This matters for her narrative to risk.
Anna: “So what do we do right now. Risk wants an answer today.”
Lukas changes posture. This becomes an incident response, not a modelling chat.
Lukas: “We do a controlled replay. Three checks.”
He opens his notebook app and starts a mini action list.
Check 1 — Snapshots
Lukas: “We compare Thursday EOD and Friday EOD market snapshots used for your marks. If the snapshot changed due to a rebuild, we’ll see it.”
Anna interrupts.
Anna: “Risk always says ‘market moved’. I need to know whether the inputs changed because the vendor corrected something.”
Lukas: “Exactly. If Friday snapshot has a new curve build or revised fixings, that’s not trading. That’s a data event.”
Check 2 — Model and calibration IDs
Lukas: “We check pricing run ID: code version, calibration ID, config hash. If a library release went in, or calibration selection changed, we can attribute residual to that.”
Anna raises an eyebrow.
Anna: “Did you deploy Friday?”
Lukas does not answer immediately. He checks the release panel.
Lukas: “There was a minor release Thursday night. Interpolation change on the gas curve builder to handle an illiquid tenor gap. It should be neutral. But ‘should’ doesn’t pay your PnL.”
Anna’s look says: that is exactly my fear.
Check 3 — Trade mapping and lifecycle events
Lukas: “We check if any trade had a lifecycle event Friday: exercise, cashflow, nomination change. And we check mappings: index, location, delivery shape, FX conversion.”
Anna nods slowly.
Anna: “Good. Because I also saw something odd. The storage deal is booked at TTF but hedged partly on PEG because of liquidity. If the system assumes the wrong basis, the explain will be garbage.”
Lukas highlights the mapping field.
Lukas: “This trade is indexed to TTF, yes. Basis to PEG is in a separate hedge book. If risk attribution is looking at netted curves incorrectly, it can show residual. But that’s a reporting design issue.”
Anna points to VaR.
Anna: “Now VaR. Risk grilled me on a VaR breach and an ‘extreme winter price spike’ scenario. I want to know what you assume when you say ‘worst 1-day loss’ on a portfolio like mine. Because a storage book is not a linear book.”
Lukas keeps it practical.
Lukas: “VaR on flex is only meaningful if the model captures two things: non-linearity and regime switching. If risk is running a delta-normal proxy, it will understate tails and then panic when reality hits. I need to see which engine they ran.”
Anna: “They sent a PDF. It looks like a standard factor shock VaR with historical shocks.”
Lukas: “Historical shocks can be fine, but the mapping matters. If they shocked monthly forwards and ignored intramonth shape and optionality, the VaR is cosmetic.”
Anna smirks.
Anna: “Cosmetic risk is my favourite kind. Until it becomes political.”
Lukas closes the dashboard and looks at her directly.
Lukas: “Here’s what I can give you before noon: a clean story with evidence.”
He lists it as deliverables, like a desk would.
- Top 10 trades driving the day, split into explained vs residual
- Snapshot diff: which curves/fixings changed between Thu and Fri
- Model/run diff: whether code/calibration changed
- One-page diagnosis: market move vs data vs model vs booking
- A recommendation: what we fix first in analytics so this does not repeat
Anna nods.
Anna: “And I want one more thing. If it’s a model change, I want you to say it plainly. No ‘calibration nuance’. Risk will try to pin it on trading judgement.”
Lukas responds equally plainly.
Lukas: “If it’s our side, we own it. But then we also fix the process: no silent releases that can move marks on a live book without a controlled impact report.”
Anna stands up.
Anna: “Good. After lunch, we go deeper. Products and payoffs, how you build forwards and vols, how it maps to VaR and scenario. Whiteboard. But first, I need ammo for the 09:30 risk call.”
Lukas is already opening his terminal.
Lukas: “Send me the risk PDF. And give me the trade IDs for the top three: the storage, the swing, and the biggest tolling. I’ll run a replay with Thursday snapshot and Friday snapshot and see where the residual appears.”
Anna hesitates for half a second.
Anna: “One more. Don’t take this the wrong way. I like your tools. But I need them to speak desk language. ‘Vega per tenor’ is not a thing I can hedge. I hedge winter shape, summer-winter spreads, locational basis, and optionality in operational constraints.”
Lukas smiles, but it’s not playful. It’s the kind of smile that says this is useful feedback.
Lukas: “That’s fair. Then we’ll change the output layer. Keep the maths. Change the interface. Risk numbers should be reported in hedgeable terms. Otherwise they’re just decoration.”
Anna picks up her coffee and points at a small meeting room across the floor.
Anna: “12:30. Book it.”
Lukas: “Booked.”
He wheels his chair back to his desk, already thinking in diffs: snapshots, calibration, mapping, and the uncomfortable possibility that a “neutral interpolation fix” just cost the desk three hundred grand in residual.
Key takeaways
- Unexplained PnL is usually a reproducibility failure.
- The minimum forensic set is: trade set + snapshot ID + model ID + run ID.
- Flex products can move due to boundary shifts, not only factor moves.