SRS: Dashboard - Common — Performance (UC 4.3)
| Field | Value |
|---|---|
| BA in Charge | Trang Nguyen |
| Date Created | 2026-08-09 |
| Version | v1.2 |
| Document References | RFQ_ Stack Trading Prop Tech V7.pdf (§Risk Metrics Logic Definitions, §Risk Metrics Endpoints) · RFQ_ Website and Dashboard Implementation V7.pdf (§Part C: Trader Dashboard Implementation, Key Features) · Zapier Integration V7.pdf (§Appendix A/B —Market_Loss_When_Stopped) |
UC_4.3 — 12 Performance Metrics
1. Overview
| Field | Content |
|---|---|
| ID | UC_4.3 |
| Use Case | 12 Performance Metrics |
| Description | Dedicated "Performance" screen presenting 5 advanced trading-analytics widgets computed by the backend and consumed read-only by the frontend — Sharpe Ratio, Sortino Ratio, Avg. Win vs. Loss (with Risk/Reward Ratio), Holding Time Analysis, and Trade Efficiency Matrix. Same UC for both SIM and LIVE account types. |
| Zapier Flow | — |
| Zapier Table | — |
| 3rd Party | — |
Performance Overview - Day 0.png Performance screen — empty state (no closed trades yet at the trader's current level). Performance Overview V1.2.png Performance screen — populated state.
2. Trigger
The user selects the "Performance" tab on the Dashboard sidebar (Ref: UC_4.1.2 §2 Screen Description, row 2).
3. Pre-conditions
- User is authenticated and has an active SIM or LIVE trading account (Ref: UC_4.1.1).
4. Post-conditions
- The 5 Performance widgets display the trader's current-level metrics and continue to update live for the remainder of the session (Ref: Basic Flow step 7).
5. Basic Flow
- On Performance screen load, frontend calls
GET /core-performancefor the trader's current level (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Endpoints "Get Core Performance"). - Backend returns
sharpe_ratio,sortino_ratio,avg_win,avg_loss,holding_time{avg_win_min, avg_loss_min, risk_mitigation_text, wins_distribution, losses_distribution}(Ref: BR_4.3.1, BR_4.3.2, BR_4.3.4, BR_4.3.5). - Frontend renders the Sharpe Ratio card, Sortino Ratio card, Avg. Win vs. Loss card, and Holding Time Analysis card from the response in step 2.
- In parallel, frontend calls
GET /efficiency-matrix?lookback_count=100(default lookback) (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Endpoints "Get Efficiency Matrix Data") and renders the Trade Efficiency Matrix card (Ref: BR_4.3.6). - If the trader has no closed trades yet at their current level, all 5 widgets render their empty state instead of step 3/4 values (Ref: BR_4.3.7).
- User changes the Trade Efficiency Matrix lookback dropdown (
10/30/50/100/200) → frontend re-callsGET /efficiency-matrixwith the newlookback_count(Ref: BR_4.3.6). - On trade close, the
PERFORMANCE_UPDATEWebSocket event pushes updatedsharpe_ratio,sortino_ratio,avg_win,avg_loss, andholding_timevalues; the Sharpe Ratio, Sortino Ratio, Avg. Win vs. Loss, and Holding Time Analysis cards update live — the same event and mechanism already established for the Profit factor widget on the Overview screen (Ref: UC_4.2.4 §Basic Flow step 4) (Source: BA confirmation, 2026-08-09,QnA_init_docs.mdA-04). This supersedes the literal reading of theGet Core Performanceendpoint's Logic column ("Triggered only on page load") — the endpoint is the initial-load source, but the widget is not static thereafter. The Trade Efficiency Matrix card does not update via this event — it is fetched from a separate endpoint (Ref: BR_4.3.6) that only re-fetches on page load and on lookback filter change.
6. Exceptional Flow
- WebSocket/API connection drops: widgets retain their last-loaded values (stale data) while the client applies exponential backoff and automatically reconnects, per the shared WebSocket reconnection resiliency rule (CR-14).
- User resets (SIM) / re-buys (LIVE) after a failure: all 5 widgets reset to their empty state (Ref: BR_4.3.7), consistent with the confirmed dashboard-wide behavior "the active dashboard view and charts reset to zero" (Source:
References/QnA from clients/03_STAGE2_DASHBOARD_EVALUATION/QnA_STAGE2_DASHBOARD_EVALUATION.mdSTAGE2-002; BA confirmation, 2026-08-09,QnA_init_docs.mdA-18). On advancing to a new level, the same empty-state condition in BR_4.3.7 applies (all 5 widgets scope to the "current level" per BR_4.3.4/BR_4.3.5/Basic Flow step 1) — no separate reset rule beyond that.
7. Business Rules
BR_4.3.1: Sharpe Ratio — Formula, Window, and Rating Label
Formula: (Mean Daily Return ÷ Standard Deviation) × √252, using a rolling 30-day window (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Sharpe Ratio"):
Daily PnL scope — Realized only (closed positions): the "daily PnL" fed into steps 1–4 below is Realized P&L from closed positions for that day. This matches the closed-position-only data scope used across the rest of this Performance screen (Ref: BR_4.3.4 Avg. Win vs. Loss, BR_4.3.5 Holding Time Analysis, BR_4.3.6 Trade Efficiency Matrix — all computed from closed trades only) (Source: BA confirmation, 2026-09-05).
- Fetch the daily Realized PnL — sum of closed-position PnL for that calendar day — for the last 30 calendar days (
N = 30). - Calculate Mean Daily Return: sum all daily PnL values, divide by
N. - Calculate Standard Deviation: for each day, subtract the mean from that day's PnL and square the result; sum all squared values; divide by
(N − 1); take the square root. - Calculate Sharpe: divide Mean Daily Return by Standard Deviation, multiply by
15.874(√252 trading days).
Non-positive Mean Daily Return clamp: if Mean Daily Return (step 2) is 0 or negative, the Sharpe Ratio result is clamped to 0 rather than displaying a negative value (Source: BA confirmation, 2026-08-10).
Rating label: the numeric value maps to a qualitative label (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-07 — client-provided threshold, supersedes any generic industry-standard placeholder):
| Range | Label |
|---|---|
| ≥ 1.50 | Excellent |
| 1.00 – 1.49 | Good |
| 0.50 – 0.99 | Subpar |
| ≤ 0.49 | Poor |
Value display: max 2 decimal places, Ref: CR-11.
BR_4.3.2: Sortino Ratio — Formula, Window, and Rating Label
Formula: (Mean Daily Return ÷ Downside Deviation) × √252 — penalizes only negative volatility, using a rolling 30-day window (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Sortino Ratio"):
Daily PnL scope — Realized only (closed positions): same scope as BR_4.3.1 — the "daily PnL" used below is Realized P&L from closed positions only (Source: BA confirmation, 2026-09-05).
- Fetch the daily Realized PnL — sum of closed-position PnL for that calendar day — for the last 30 calendar days (
N = 30). - Calculate Mean Daily Return: sum all daily PnL values, divide by
N. - Calculate Downside Deviation: consider only the days with negative PnL; square each negative value; sum the squared values; divide by the TOTAL number of days (
N = 30); take the square root. - Calculate Sortino: divide Mean Daily Return by Downside Deviation, multiply by
15.874.
Rating label: same threshold table as BR_4.3.1 (Excellent ≥1.50 / Good 1.00–1.49 / Subpar 0.50–0.99 / Poor ≤0.49), applied identically to the Sortino value (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-07).
Value display: max 2 decimal places, Ref: CR-11.
BR_4.3.3: Sharpe / Sortino Bell Curve — Static Asset, Not Computed From a Distribution
The bell-curve chart on both the Sharpe Ratio and Sortino Ratio cards is a static, fixed-shape visual — it is NOT computed from a real return-distribution dataset. The backend only returns a single float value per metric (sharpe_ratio, sortino_ratio); it does not return any distribution array for this chart (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-06, grounded in the endpoint's Output Structure — RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Endpoints "Get Core Performance").
Only 2 elements on the chart are dynamic:
- A vertical marker line, positioned along the chart's X-axis proportionally to where the
sharpe_ratio/sortino_ratiovalue falls. - The numeric value and rating label (Ref: BR_4.3.1/BR_4.3.2) shown above the marker.
The curve shape itself, and the two corner labels "Retail" (amateur-tier performance) and "Elite" (professional-tier performance), are fixed static text at the two ends of the X-axis — they are not computed from any real population/benchmark dataset (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-08).
BR_4.3.4: Avg. Win vs. Loss & Risk/Reward Ratio
Avg. Win / Avg. Loss formula: average PnL of all winning closed trades at the current level, and average PnL of all losing closed trades at the current level, computed independently (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Avg Win vs Loss"):
avg_win= sum of all winning-trade PnL ÷ count of winning trades.avg_loss= sum of all losing-trade PnL ÷ count of losing trades.
Risk/Reward Ratio formula: absolute Average Win ÷ absolute Average Loss (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Win Rate & RR"). Displayed max 2 decimal places, Ref: CR-11, rounded per Ref: CR-13.
WIN/LOSS proportional bar: the horizontal bar splits between a WIN segment and a LOSS segment in proportion to the dollar ratio between avg_win and avg_loss — the same two values shown directly on the card (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-09). It does NOT use Win Rate % or Profit Factor for the split ratio — those are separate widgets (Ref: UC_4.2.4, UC_4.2.5).
Directional indicator icons: the icon shown beside Avg. Win and the icon shown beside Avg. Loss are fixed, decorative, and always paired the same way (upward-direction icon fixed beside Avg. Win, downward-direction icon fixed beside Avg. Loss) — they are NOT a computed trend comparison against a prior period. No source data (API field or historical series) exists to compute a period-over-period trend for these two values (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-10).
BR_4.3.5: Holding Time Analysis
Formula (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Holding Time"):
- Isolate the current level's closed trades; split into a Wins array and a Losses array (duration = Open timestamp to Close timestamp).
- Calculate the average holding duration in minutes for Wins (
avg_win_min) and for Losses (avg_loss_min). - To generate the chart coordinates, the backend applies a Gaussian Kernel Density Estimation (KDE) function across each duration array, outputting 50 evenly spaced X/Y coordinate points from the minimum to the maximum duration in that array (
wins_distribution,losses_distribution).
Chart rendering: the X-axis is Holding Duration in minutes (buckets: 0 min, 15 min, 30 min, 45 min, 60 min, 75+ min). The Y-axis is the relative density (%) output by the KDE function in step 3 above — the Wins density curve is plotted as positive values (above the zero line) and the Losses density curve is plotted as negative values (below the zero line, i.e. −density), producing a mirrored dual-curve effect. Each curve is annotated with its average duration label (e.g. "Avg win time: [avg_win_min] min", "Avg loss time: [avg_loss_min] min") (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-13, grounded in the KDE description above).
Risk Mitigation Audit text: a system-generated sentence displayed below the chart, sourced from holding_time.risk_mitigation_text (string) in the Get Core Performance response. The text is not static — it changes dynamically based on the comparison between average winning and losing holding times, per the 3 scenarios below (Source: client confirmation, 2026-08-17 — supersedes the prior single Difference%/±50% threshold model, which left the range between the two thresholds undefined; the 3 scenarios below are mutually exclusive and exhaustive, so risk_mitigation_text always resolves to exactly one of them).
Scenario A — Positive (winners held longer than losers).
- Condition:
avg_win_min > avg_loss_min - Formula:
Percentage = Round(((avg_win_min − avg_loss_min) / avg_win_min) × 100) - Generated string:
"Risk Mitigation Audit: Cutting losing trades [Percentage]% faster than riding winning ones. Hold winners, exit losers quickly: a behavior that supports positive expectancy."
Scenario B — Negative (losers held longer than winners).
- Condition:
avg_loss_min > avg_win_min - Formula:
Percentage = Round(((avg_loss_min − avg_win_min) / avg_win_min) × 100) - Generated string:
"Risk Mitigation Audit: Holding losing trades [Percentage]% longer than winning ones. This pattern limits your expectancy. Focus on cutting losses faster and avoid the tendency to let losing positions run."
Scenario C — Neutral (held for the exact same duration).
- Condition:
avg_win_min == avg_loss_min - No
Percentagecomputed for this scenario. - Generated string:
"Risk Mitigation Audit: Holding winning and losing trades for the exact same duration. Focus on letting your winners run while cutting your losses earlier to build a positive expectancy."
BR_4.3.6: Trade Efficiency Matrix
Chart data source: GET /efficiency-matrix returns an array of {timestamp_utc, trade_efficiency_percent, risk_reward} per closed trade within the selected lookback window (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Endpoints "Get Efficiency Matrix Data"). risk_reward here is a per-trade value distinct from the aggregate Risk/Reward Ratio on the Avg. Win vs. Loss card (Ref: BR_4.3.4).
X-Axis Calculation (trade_efficiency_percent field):
Formula: (Realized PnL ÷ MFE) × 100.
Logic: divide the realized profit by the Maximum Favorable Excursion (MFE) tracked during the open trade. This calculation is unchanged from the V7 document (Source: RFQ_ Stack Trading Prop Tech V7.pdf §Risk Metrics Logic Definitions "Trade Efficiency (MFE Tracking)"):
- While a position is open, the backend tracks a "High-Water Mark" of Unrealized PnL, throttled to a maximum of 1 evaluation per position every 2 seconds.
- Whenever the throttled Unrealized PnL exceeds the value cached in Redis, the cache is overwritten.
- Close-time throttle-boundary check: because step 2 only re-evaluates once every 2 seconds, a trade can close inside an un-evaluated throttle window while the market price at the exact close moment is already higher than the High-Water Mark cached from the last throttled evaluation. To prevent under-counting the MFE in this window, on trade close the backend performs one additional, non-throttled compare against the market price at the close moment: if that close-moment Unrealized PnL is higher than the cached High-Water Mark, the cache is overwritten with it before the MFE is locked in (step 4) (Source: BA confirmation, 2026-09-03).
- When the trade closes, the cached max value is the Maximum Favorable Excursion (MFE).
trade_efficiency_percent= final Realized PnL ÷ MFE × 100. If MFE is0or negative, the value is0%.
Y-Axis Calculation (risk_reward field):
Formula: Realized PnL ÷ Absolute(Average Loss).
Logic: divide the single trade's Realized PnL by the absolute value of the trader's historical Average Loss. This denominator is sourced directly from the loss value calculated for the "Avg. Win vs. Loss" dashboard metric (avg_loss, Ref: BR_4.3.4) — it must be computed using the current level's closed trades, making it a dynamic value that shifts over the duration of the level (Source: BA confirmation, 2026-08-27).
Fallback: if the trader has zero losing trades (avg_loss = 0), the denominator falls back to Market_Loss_When_Stopped — the trader's per-level Hard Stop Loss threshold, looked up from Table A (Forex) / Table B (Futures) by Current_Level, the same field used as the PnL dial's stop threshold (Ref: UC_4.8.1 §BR_4.8.1.2) (Source: Zapier Integration V7.pdf §Appendix A/B; client confirmation, 2026-08-27).
Axis mapping and dot coloring: X-axis = trade_efficiency_percent, per the X-Axis Calculation above (0%–100%); Y-axis = per-trade risk_reward, per the Y-Axis Calculation above. One dot per closed trade; dots are colored to distinguish winning trades from losing trades, matching the chart's legend (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-16).
Lookback filter: dropdown options 10 / 30 / 50 / 100 / 200 trades, default 100 — same enumerated value set as UC_4.2.5 §BR_4.2.5.1 (coincidentally identical option list; the two widgets use separate endpoints and are not the same data) (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-15).
"Sweet spot" / "Elite performance zone" overlay: a fixed, static coordinate box in the upper-right region of the chart. It is NOT computed from dynamic clustering of the trader's actual data points.
BR_4.3.7: Empty State (Day 0)
When the trader has no closed trades yet at their current level, all 5 widgets render with the literal placeholder string "--" in place of every dynamic numeric value (Sharpe Ratio, Sortino Ratio, rating labels, Avg. Win, Avg. Loss, Risk/Reward Ratio, Avg win/loss time labels, and the Trade Efficiency Matrix's empty point set), while every static layout element (chart axes, bell-curve shape, "Retail"/"Elite" labels, WIN/LOSS bar frame, directional icons, "Sweet spot"/"Elite performance zone" overlay, lookback dropdown) remains rendered exactly as in the populated state (Source: BA confirmation, 2026-08-09, QnA_init_docs.md A-17, confirmed visually by wireframe Performance Overview - Day 0.png).
BR_4.3.8: Widget Info Tooltip (3-Dot Icon)
Each of the 5 Performance widgets (Sharpe Ratio, Sortino Ratio, Avg. Win vs. Loss, Holding Time Analysis, Trade Efficiency Matrix) displays a 3-dot icon on its card header. Hovering the icon renders a static-text tooltip explaining that widget's metric, trigger/dismiss behavior per CR-10 Tooltip Interaction (Source: BA confirmation, 2026-08-27):
| Widget | Tooltip content |
|---|---|
| Sharpe Ratio | "A rolling 30-day measurement of your returns adjusted for total volatility. A higher ratio indicates smoother, more consistent profits." |
| Sortino Ratio | "A rolling 30-day measurement of returns adjusted only for downside volatility. It penalizes you for drawdowns rather than upside spikes." |
| Avg. Win vs. Loss | "The raw dollar value comparison of your winning trades against your losing trades." |
| Holding Time Analysis | "Maps the duration of your trades. It visually exposes if you are holding your losing positions longer than your winning positions." |
| Trade Efficiency Matrix | "Compares your realized profit against the Maximum Favorable Excursion (MFE). It reveals what percentage of a favorable price move you actually captured before exiting." |
8. Screen Description
| No. | Field Name | Field Type | Displaying rule / Behaviour rule |
|---|---|---|---|
| 1 | Sharpe Ratio value | Label | Displaying rule:- Numeric value + rating label (e.g. "1.42 Good"), max 2 decimal places. Empty state: "--". Ref: BR_4.3.1, BR_4.3.7.Behaviour rule:- Read-only. Updates live via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 2 | Sharpe Ratio bell curve chart | Label | Displaying rule:- Static chart shape with a dynamic marker line positioned per the current value, and static "Retail"/"Elite" corner labels. Subtitle: "Rolling 30 days". Ref: BR_4.3.3.Motion: Link motion. |
| 3 | Sortino Ratio value | Label | Displaying rule:- Numeric value + rating label, max 2 decimal places. Empty state: "--". Ref: BR_4.3.2, BR_4.3.7.Behaviour rule:- Read-only. Updates live via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 4 | Sortino Ratio bell curve chart | Label | Displaying rule:- Same behavior as row 2. Subtitle: "Downside risk". Ref: BR_4.3.3.Motion: Link motion. |
| 5 | Avg. win | Label | Displaying rule:- Monetary value. Empty state: "--". Directional indicator icon fixed beside this field (decorative, non-computed). Ref: BR_4.3.4, BR_4.3.7. Monetary value display: Ref: CR-11.Behaviour rule:- Read-only. Updates live via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 6 | Avg. loss | Label | Displaying rule:- Monetary value. Empty state: "--". Directional indicator icon fixed beside this field (decorative, non-computed). Ref: BR_4.3.4, BR_4.3.7. Monetary value display: Ref: CR-11.Behaviour rule:- Read-only. Updates live via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 7 | WIN/LOSS proportional bar | Label | Displaying rule:- Bar split between a WIN segment and a LOSS segment, proportional to the dollar ratio between Avg. win and Avg. loss (rows 5–6). Ref: BR_4.3.4.Motion: Link motion. |
| 8 | Risk/Reward ratio | Label | Displaying rule:- Format "[value]", max 2 decimal places. Empty state: "--". Ref: BR_4.3.4, BR_4.3.7.Motion: Link motion. |
| 9 | Holding time analysis chart | Label | Displaying rule:- Mirrored dual density-curve chart: Wins plotted positive, Losses plotted negative. X-axis: Holding Duration buckets (0 min–75+ min). Annotated with "Avg win time: [X] min" / "Avg loss time: [X] min" labels.- Below the chart: a system-generated Risk Mitigation Audit sentence, rendered as-is from holding_time.risk_mitigation_text (String), dynamically computed from the comparison between avg_win_min/avg_loss_min per the 3 scenarios (Positive/Negative/Neutral) in BR_4.3.5 (not hard-coded). Overflow: Wrap text. Ref: BR_4.3.5, BR_4.3.7.Behaviour rule:- Read-only. Updates live via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 10 | Trade efficiency matrix chart | Label | Displaying rule:- Scatter chart: X-axis trade_efficiency_percent (0%–100%), Y-axis per-trade risk_reward. One dot per closed trade in the selected lookback window, distinguishing winning vs. losing trades per the chart legend. Static "Sweet spot"/"Elite performance zone" overlay box. Empty state: no dots plotted. Ref: BR_4.3.6, BR_4.3.7.Behaviour rule:- Read-only. Re-fetches on lookback filter change (row 11). Does NOT update via PERFORMANCE_UPDATE. Ref: Basic Flow step 7.Motion: Link motion. |
| 11 | Trade efficiency lookback filter | Dropdown (Single-selection) | Displaying rule:- Options: 10, 30, 50, 100, 200. Default: 100.Behaviour rule:- On selection: re-fetches GET /efficiency-matrix?lookback_count=. Ref: BR_4.3.6. |
| 12 | Widget info icon (3-dot) | Icon | Displaying rule:- Rendered on the card header of each of the 5 widgets (Sharpe Ratio, Sortino Ratio, Avg. Win vs. Loss, Holding Time Analysis, Trade Efficiency Matrix).Behaviour rule:- On hover: renders a static-text tooltip with that widget's metric explanation. Ref: BR_4.3.8, CR-10. |
Changelog
| Date | Version | Updated item | Before | After | Notes |
|---|---|---|---|---|---|
| 2026-08-17 | v1.1 | BR_4.3.5 — Risk Mitigation Audit text formula rewritten to 3 discrete scenarios | SingleDifference% = ((avg_win_min − avg_loss_min) / avg_loss_min) × 100 formula with only 2 message templates gated at ≥ 50 / ≤ −50 (denominator avg_loss_min; magnitude-only wording "strongly supports"/"may be limiting"; no defined behavior for the range between the two thresholds or for the equal-duration case) | Replaced with 3 mutually exclusive scenarios keyed directly offavg_win_min vs avg_loss_min: Scenario A (Positive) avg_win_min > avg_loss_min → Percentage = Round(((avg_win_min − avg_loss_min) / avg_win_min) × 100); Scenario B (Negative) avg_loss_min > avg_win_min → Percentage = Round(((avg_loss_min − avg_win_min) / avg_win_min) × 100) (denominator is avg_win_min in both A and B, not avg_loss_min); Scenario C (Neutral) avg_win_min == avg_loss_min → fixed string, no percentage computed. Exact generated-string wording per scenario now specified (differs from the old A/B templates — "supports positive expectancy" vs. "strongly supports"; "limits your expectancy" vs. "may be limiting"). Screen Description row 9 updated to reference the 3-scenario rule instead of "Difference%". | Client-supplied formula, BA confirmation 2026-08-17 — supersedes theDifference%/±50% threshold model from 2026-08-15 in this same BR. |
| 2026-08-27 | v1.2 | BR_4.3.6 — Trade Efficiency Matrix axis formulas made explicit; new BR_4.3.8 — Widget Info Tooltip | X-axis (trade_efficiency_percent) formula stated only via the MFE-tracking steps; Y-axis (risk_reward) had no formula documented, only "a per-trade value distinct from the aggregate Risk/Reward Ratio"; no 3-dot info icon / tooltip documented on any of the 5 widgets | BR_4.3.6 restructured into explicitX-Axis Calculation ((Realized PnL ÷ MFE) × 100, unchanged from V7) and Y-Axis Calculation (Realized PnL ÷ Absolute(Average Loss), denominator = current-level avg_loss from BR_4.3.4, dynamic over the level's duration; fallback to Market_Loss_When_Stopped — Table A/B per-level Hard Stop Loss threshold — when avg_loss = 0). New BR_4.3.8 documents the 3-dot info icon on each of the 5 widget headers and its hover-tooltip content (Sharpe Ratio, Sortino Ratio, Avg. Win vs. Loss, Holding Time Analysis, Trade Efficiency Matrix), per CR-10. Screen Description: new row 12 for the info icon; header Document References updated to add Zapier Integration V7.pdf (§Appendix A/B). | Client-supplied Y-axis formula and tooltip copy, BA confirmation 2026-08-27.Market_Loss_When_Stopped fallback confirmed by client as sourced from Table A/B (same field already used in UC_4.8.1, UC_4.12.2, UC_4.15.1, UC_4.15.2). |
| 2026-09-05 | v1.3 | BR_4.3.1, BR_4.3.2 — daily PnL scope clarified to Realized-only | Step 1 of both formulas said "Fetch the daily net PnL for the last 30 calendar days" without specifying whether that daily figure includes an unrealized/open-position component | Added an explicit "Daily PnL scope — Realized only (closed positions)" note to both BRs: the daily PnL fed into the Sharpe/Sortino formulas is Realized P&L from closed positions only, consistent with the rest of the Performance screen's closed-trade-only data scope (Avg. Win vs. Loss, Holding Time Analysis, Trade Efficiency Matrix all use closed trades). Step 1 wording updated from "daily net PnL" to "daily Realized PnL — sum of closed-position PnL for that calendar day". | User request: clarify that the formula's daily PnL is Daily PnL = Realized PnL, since all Performance data is sourced from closed positions. |