Episode 14: Trade History – The Immutable Ledger and Single Source of Truth
Welcome to TheFinalTape Academy – Episode 14: Trade History – The Immutable Ledger and Single Source of Truth
Trade History is the platform's forensic core — the unalterable record where every completed trade's outcome is etched in canonical, backend-verified numbers. It is not a narrative diary, not a customizable spreadsheet, and not a place for excuses. It exists to eliminate alternate realities: no frontend recalculations, no broker rounding discrepancies, no “my Excel says different” debates.
Here, the market's verdict is final, consistent, and identical across every view — Dashboard, Charter Elite reports, CSV exports, API responses, and this screen.
Zero-Calculation & Canonical Truth: What It Means
For Completed trades, all key metrics are pre-computed in the backend canonical layer and fetched directly:
- Net PnL → `net_pnl_canonical`
- Gross PnL → `gross_pnl_canonical`
- Realized R → `realized_r_canonical`
- Expected R → `expected_r_canonical`
- Planned Risk ($) → `planned_risk_usd_canonical`
- Holding Time → `holding_hours_canonical`
The frontend never recomputes these values — it displays the stored canonical result (or falls back to database-stored values only during rare, brief post-close processing windows, typically <60 seconds).
For Active and Missed trades:
- No canonical metrics exist (no realization = no verdict).
- PnL column displays `-` (honest blank).
- You still see planned entry, planned R:R, risk %, position size, etc. — but realized money remains blank until closure.
Result: One authoritative number for every metric, everywhere. The same PnL, R, and win rate you see here match the Dashboard, exports, and API exactly. No version drift. No excuses.
Layout & Core Features
Quick Stats Bar (Top Reality Check)
- Total Trades: X Completed • Y Active • Z Missed
- Total PnL: Sum of canonical net PnL for completed trades only (green/red)
- Win Rate: % of completed winners (canonical when unfiltered + correct portfolio)
- Avg Duration: Average holding hours (completed only)
These update dynamically with applied filters.
Filters (Surgical Control)
- Status: All / Completed / Active / Missed
- Date Range: Custom from–to
- Setup: Specific setup or “All”
- Taxonomy Tags: Filter by Playbook categories or specific tags (e.g., “Early exit (fear)” + “High volatility regime”)
Quick Stats recalculate to reflect the filtered view. Clearing filters + selecting the correct portfolio returns canonical Dashboard-equivalent aggregates.
Table Columns
Default Visible Columns
- Date | Symbol | Side | Status
- PnL (USD) — canonical net for completed, `-` otherwise
- Setup
- Expected R | Realized R (canonical)
- Actual Entry Price | Actual Exit Price
- Actual Size
- Trade Duration
- Actions: View / Edit / Delete
Optional Columns (toggle via Manage Columns)
- Checklist Compliance %
- Taxonomy Tags (grouped by category)
- Planned Entry / TP / SL
- MAE / MFE / MAPE / MFPE
- Position Value ($)
- Exit Quality Score + auto-detected patterns
- Multiple exit fills summary
Actions
- View: Opens full Trade Summary dialog (shows all details, checklist, Playbook tags, excursion metrics, notes, charts)
- Edit: Returns to entry workflow for updates
- Delete: Confirmation dialog → removes trade (optimistic UI refresh)
- Direct deep link: Append `?tradeId=XXX` to URL → auto-opens that trade’s dialog (useful from reports or external links)
Export to CSV
Exports the current filtered view using canonical/stored values — no frontend artifacts. Ideal for external analysis, mentor review, or tax purposes.
Data Flow & Integrity Assurance
- Canonical metrics fetched for completed trades
- Regular trade API data fetched for active/missed + fallback completed
- Merge & deduplication by trade ID (canonical values take precedence)
- Mapping to table rows using enterpriseRowMapper (prefers canonical fields)
- Filters applied client-side
- Table + Quick Stats rendered
This ensures:
- Speed: Instant load even with thousands of trades (no browser crunching)
- Consistency: Identical numbers across Dashboard, reports, exports, API
- Correctness: One backend formula per metric, executed once
- Auditability: Every value traceable to canonical layer or database
- Trust: When you share “my avg R is 1.62,” the system agrees
Troubleshooting Quick Hits
- PnL stuck at `-` on recently completed trade? → Canonical processing still in flight (wait 30–60s) or missing stored value.
- Win rate / totals mismatch Dashboard? → Filters active (date, setup, status). Clear filters + confirm correct portfolio selected.
- Trade missing from list? → Check applied filters, status, date range.
- Table not updating after edit? → List subscribes to `tradeUpdated` events; manual refresh if needed.
Trade History is where narratives end and numbers become undeniable. It is the final court — no appeals, no spin, no alternate facts.
Open it now. Filter to Completed only. Sort by Realized R descending. Examine the top 10 and bottom 10 trades. The distance between them is usually the distance between consistent payouts and repeated resets.
Next Episode: Reports & Analytics Deep Dive – Drilling from the 8 canonical metrics and Trade History into regime-specific performance, taxonomy heatmaps, compliance violation patterns, exit quality distributions, drawdown forensics, and the full suite of autopsy tools.
Proceed once you have reviewed at least 20–30 completed trades in Trade History, paying close attention to canonical PnL, Realized R, and how they align (or misalign) with your remembered intent. The numbers do not care about your story. They only record what actually happened. Face them. Own them. Improve from them. Or keep explaining why the account remains flat.
Ready to put this into practice?
Run compliance scoring, tag ranking, and Kill List rules on every trade — not once a month when the account feels off.