← All work

Analytics · Case study

PanoTrading

Performance analytics for Trading 212

running in production panotrading.com ↗

The problem

Trading 212 is very good at executing orders and much less good at telling you how you're actually doing. The app shows your positions and a headline return; it doesn't show win rate, realized versus unrealized P&L, currency effects, or where your risk is concentrated. All of that information is technically in your hands already — buried in a raw CSV export listing every order you've ever placed.

What I built

PanoTrading turns that export into answers. You upload your complete history; it rebuilds your actual trades from the raw rows, computes the numbers Trading 212 never shows you, and keeps your holdings valued in real time.

  • Full-history import — thousands of order rows parsed and normalized in seconds
  • A trade-construction engine that matches raw fills into coherent positions and round-trip trades
  • Realized & unrealized P&L, win rate, and per-instrument performance
  • Risk view: position sizing and exposure, with alerts when limits are approached
  • Live valuations from real-time stock prices and exchange rates, so multi-currency portfolios stay accurate
  • Insights that flag patterns — what your winning trades have in common that your losing ones don't

How it works

From a raw export to a live dashboard:

  1. Upload the full Trading 212 CSV export
  2. Parse & normalize the raw order rows
  3. Trade-construction engine matches fills into positions
  4. Persist to SQL Server
  5. Enrich with live quotes & FX rates
  6. Dashboards: P&L, win rate, risk, insights

The UI is Blazor with MudBlazor; data lives in SQL Server through EF Core; sign-in is Google OAuth. Live prices and exchange rates come from external market-data APIs behind a cache, so valuations stay fresh without burning through provider rate limits.

Hard problems

  • The importer is the product. Real exports are messy: partial fills, currency conversions, edge cases that only show up in someone else's multi-year history. Most of the engineering went into producing numbers people trust.
  • Live data on a budget — refreshing quotes for many users' holdings without exceeding API quotas meant caching, batching, and being deliberate about what "real time" actually needs to mean.
  • Insight over noise: choosing the handful of metrics that change a trader's behavior instead of shipping forty charts.

Results & lessons

Hundreds of traders use PanoTrading today. The lesson it hammered home: users forgive a plain interface, but they never forgive a wrong P&L. Accuracy in the boring ingestion layer — not the dashboard visuals — is what retains people.