Trader Intelligence

Trader Analytics

9 completed / 0 failed
Generated
2026-06-28T14:52:29.240Z
Requests
9 requested / 9 completed
Symbols
ABCD, EFGH
Source
raw_trade_requests
This report aggregates execution-feedback summaries only.
Gross P/L excludes commissions, fees, borrow costs, and slippage.
Market context, support/resistance, VWAP/EMA, and candle structure were not used unless explicitly shown in a market-context section.
Small sample sizes should be treated as review prompts, not statistical proof.
Trader identity and long-term behavior conclusions require more reviewed trades.
Total Gross P/L
-235.70
commissions excluded
Gross Win Rate
66.7%
6 winners
Completed
9
0 failed
Primary Focus
2
Clean entry and full exit
Adverse Add Rate
11.1%
1 trades
Open Rate
11.1%
1 left open

Gross P/L By Trade

gross -235.70
+50.00#1 ABCD-42.00#2 ABCD+44.00#3 EFGH-78.00#4 EFGH+10.40#5 ABCD+66.00#6 ABCD-400.00#7 ABCD+110.40#8 ABCD+3.50#9 ABCD

Gross Win / Loss / Flat

9
trades
Winners6 / 66.7%
Losers3 / 33.3%
Flat0 / 0.0%

Top Execution Risks

total 8
Reduced after price was against the entry3 / 37.5%
Added several times before reducing size1 / 12.5%
Trade was left open1 / 12.5%
Built too much size in a losing trade1 / 12.5%
Many adds before one large exit1 / 12.5%
Inconsistent position sizing1 / 12.5%

Primary Focus Distribution

total 7
Clean entry and full exit2 / 28.6%
Reduced after price was against the entry2 / 28.6%
Trade was left open1 / 14.3%
Structured partial exits1 / 14.3%
Inconsistent position sizing1 / 14.3%

Key Execution Risk Rates

total 9
Review adds that need chart data1 / 11.1%
Added several times before reducing size1 / 11.1%
Trade was left open1 / 11.1%
Review fast execution clusters1 / 11.1%
Inconsistent position sizing1 / 11.1%
Added meaningful size late in the trade0 / 0.0%
First reduction did not take much risk off0 / 0.0%
Many adds before one large exit1 / 11.1%
Reduced after price was against the entry3 / 33.3%

Top Execution Strengths

total 24
Closed the trade cleanly8 / 33.3%
Reduced at favorable prices6 / 25.0%
Clean entry and full exit4 / 16.7%
Structured partial exits2 / 8.3%
Controlled scale-in2 / 8.3%
Reduced risk early1 / 4.2%
Consistent position sizing1 / 4.2%

Risk Categories

Position Construction1 / 12.5%
Size Discipline1 / 12.5%
Risk Reduction1 / 12.5%
Exit Structure2 / 25.0%
P/L3 / 37.5%

Strength Categories

Position Construction4 / 16.7%
Size Discipline3 / 12.5%
Risk Reduction1 / 4.2%
Exit Structure10 / 41.7%
P/L6 / 25.0%

Trade Duration

total 9
< 1m1 / 11.1%
15m-60m7 / 77.8%
> 60m1 / 11.1%

Closed Flat / Left Open

9
trades
Closed Flat8 / 88.9%
Left Open1 / 11.1%

Trade Rows

TradeDirectionSessionGross P/LPrimaryTop RiskTop StrengthWarnings
#1 ABCD
2 executions
long
2026-05-01
market_open
+50.00Clean entry and full exitNoneClean entry and full exitNone
#2 ABCD
2 executions
long
2026-05-01
midday
-42.00Reduced after price was against the entryReduced after price was against the entryClean entry and full exitNone
#3 EFGH
2 executions
short
2026-05-01
market_open
+44.00Clean entry and full exitNoneClean entry and full exitNone
#4 EFGH
2 executions
short
2026-05-01
midday
-78.00Reduced after price was against the entryReduced after price was against the entryClean entry and full exitNone
#5 ABCD
2 executions
long
2026-05-01
midday
+10.40Trade was left openTrade was left openReduced at favorable pricesexecutions: Execution sequence leaves an open position; full-exit patterns may not apply.
#6 ABCD
3 executions
long
2026-05-01
market_open
+66.00Structured partial exitsNoneStructured partial exitsNone
#7 ABCD
5 executions
long
2026-05-01
market_open
-400.00NoneNoneClosed the trade cleanlyNone
#8 ABCD
3 executions
long
2026-05-01
market_open
+110.40Inconsistent position sizingInconsistent position sizingControlled scale-inNone
#9 ABCD
4 executions
long
2026-05-01
market_open
+3.50NoneNoneStructured partial exitsNone

Warnings

executions: Execution sequence leaves an open position; full-exit patterns may not apply.
Debug Raw JSON
{
  "contractVersion": "trader_analytics_report_v1",
  "dataSource": "execution_feedback_summaries",
  "inputMode": "raw_trade_requests",
  "source": "page:/debug/trader-analytics/sample",
  "generatedAt": "2026-06-28T14:52:29.240Z",
  "sampleSize": {
    "requestCount": 9,
    "validatedTradeCount": 9,
    "completedTradeCount": 9,
    "failedTradeCount": 0,
    "validatedOnlyCount": 0,
    "warningCount": 2,
    "symbols": [
      "ABCD",
      "EFGH"
    ],
    "sessionBuckets": [
      "market_open",
      "midday"
    ],
    "tradeDirections": [
      "long",
      "short"
    ],
    "sessionDateRange": {
      "firstSessionDate": "2026-05-01",
      "lastSessionDate": "2026-05-01"
    }
  },
  "pnl": {
    "grossTotalRealizedPnl": -235.70005,
    "grossAverageRealizedPnl": -26.188894,
    "grossMedianRealizedPnl": 10.4,
    "grossWinnerCount": 6,
    "grossLoserCount": 3,
    "grossFlatCount": 0,
    "grossWinRate": 0.666667,
    "bestGrossTrade": {
      "tradeIndex": 8,
      "requestIndex": 7,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "grossRealizedPnl": 110.4
    },
    "worstGrossTrade": {
      "tradeIndex": 7,
      "requestIndex": 6,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "grossRealizedPnl": -400
    },
    "commissionsAndFeesIncluded": false
  },
  "timeOfDay": {
    "entrySessionBuckets": [
      {
        "id": "market_open",
        "label": "market_open",
        "tradeCount": 6,
        "grossTotalRealizedPnl": -126.10005,
        "grossAverageRealizedPnl": -21.016675,
        "grossMedianRealizedPnl": 47,
        "grossAbsoluteRealizedPnl": 673.89995,
        "grossWinnerCount": 5,
        "grossLoserCount": 1,
        "grossFlatCount": 0,
        "grossWinRate": 0.833333,
        "largestWinner": {
          "tradeIndex": 8,
          "requestIndex": 7,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 110.4
        },
        "largestLoser": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.59356,
        "sampleSizeLabel": "limited",
        "conclusion": {
          "kind": "mixed",
          "confidence": "low",
          "summary": "Mixed timing evidence; use this as a review prompt."
        }
      },
      {
        "id": "midday",
        "label": "midday",
        "tradeCount": 3,
        "grossTotalRealizedPnl": -109.6,
        "grossAverageRealizedPnl": -36.533333,
        "grossMedianRealizedPnl": -42,
        "grossAbsoluteRealizedPnl": 130.4,
        "grossWinnerCount": 1,
        "grossLoserCount": 2,
        "grossFlatCount": 0,
        "grossWinRate": 0.333333,
        "largestWinner": {
          "tradeIndex": 5,
          "requestIndex": 4,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 10.4
        },
        "largestLoser": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.59816,
        "sampleSizeLabel": "insufficient",
        "conclusion": {
          "kind": "insufficient_sample",
          "confidence": "low",
          "summary": "Not enough trades for a timing pattern yet."
        }
      }
    ],
    "entryHoursEt": [
      {
        "id": "09",
        "label": "09:00-09:59 ET",
        "tradeCount": 6,
        "grossTotalRealizedPnl": -126.10005,
        "grossAverageRealizedPnl": -21.016675,
        "grossMedianRealizedPnl": 47,
        "grossAbsoluteRealizedPnl": 673.89995,
        "grossWinnerCount": 5,
        "grossLoserCount": 1,
        "grossFlatCount": 0,
        "grossWinRate": 0.833333,
        "largestWinner": {
          "tradeIndex": 8,
          "requestIndex": 7,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 110.4
        },
        "largestLoser": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.59356,
        "sampleSizeLabel": "limited",
        "conclusion": {
          "kind": "mixed",
          "confidence": "low",
          "summary": "Mixed timing evidence; use this as a review prompt."
        }
      },
      {
        "id": "11",
        "label": "11:00-11:59 ET",
        "tradeCount": 2,
        "grossTotalRealizedPnl": -120,
        "grossAverageRealizedPnl": -60,
        "grossMedianRealizedPnl": -60,
        "grossAbsoluteRealizedPnl": 120,
        "grossWinnerCount": 0,
        "grossLoserCount": 2,
        "grossFlatCount": 0,
        "grossWinRate": 0,
        "largestWinner": null,
        "largestLoser": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.65,
        "sampleSizeLabel": "insufficient",
        "conclusion": {
          "kind": "insufficient_sample",
          "confidence": "low",
          "summary": "Not enough trades for a timing pattern yet."
        }
      },
      {
        "id": "14",
        "label": "14:00-14:59 ET",
        "tradeCount": 1,
        "grossTotalRealizedPnl": 10.4,
        "grossAverageRealizedPnl": 10.4,
        "grossMedianRealizedPnl": 10.4,
        "grossAbsoluteRealizedPnl": 10.4,
        "grossWinnerCount": 1,
        "grossLoserCount": 0,
        "grossFlatCount": 0,
        "grossWinRate": 1,
        "largestWinner": {
          "tradeIndex": 5,
          "requestIndex": 4,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 10.4
        },
        "largestLoser": null,
        "largestAbsoluteTrade": {
          "tradeIndex": 5,
          "requestIndex": 4,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 10.4
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 1,
        "sampleSizeLabel": "insufficient",
        "conclusion": {
          "kind": "insufficient_sample",
          "confidence": "low",
          "summary": "Not enough trades for a timing pattern yet."
        }
      }
    ],
    "heldSessionBuckets": [
      {
        "id": "market_open",
        "label": "market_open",
        "tradeCount": 6,
        "grossTotalRealizedPnl": -126.10005,
        "grossAverageRealizedPnl": -21.016675,
        "grossMedianRealizedPnl": 47,
        "grossAbsoluteRealizedPnl": 673.89995,
        "grossWinnerCount": 5,
        "grossLoserCount": 1,
        "grossFlatCount": 0,
        "grossWinRate": 0.833333,
        "largestWinner": {
          "tradeIndex": 8,
          "requestIndex": 7,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 110.4
        },
        "largestLoser": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 7,
          "requestIndex": 6,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": -400
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.59356,
        "sampleSizeLabel": "limited",
        "conclusion": {
          "kind": "mixed",
          "confidence": "low",
          "summary": "Mixed timing evidence; use this as a review prompt."
        }
      },
      {
        "id": "midday",
        "label": "midday",
        "tradeCount": 3,
        "grossTotalRealizedPnl": -109.6,
        "grossAverageRealizedPnl": -36.533333,
        "grossMedianRealizedPnl": -42,
        "grossAbsoluteRealizedPnl": 130.4,
        "grossWinnerCount": 1,
        "grossLoserCount": 2,
        "grossFlatCount": 0,
        "grossWinRate": 0.333333,
        "largestWinner": {
          "tradeIndex": 5,
          "requestIndex": 4,
          "symbol": "ABCD",
          "tradeDirection": "long",
          "grossRealizedPnl": 10.4
        },
        "largestLoser": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTrade": {
          "tradeIndex": 4,
          "requestIndex": 3,
          "symbol": "EFGH",
          "tradeDirection": "short",
          "grossRealizedPnl": -78
        },
        "largestAbsoluteTradeShareOfAbsolutePnl": 0.59816,
        "sampleSizeLabel": "insufficient",
        "conclusion": {
          "kind": "insufficient_sample",
          "confidence": "low",
          "summary": "Not enough trades for a timing pattern yet."
        }
      }
    ],
    "bestEntrySession": {
      "id": "midday",
      "label": "midday",
      "tradeCount": 3,
      "grossTotalRealizedPnl": -109.6,
      "grossAverageRealizedPnl": -36.533333,
      "grossMedianRealizedPnl": -42,
      "grossAbsoluteRealizedPnl": 130.4,
      "grossWinnerCount": 1,
      "grossLoserCount": 2,
      "grossFlatCount": 0,
      "grossWinRate": 0.333333,
      "largestWinner": {
        "tradeIndex": 5,
        "requestIndex": 4,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": 10.4
      },
      "largestLoser": {
        "tradeIndex": 4,
        "requestIndex": 3,
        "symbol": "EFGH",
        "tradeDirection": "short",
        "grossRealizedPnl": -78
      },
      "largestAbsoluteTrade": {
        "tradeIndex": 4,
        "requestIndex": 3,
        "symbol": "EFGH",
        "tradeDirection": "short",
        "grossRealizedPnl": -78
      },
      "largestAbsoluteTradeShareOfAbsolutePnl": 0.59816,
      "sampleSizeLabel": "insufficient",
      "conclusion": {
        "kind": "insufficient_sample",
        "confidence": "low",
        "summary": "Not enough trades for a timing pattern yet."
      }
    },
    "worstEntrySession": {
      "id": "market_open",
      "label": "market_open",
      "tradeCount": 6,
      "grossTotalRealizedPnl": -126.10005,
      "grossAverageRealizedPnl": -21.016675,
      "grossMedianRealizedPnl": 47,
      "grossAbsoluteRealizedPnl": 673.89995,
      "grossWinnerCount": 5,
      "grossLoserCount": 1,
      "grossFlatCount": 0,
      "grossWinRate": 0.833333,
      "largestWinner": {
        "tradeIndex": 8,
        "requestIndex": 7,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": 110.4
      },
      "largestLoser": {
        "tradeIndex": 7,
        "requestIndex": 6,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": -400
      },
      "largestAbsoluteTrade": {
        "tradeIndex": 7,
        "requestIndex": 6,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": -400
      },
      "largestAbsoluteTradeShareOfAbsolutePnl": 0.59356,
      "sampleSizeLabel": "limited",
      "conclusion": {
        "kind": "mixed",
        "confidence": "low",
        "summary": "Mixed timing evidence; use this as a review prompt."
      }
    },
    "bestEntryHourEt": {
      "id": "14",
      "label": "14:00-14:59 ET",
      "tradeCount": 1,
      "grossTotalRealizedPnl": 10.4,
      "grossAverageRealizedPnl": 10.4,
      "grossMedianRealizedPnl": 10.4,
      "grossAbsoluteRealizedPnl": 10.4,
      "grossWinnerCount": 1,
      "grossLoserCount": 0,
      "grossFlatCount": 0,
      "grossWinRate": 1,
      "largestWinner": {
        "tradeIndex": 5,
        "requestIndex": 4,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": 10.4
      },
      "largestLoser": null,
      "largestAbsoluteTrade": {
        "tradeIndex": 5,
        "requestIndex": 4,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": 10.4
      },
      "largestAbsoluteTradeShareOfAbsolutePnl": 1,
      "sampleSizeLabel": "insufficient",
      "conclusion": {
        "kind": "insufficient_sample",
        "confidence": "low",
        "summary": "Not enough trades for a timing pattern yet."
      }
    },
    "worstEntryHourEt": {
      "id": "09",
      "label": "09:00-09:59 ET",
      "tradeCount": 6,
      "grossTotalRealizedPnl": -126.10005,
      "grossAverageRealizedPnl": -21.016675,
      "grossMedianRealizedPnl": 47,
      "grossAbsoluteRealizedPnl": 673.89995,
      "grossWinnerCount": 5,
      "grossLoserCount": 1,
      "grossFlatCount": 0,
      "grossWinRate": 0.833333,
      "largestWinner": {
        "tradeIndex": 8,
        "requestIndex": 7,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": 110.4
      },
      "largestLoser": {
        "tradeIndex": 7,
        "requestIndex": 6,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": -400
      },
      "largestAbsoluteTrade": {
        "tradeIndex": 7,
        "requestIndex": 6,
        "symbol": "ABCD",
        "tradeDirection": "long",
        "grossRealizedPnl": -400
      },
      "largestAbsoluteTradeShareOfAbsolutePnl": 0.59356,
      "sampleSizeLabel": "limited",
      "conclusion": {
        "kind": "mixed",
        "confidence": "low",
        "summary": "Mixed timing evidence; use this as a review prompt."
      }
    },
    "entryInsight": "Highest total entry-session result so far is midday. Highest total entry-hour result so far is 14:00-14:59 ET. Lowest total entry-session result so far is market_open. Treat this as a review prompt until the sample is larger.",
    "holdInsight": "No cross-session holds are present in this sample.",
    "sampleSizeWarning": true,
    "crossSessionHolds": {
      "heldPremarketIntoOpenCount": 0,
      "heldOpenIntoMiddayCount": 0,
      "heldMiddayIntoPostmarketCount": 0,
      "heldPostmarketIntoOvernightCount": 0,
      "heldOvernightCount": 0
    }
  },
  "lifecycle": {
    "openPositionTradeCount": 1,
    "closedToFlatTradeCount": 8,
    "openPositionRate": 0.111111,
    "averageMaxPositionSize": 180,
    "averageFinalPositionSize": 6.666667,
    "averageDurationSeconds": 2294.666667,
    "medianDurationSeconds": 2400
  },
  "executionBehavior": {
    "adversePriceAddTradeCount": 1,
    "adversePriceAddRate": 0.111111,
    "multipleAddsBeforeReductionTradeCount": 1,
    "multipleAddsBeforeReductionRate": 0.111111,
    "overbuiltPositionTradeCount": 1,
    "openPositionLeftoverTradeCount": 1,
    "rapidFireExecutionTradeCount": 1,
    "inconsistentShareSizingTradeCount": 1,
    "largeLateAddTradeCount": 0,
    "smallFirstRiskReductionTradeCount": 0,
    "allOrNothingExitAfterManyAddsTradeCount": 1,
    "losingReductionSequenceTradeCount": 3
  },
  "strengths": {
    "cleanSingleEntryFullExitCount": 4,
    "controlledScaleInCount": 2,
    "structuredPartialExitSequenceCount": 2,
    "earlyPositionRiskReductionCount": 1,
    "decisiveFullExitCount": 8,
    "consistentShareSizingCount": 1,
    "profitableReductionSequenceCount": 6
  },
  "distributions": {
    "categories": [
      {
        "category": "position_construction",
        "label": "Position Construction",
        "contextCount": 10,
        "riskCount": 1,
        "strengthCount": 4,
        "primaryFocusCount": 2,
        "totalCount": 17
      },
      {
        "category": "size_discipline",
        "label": "Size Discipline",
        "contextCount": 0,
        "riskCount": 1,
        "strengthCount": 3,
        "primaryFocusCount": 1,
        "totalCount": 5
      },
      {
        "category": "risk_reduction",
        "label": "Risk Reduction",
        "contextCount": 0,
        "riskCount": 1,
        "strengthCount": 1,
        "primaryFocusCount": 0,
        "totalCount": 2
      },
      {
        "category": "exit_structure",
        "label": "Exit Structure",
        "contextCount": 12,
        "riskCount": 2,
        "strengthCount": 10,
        "primaryFocusCount": 2,
        "totalCount": 26
      },
      {
        "category": "timing",
        "label": "Timing",
        "contextCount": 0,
        "riskCount": 0,
        "strengthCount": 0,
        "primaryFocusCount": 0,
        "totalCount": 0
      },
      {
        "category": "pnl",
        "label": "P/L",
        "contextCount": 0,
        "riskCount": 3,
        "strengthCount": 6,
        "primaryFocusCount": 2,
        "totalCount": 11
      }
    ],
    "riskIds": {
      "losing_reduction_sequence": 3,
      "multiple_adds_before_first_reduction": 1,
      "open_position_leftover": 1,
      "overbuilt_position": 1,
      "all_or_nothing_exit_after_many_adds": 1,
      "inconsistent_share_sizing": 1
    },
    "strengthIds": {
      "decisive_full_exit": 8,
      "profitable_reduction_sequence": 6,
      "clean_single_entry_full_exit": 4,
      "structured_partial_exit_sequence": 2,
      "controlled_scale_in": 2,
      "early_position_risk_reduction": 1,
      "consistent_share_sizing": 1
    },
    "primaryFocusIds": {
      "clean_single_entry_full_exit": 2,
      "losing_reduction_sequence": 2,
      "open_position_leftover": 1,
      "structured_partial_exit_sequence": 1,
      "inconsistent_share_sizing": 1
    }
  },
  "topRisks": [
    {
      "id": "losing_reduction_sequence",
      "kind": "risk",
      "category": "pnl",
      "label": "Reduced after price was against the entry",
      "summary": "At least one reduction happened at a price worse than the prior average entry.",
      "behaviorState": "certified_detection",
      "behaviorTone": "warning",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
      "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 65,
      "count": 3,
      "tradeRate": 0.333333
    },
    {
      "id": "multiple_adds_before_first_reduction",
      "kind": "risk",
      "category": "risk_reduction",
      "label": "Added several times before reducing size",
      "summary": "The position kept getting larger before the trade sold or reduced a meaningful amount.",
      "behaviorState": "certified_detection",
      "behaviorTone": "risk",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart evidence can explain whether the trade idea weakened, but it is not required to review the add sequence.",
      "fixFirstAction": "Mark where size had to stop increasing unless the chart had clearly repaired.",
      "severity": "high",
      "confidence": "high",
      "priorityScore": 88,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "open_position_leftover",
      "kind": "risk",
      "category": "exit_structure",
      "label": "Trade was left open",
      "summary": "The import ended while shares were still open, so the trade cannot be judged as a fully closed review yet.",
      "behaviorState": "certified_detection",
      "behaviorTone": "risk",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Later executions may close the position outside the imported window.",
      "fixFirstAction": "Wait for a closing execution or mark the position as still open before using it as a closed-trade lesson.",
      "severity": "high",
      "confidence": "high",
      "priorityScore": 86,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "overbuilt_position",
      "kind": "risk",
      "category": "position_construction",
      "label": "Built too much size in a losing trade",
      "summary": "The position became much larger while the trade later finished as a gross loser.",
      "behaviorState": "certified_detection",
      "behaviorTone": "risk",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Exact avoidable loss needs deeper context; this only flags the size/risk sequence.",
      "fixFirstAction": "Define a maximum add count or maximum size for trades that have not started working.",
      "severity": "high",
      "confidence": "high",
      "priorityScore": 84,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "all_or_nothing_exit_after_many_adds",
      "kind": "risk",
      "category": "exit_structure",
      "label": "Many adds before one large exit",
      "summary": "The trade built size through several adds and then relied on one large exit sequence.",
      "behaviorState": "certified_detection",
      "behaviorTone": "warning",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "The app needs saved review context before deciding whether the exit matched your original plan.",
      "fixFirstAction": "Plan an earlier risk reduction so the trade does not depend on one final exit.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 70,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "inconsistent_share_sizing",
      "kind": "risk",
      "category": "size_discipline",
      "label": "Inconsistent position sizing",
      "summary": "Share size changed enough that risk may have been harder to control consistently.",
      "behaviorState": "certified_detection",
      "behaviorTone": "warning",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "The app needs your intended risk plan before calling any exact size wrong.",
      "fixFirstAction": "Set one sizing rule for similar setups and compare future trades against it.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 60,
      "count": 1,
      "tradeRate": 0.111111
    }
  ],
  "topStrengths": [
    {
      "id": "decisive_full_exit",
      "kind": "strength",
      "category": "exit_structure",
      "label": "Closed the trade cleanly",
      "summary": "The execution sequence includes a clear final exit that returned the position to flat.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart data is needed before saying the exit was near the best part of the move.",
      "fixFirstAction": "Keep closing the trade cleanly when the review plan says the position should be flat.",
      "severity": "low",
      "confidence": "high",
      "priorityScore": 52,
      "count": 8,
      "tradeRate": 0.888889
    },
    {
      "id": "profitable_reduction_sequence",
      "kind": "strength",
      "category": "pnl",
      "label": "Reduced at favorable prices",
      "summary": "Each reduction happened at a favorable price versus the prior average entry.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart data is needed before saying the reductions were near resistance or before a fade.",
      "fixFirstAction": "Keep reducing when the trade has paid you, then write what triggered each reduction.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 58,
      "count": 6,
      "tradeRate": 0.666667
    },
    {
      "id": "clean_single_entry_full_exit",
      "kind": "strength",
      "category": "position_construction",
      "label": "Clean entry and full exit",
      "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
      "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 70,
      "count": 4,
      "tradeRate": 0.444444
    },
    {
      "id": "structured_partial_exit_sequence",
      "kind": "strength",
      "category": "exit_structure",
      "label": "Structured partial exits",
      "summary": "The position was reduced in stages and eventually returned to flat.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart evidence can explain whether those exits matched levels or a fade.",
      "fixFirstAction": "Keep writing down the reason for each partial so the staged exit stays intentional.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 66,
      "count": 2,
      "tradeRate": 0.222222
    },
    {
      "id": "controlled_scale_in",
      "kind": "strength",
      "category": "size_discipline",
      "label": "Controlled scale-in",
      "summary": "The trade added size without adding at an adverse execution price versus the prior average entry.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart data is needed before saying the adds were near support or strength.",
      "fixFirstAction": "Keep requiring the trade to prove itself before adding size.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 64,
      "count": 2,
      "tradeRate": 0.222222
    },
    {
      "id": "early_position_risk_reduction",
      "kind": "strength",
      "category": "risk_reduction",
      "label": "Reduced risk early",
      "summary": "The first reduction happened quickly and took off a meaningful part of the open position.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Market context can explain whether that reduction came before a fade.",
      "fixFirstAction": "Keep using a first reduction that actually changes risk when the trade needs protection.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 63,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "consistent_share_sizing",
      "kind": "strength",
      "category": "size_discipline",
      "label": "Consistent position sizing",
      "summary": "Entry-side execution sizes stayed within a tighter range, making the trade easier to review.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "The app still needs your intended risk plan before judging exact size.",
      "fixFirstAction": "Keep using similar size when the setup and risk are similar.",
      "severity": "low",
      "confidence": "high",
      "priorityScore": 48,
      "count": 1,
      "tradeRate": 0.111111
    }
  ],
  "primaryFocusCounts": [
    {
      "id": "clean_single_entry_full_exit",
      "kind": "strength",
      "category": "position_construction",
      "label": "Clean entry and full exit",
      "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
      "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 70,
      "count": 2,
      "tradeRate": 0.222222
    },
    {
      "id": "losing_reduction_sequence",
      "kind": "risk",
      "category": "pnl",
      "label": "Reduced after price was against the entry",
      "summary": "At least one reduction happened at a price worse than the prior average entry.",
      "behaviorState": "certified_detection",
      "behaviorTone": "warning",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
      "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 65,
      "count": 2,
      "tradeRate": 0.222222
    },
    {
      "id": "open_position_leftover",
      "kind": "risk",
      "category": "exit_structure",
      "label": "Trade was left open",
      "summary": "The import ended while shares were still open, so the trade cannot be judged as a fully closed review yet.",
      "behaviorState": "certified_detection",
      "behaviorTone": "risk",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Later executions may close the position outside the imported window.",
      "fixFirstAction": "Wait for a closing execution or mark the position as still open before using it as a closed-trade lesson.",
      "severity": "high",
      "confidence": "high",
      "priorityScore": 86,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "structured_partial_exit_sequence",
      "kind": "strength",
      "category": "exit_structure",
      "label": "Structured partial exits",
      "summary": "The position was reduced in stages and eventually returned to flat.",
      "behaviorState": "certified_detection",
      "behaviorTone": "strength",
      "opportunityType": "strength_to_repeat",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "Chart evidence can explain whether those exits matched levels or a fade.",
      "fixFirstAction": "Keep writing down the reason for each partial so the staged exit stays intentional.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 66,
      "count": 1,
      "tradeRate": 0.111111
    },
    {
      "id": "inconsistent_share_sizing",
      "kind": "risk",
      "category": "size_discipline",
      "label": "Inconsistent position sizing",
      "summary": "Share size changed enough that risk may have been harder to control consistently.",
      "behaviorState": "certified_detection",
      "behaviorTone": "warning",
      "opportunityType": "risk_to_reduce",
      "evidenceChannel": "execution_only",
      "canDrivePrimaryConclusion": true,
      "missingDataSentence": "The app needs your intended risk plan before calling any exact size wrong.",
      "fixFirstAction": "Set one sizing rule for similar setups and compare future trades against it.",
      "severity": "moderate",
      "confidence": "high",
      "priorityScore": 60,
      "count": 1,
      "tradeRate": 0.111111
    }
  ],
  "trades": [
    {
      "tradeIndex": 1,
      "requestIndex": 0,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:35:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:35:00.000Z",
          "endTimestamp": "2026-05-01T14:00:00.000Z",
          "durationMinutes": 25
        },
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 10,
          "hourLabelEt": "10:00-10:59 ET",
          "startTimestamp": "2026-05-01T14:00:00.000Z",
          "endTimestamp": "2026-05-01T14:20:00.000Z",
          "durationMinutes": 20
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET",
        "10:00-10:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 2,
      "grossRealizedPnl": 50,
      "grossRealizedPnlPctOfEntryNotional": 0.05,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 100,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 1,
      "durationSeconds": 2700,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "topRisk": null,
      "topStrength": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "warnings": []
    },
    {
      "tradeIndex": 2,
      "requestIndex": 1,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "midday",
      "entrySessionBucket": "midday",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 11:10:00 ET",
      "entryHourEt": 11,
      "entryHourLabelEt": "11:00-11:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "midday",
          "sessionDateEt": "2026-05-01",
          "hourEt": 11,
          "hourLabelEt": "11:00-11:59 ET",
          "startTimestamp": "2026-05-01T15:10:00.000Z",
          "endTimestamp": "2026-05-01T15:50:00.000Z",
          "durationMinutes": 40
        }
      ],
      "heldSessionBuckets": [
        "midday"
      ],
      "heldHourBucketsEt": [
        "11:00-11:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 2,
      "grossRealizedPnl": -42,
      "grossRealizedPnlPctOfEntryNotional": -0.027451,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 150,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 1,
      "durationSeconds": 2400,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "losing_reduction_sequence",
        "kind": "risk",
        "category": "pnl",
        "label": "Reduced after price was against the entry",
        "summary": "At least one reduction happened at a price worse than the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
        "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 65
      },
      "topRisk": {
        "id": "losing_reduction_sequence",
        "kind": "risk",
        "category": "pnl",
        "label": "Reduced after price was against the entry",
        "summary": "At least one reduction happened at a price worse than the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
        "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 65
      },
      "topStrength": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "warnings": []
    },
    {
      "tradeIndex": 3,
      "requestIndex": 2,
      "symbol": "EFGH",
      "tradeDirection": "short",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:40:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:40:00.000Z",
          "endTimestamp": "2026-05-01T14:00:00.000Z",
          "durationMinutes": 20
        },
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 10,
          "hourLabelEt": "10:00-10:59 ET",
          "startTimestamp": "2026-05-01T14:00:00.000Z",
          "endTimestamp": "2026-05-01T14:28:00.000Z",
          "durationMinutes": 28
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET",
        "10:00-10:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 2,
      "grossRealizedPnl": 44,
      "grossRealizedPnlPctOfEntryNotional": 0.027363,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 80,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 1,
      "durationSeconds": 2880,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "topRisk": null,
      "topStrength": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "warnings": []
    },
    {
      "tradeIndex": 4,
      "requestIndex": 3,
      "symbol": "EFGH",
      "tradeDirection": "short",
      "sessionDate": "2026-05-01",
      "sessionBucket": "midday",
      "entrySessionBucket": "midday",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 11:10:00 ET",
      "entryHourEt": 11,
      "entryHourLabelEt": "11:00-11:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "midday",
          "sessionDateEt": "2026-05-01",
          "hourEt": 11,
          "hourLabelEt": "11:00-11:59 ET",
          "startTimestamp": "2026-05-01T15:10:00.000Z",
          "endTimestamp": "2026-05-01T15:45:00.000Z",
          "durationMinutes": 35
        }
      ],
      "heldSessionBuckets": [
        "midday"
      ],
      "heldHourBucketsEt": [
        "11:00-11:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 2,
      "grossRealizedPnl": -78,
      "grossRealizedPnlPctOfEntryNotional": -0.0325,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 120,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 1,
      "durationSeconds": 2100,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "losing_reduction_sequence",
        "kind": "risk",
        "category": "pnl",
        "label": "Reduced after price was against the entry",
        "summary": "At least one reduction happened at a price worse than the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
        "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 65
      },
      "topRisk": {
        "id": "losing_reduction_sequence",
        "kind": "risk",
        "category": "pnl",
        "label": "Reduced after price was against the entry",
        "summary": "At least one reduction happened at a price worse than the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Market context is needed before saying the chart failed or support broke.",
        "fixFirstAction": "Replay the hold before that reduction and decide where risk should have been reduced sooner.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 65
      },
      "topStrength": {
        "id": "clean_single_entry_full_exit",
        "kind": "strength",
        "category": "position_construction",
        "label": "Clean entry and full exit",
        "summary": "The trade used one entry-side execution and one full exit, which makes the decision path easy to review.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can judge setup quality, but the clean execution structure is visible from executions.",
        "fixFirstAction": "Keep this simple structure when the setup does not need extra adds or partials.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 70
      },
      "warnings": []
    },
    {
      "tradeIndex": 5,
      "requestIndex": 4,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "midday",
      "entrySessionBucket": "midday",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 14:45:00 ET",
      "entryHourEt": 14,
      "entryHourLabelEt": "14:00-14:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "midday",
          "sessionDateEt": "2026-05-01",
          "hourEt": 14,
          "hourLabelEt": "14:00-14:59 ET",
          "startTimestamp": "2026-05-01T18:45:00.000Z",
          "endTimestamp": "2026-05-01T19:00:00.000Z",
          "durationMinutes": 15
        },
        {
          "sessionBucket": "midday",
          "sessionDateEt": "2026-05-01",
          "hourEt": 15,
          "hourLabelEt": "15:00-15:59 ET",
          "startTimestamp": "2026-05-01T19:00:00.000Z",
          "endTimestamp": "2026-05-01T19:20:00.000Z",
          "durationMinutes": 20
        }
      ],
      "heldSessionBuckets": [
        "midday"
      ],
      "heldHourBucketsEt": [
        "14:00-14:59 ET",
        "15:00-15:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 2,
      "grossRealizedPnl": 10.4,
      "grossRealizedPnlPctOfEntryNotional": 0.010297,
      "closedToFlat": false,
      "isOpenPosition": true,
      "maxPositionSize": 100,
      "finalPositionSize": 60,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 1,
      "durationSeconds": 2100,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "open_position_leftover",
        "kind": "risk",
        "category": "exit_structure",
        "label": "Trade was left open",
        "summary": "The import ended while shares were still open, so the trade cannot be judged as a fully closed review yet.",
        "behaviorState": "certified_detection",
        "behaviorTone": "risk",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Later executions may close the position outside the imported window.",
        "fixFirstAction": "Wait for a closing execution or mark the position as still open before using it as a closed-trade lesson.",
        "severity": "high",
        "confidence": "high",
        "priorityScore": 86
      },
      "topRisk": {
        "id": "open_position_leftover",
        "kind": "risk",
        "category": "exit_structure",
        "label": "Trade was left open",
        "summary": "The import ended while shares were still open, so the trade cannot be judged as a fully closed review yet.",
        "behaviorState": "certified_detection",
        "behaviorTone": "risk",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Later executions may close the position outside the imported window.",
        "fixFirstAction": "Wait for a closing execution or mark the position as still open before using it as a closed-trade lesson.",
        "severity": "high",
        "confidence": "high",
        "priorityScore": 86
      },
      "topStrength": {
        "id": "profitable_reduction_sequence",
        "kind": "strength",
        "category": "pnl",
        "label": "Reduced at favorable prices",
        "summary": "Each reduction happened at a favorable price versus the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart data is needed before saying the reductions were near resistance or before a fade.",
        "fixFirstAction": "Keep reducing when the trade has paid you, then write what triggered each reduction.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 58
      },
      "warnings": [
        "executions: Execution sequence leaves an open position; full-exit patterns may not apply."
      ]
    },
    {
      "tradeIndex": 6,
      "requestIndex": 5,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:33:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:33:00.000Z",
          "endTimestamp": "2026-05-01T14:00:00.000Z",
          "durationMinutes": 27
        },
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 10,
          "hourLabelEt": "10:00-10:59 ET",
          "startTimestamp": "2026-05-01T14:00:00.000Z",
          "endTimestamp": "2026-05-01T14:35:00.000Z",
          "durationMinutes": 35
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET",
        "10:00-10:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 3,
      "grossRealizedPnl": 66,
      "grossRealizedPnlPctOfEntryNotional": 0.033,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 200,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 0,
      "reductionCount": 2,
      "durationSeconds": 3720,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "structured_partial_exit_sequence",
        "kind": "strength",
        "category": "exit_structure",
        "label": "Structured partial exits",
        "summary": "The position was reduced in stages and eventually returned to flat.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can explain whether those exits matched levels or a fade.",
        "fixFirstAction": "Keep writing down the reason for each partial so the staged exit stays intentional.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 66
      },
      "topRisk": null,
      "topStrength": {
        "id": "structured_partial_exit_sequence",
        "kind": "strength",
        "category": "exit_structure",
        "label": "Structured partial exits",
        "summary": "The position was reduced in stages and eventually returned to flat.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can explain whether those exits matched levels or a fade.",
        "fixFirstAction": "Keep writing down the reason for each partial so the staged exit stays intentional.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 66
      },
      "warnings": []
    },
    {
      "tradeIndex": 7,
      "requestIndex": 6,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:30:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:30:00.000Z",
          "endTimestamp": "2026-05-01T14:00:00.000Z",
          "durationMinutes": 30
        },
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 10,
          "hourLabelEt": "10:00-10:59 ET",
          "startTimestamp": "2026-05-01T14:00:00.000Z",
          "endTimestamp": "2026-05-01T14:05:00.000Z",
          "durationMinutes": 5
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET",
        "10:00-10:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 5,
      "grossRealizedPnl": -400,
      "grossRealizedPnlPctOfEntryNotional": -0.108108,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 400,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 3,
      "reductionCount": 1,
      "durationSeconds": 2100,
      "adversePriceAddCount": 3,
      "primaryFocus": null,
      "topRisk": null,
      "topStrength": {
        "id": "decisive_full_exit",
        "kind": "strength",
        "category": "exit_structure",
        "label": "Closed the trade cleanly",
        "summary": "The execution sequence includes a clear final exit that returned the position to flat.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart data is needed before saying the exit was near the best part of the move.",
        "fixFirstAction": "Keep closing the trade cleanly when the review plan says the position should be flat.",
        "severity": "low",
        "confidence": "high",
        "priorityScore": 52
      },
      "warnings": []
    },
    {
      "tradeIndex": 8,
      "requestIndex": 7,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:31:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:31:00.000Z",
          "endTimestamp": "2026-05-01T14:00:00.000Z",
          "durationMinutes": 29
        },
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 10,
          "hourLabelEt": "10:00-10:59 ET",
          "startTimestamp": "2026-05-01T14:00:00.000Z",
          "endTimestamp": "2026-05-01T14:15:00.000Z",
          "durationMinutes": 15
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET",
        "10:00-10:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 3,
      "grossRealizedPnl": 110.4,
      "grossRealizedPnlPctOfEntryNotional": 0.034483,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 320,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 1,
      "reductionCount": 1,
      "durationSeconds": 2640,
      "adversePriceAddCount": 0,
      "primaryFocus": {
        "id": "inconsistent_share_sizing",
        "kind": "risk",
        "category": "size_discipline",
        "label": "Inconsistent position sizing",
        "summary": "Share size changed enough that risk may have been harder to control consistently.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "The app needs your intended risk plan before calling any exact size wrong.",
        "fixFirstAction": "Set one sizing rule for similar setups and compare future trades against it.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 60
      },
      "topRisk": {
        "id": "inconsistent_share_sizing",
        "kind": "risk",
        "category": "size_discipline",
        "label": "Inconsistent position sizing",
        "summary": "Share size changed enough that risk may have been harder to control consistently.",
        "behaviorState": "certified_detection",
        "behaviorTone": "warning",
        "opportunityType": "risk_to_reduce",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "The app needs your intended risk plan before calling any exact size wrong.",
        "fixFirstAction": "Set one sizing rule for similar setups and compare future trades against it.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 60
      },
      "topStrength": {
        "id": "controlled_scale_in",
        "kind": "strength",
        "category": "size_discipline",
        "label": "Controlled scale-in",
        "summary": "The trade added size without adding at an adverse execution price versus the prior average entry.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart data is needed before saying the adds were near support or strength.",
        "fixFirstAction": "Keep requiring the trade to prove itself before adding size.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 64
      },
      "warnings": []
    },
    {
      "tradeIndex": 9,
      "requestIndex": 8,
      "symbol": "ABCD",
      "tradeDirection": "long",
      "sessionDate": "2026-05-01",
      "sessionBucket": "market_open",
      "entrySessionBucket": "market_open",
      "entrySessionDateEt": "2026-05-01",
      "entryTimeEt": "2026-05-01 09:30:00 ET",
      "entryHourEt": 9,
      "entryHourLabelEt": "09:00-09:59 ET",
      "sessionExposure": [
        {
          "sessionBucket": "market_open",
          "sessionDateEt": "2026-05-01",
          "hourEt": 9,
          "hourLabelEt": "09:00-09:59 ET",
          "startTimestamp": "2026-05-01T13:30:00.000Z",
          "endTimestamp": "2026-05-01T13:30:12.000Z",
          "durationMinutes": 0.2
        }
      ],
      "heldSessionBuckets": [
        "market_open"
      ],
      "heldHourBucketsEt": [
        "09:00-09:59 ET"
      ],
      "heldPremarketIntoOpen": false,
      "heldOpenIntoMidday": false,
      "heldMiddayIntoPostmarket": false,
      "heldPostmarketIntoOvernight": false,
      "heldOvernight": false,
      "executionCount": 4,
      "grossRealizedPnl": 3.49995,
      "grossRealizedPnlPctOfEntryNotional": 0.002332,
      "closedToFlat": true,
      "isOpenPosition": false,
      "maxPositionSize": 150,
      "finalPositionSize": 0,
      "addCountAfterInitialEntry": 1,
      "reductionCount": 2,
      "durationSeconds": 12,
      "adversePriceAddCount": 0,
      "primaryFocus": null,
      "topRisk": null,
      "topStrength": {
        "id": "structured_partial_exit_sequence",
        "kind": "strength",
        "category": "exit_structure",
        "label": "Structured partial exits",
        "summary": "The position was reduced in stages and eventually returned to flat.",
        "behaviorState": "certified_detection",
        "behaviorTone": "strength",
        "opportunityType": "strength_to_repeat",
        "evidenceChannel": "execution_only",
        "canDrivePrimaryConclusion": true,
        "missingDataSentence": "Chart evidence can explain whether those exits matched levels or a fade.",
        "fixFirstAction": "Keep writing down the reason for each partial so the staged exit stays intentional.",
        "severity": "moderate",
        "confidence": "high",
        "priorityScore": 66
      },
      "warnings": []
    }
  ],
  "charts": {
    "grossPnlByTrade": {
      "id": "gross_pnl_by_trade",
      "kind": "bar",
      "title": "Gross P/L By Trade",
      "total": -235.70005,
      "empty": false,
      "data": [
        {
          "id": "trade_1",
          "label": "#1 ABCD",
          "value": 50,
          "pctOfTotal": null,
          "category": "long",
          "tone": "positive"
        },
        {
          "id": "trade_2",
          "label": "#2 ABCD",
          "value": -42,
          "pctOfTotal": null,
          "category": "long",
          "tone": "negative"
        },
        {
          "id": "trade_3",
          "label": "#3 EFGH",
          "value": 44,
          "pctOfTotal": null,
          "category": "short",
          "tone": "positive"
        },
        {
          "id": "trade_4",
          "label": "#4 EFGH",
          "value": -78,
          "pctOfTotal": null,
          "category": "short",
          "tone": "negative"
        },
        {
          "id": "trade_5",
          "label": "#5 ABCD",
          "value": 10.4,
          "pctOfTotal": null,
          "category": "long",
          "tone": "positive"
        },
        {
          "id": "trade_6",
          "label": "#6 ABCD",
          "value": 66,
          "pctOfTotal": null,
          "category": "long",
          "tone": "positive"
        },
        {
          "id": "trade_7",
          "label": "#7 ABCD",
          "value": -400,
          "pctOfTotal": null,
          "category": "long",
          "tone": "negative"
        },
        {
          "id": "trade_8",
          "label": "#8 ABCD",
          "value": 110.4,
          "pctOfTotal": null,
          "category": "long",
          "tone": "positive"
        },
        {
          "id": "trade_9",
          "label": "#9 ABCD",
          "value": 3.49995,
          "pctOfTotal": null,
          "category": "long",
          "tone": "positive"
        }
      ]
    },
    "winLossDonut": {
      "id": "gross_win_loss_flat",
      "kind": "donut",
      "title": "Gross Win / Loss / Flat",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "gross_winners",
          "label": "Winners",
          "value": 6,
          "pctOfTotal": 0.666667,
          "tone": "positive"
        },
        {
          "id": "gross_losers",
          "label": "Losers",
          "value": 3,
          "pctOfTotal": 0.333333,
          "tone": "negative"
        },
        {
          "id": "gross_flat",
          "label": "Flat",
          "value": 0,
          "pctOfTotal": 0,
          "tone": "neutral"
        }
      ]
    },
    "openClosedDonut": {
      "id": "open_closed_lifecycle",
      "kind": "donut",
      "title": "Closed Flat / Left Open",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "closed_to_flat",
          "label": "Closed Flat",
          "value": 8,
          "pctOfTotal": 0.888889,
          "tone": "positive"
        },
        {
          "id": "open_position",
          "label": "Left Open",
          "value": 1,
          "pctOfTotal": 0.111111,
          "tone": "warning"
        }
      ]
    },
    "topRisksBar": {
      "id": "top_risks",
      "kind": "bar",
      "title": "Top Execution Risks",
      "total": 8,
      "empty": false,
      "data": [
        {
          "id": "losing_reduction_sequence",
          "label": "Reduced after price was against the entry",
          "value": 3,
          "pctOfTotal": 0.375,
          "category": "pnl",
          "tone": "warning"
        },
        {
          "id": "multiple_adds_before_first_reduction",
          "label": "Added several times before reducing size",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "risk_reduction",
          "tone": "negative"
        },
        {
          "id": "open_position_leftover",
          "label": "Trade was left open",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "exit_structure",
          "tone": "negative"
        },
        {
          "id": "overbuilt_position",
          "label": "Built too much size in a losing trade",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "position_construction",
          "tone": "negative"
        },
        {
          "id": "all_or_nothing_exit_after_many_adds",
          "label": "Many adds before one large exit",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "exit_structure",
          "tone": "warning"
        },
        {
          "id": "inconsistent_share_sizing",
          "label": "Inconsistent position sizing",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "size_discipline",
          "tone": "warning"
        }
      ]
    },
    "topStrengthsBar": {
      "id": "top_strengths",
      "kind": "bar",
      "title": "Top Execution Strengths",
      "total": 24,
      "empty": false,
      "data": [
        {
          "id": "decisive_full_exit",
          "label": "Closed the trade cleanly",
          "value": 8,
          "pctOfTotal": 0.333333,
          "category": "exit_structure",
          "tone": "positive"
        },
        {
          "id": "profitable_reduction_sequence",
          "label": "Reduced at favorable prices",
          "value": 6,
          "pctOfTotal": 0.25,
          "category": "pnl",
          "tone": "positive"
        },
        {
          "id": "clean_single_entry_full_exit",
          "label": "Clean entry and full exit",
          "value": 4,
          "pctOfTotal": 0.166667,
          "category": "position_construction",
          "tone": "positive"
        },
        {
          "id": "structured_partial_exit_sequence",
          "label": "Structured partial exits",
          "value": 2,
          "pctOfTotal": 0.083333,
          "category": "exit_structure",
          "tone": "positive"
        },
        {
          "id": "controlled_scale_in",
          "label": "Controlled scale-in",
          "value": 2,
          "pctOfTotal": 0.083333,
          "category": "size_discipline",
          "tone": "positive"
        },
        {
          "id": "early_position_risk_reduction",
          "label": "Reduced risk early",
          "value": 1,
          "pctOfTotal": 0.041667,
          "category": "risk_reduction",
          "tone": "positive"
        },
        {
          "id": "consistent_share_sizing",
          "label": "Consistent position sizing",
          "value": 1,
          "pctOfTotal": 0.041667,
          "category": "size_discipline",
          "tone": "positive"
        }
      ]
    },
    "primaryFocusDistribution": {
      "id": "primary_focus_distribution",
      "kind": "distribution",
      "title": "Primary Focus Distribution",
      "total": 7,
      "empty": false,
      "data": [
        {
          "id": "clean_single_entry_full_exit",
          "label": "Clean entry and full exit",
          "value": 2,
          "pctOfTotal": 0.285714,
          "category": "position_construction",
          "tone": "positive"
        },
        {
          "id": "losing_reduction_sequence",
          "label": "Reduced after price was against the entry",
          "value": 2,
          "pctOfTotal": 0.285714,
          "category": "pnl",
          "tone": "warning"
        },
        {
          "id": "open_position_leftover",
          "label": "Trade was left open",
          "value": 1,
          "pctOfTotal": 0.142857,
          "category": "exit_structure",
          "tone": "negative"
        },
        {
          "id": "structured_partial_exit_sequence",
          "label": "Structured partial exits",
          "value": 1,
          "pctOfTotal": 0.142857,
          "category": "exit_structure",
          "tone": "positive"
        },
        {
          "id": "inconsistent_share_sizing",
          "label": "Inconsistent position sizing",
          "value": 1,
          "pctOfTotal": 0.142857,
          "category": "size_discipline",
          "tone": "warning"
        }
      ]
    },
    "riskCategoryDistribution": {
      "id": "risk_category_distribution",
      "kind": "bar",
      "title": "Risk Categories",
      "total": 8,
      "empty": false,
      "data": [
        {
          "id": "position_construction",
          "label": "Position Construction",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "position_construction",
          "tone": "warning"
        },
        {
          "id": "size_discipline",
          "label": "Size Discipline",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "size_discipline",
          "tone": "warning"
        },
        {
          "id": "risk_reduction",
          "label": "Risk Reduction",
          "value": 1,
          "pctOfTotal": 0.125,
          "category": "risk_reduction",
          "tone": "warning"
        },
        {
          "id": "exit_structure",
          "label": "Exit Structure",
          "value": 2,
          "pctOfTotal": 0.25,
          "category": "exit_structure",
          "tone": "warning"
        },
        {
          "id": "pnl",
          "label": "P/L",
          "value": 3,
          "pctOfTotal": 0.375,
          "category": "pnl",
          "tone": "warning"
        }
      ]
    },
    "strengthCategoryDistribution": {
      "id": "strength_category_distribution",
      "kind": "bar",
      "title": "Strength Categories",
      "total": 24,
      "empty": false,
      "data": [
        {
          "id": "position_construction",
          "label": "Position Construction",
          "value": 4,
          "pctOfTotal": 0.166667,
          "category": "position_construction",
          "tone": "positive"
        },
        {
          "id": "size_discipline",
          "label": "Size Discipline",
          "value": 3,
          "pctOfTotal": 0.125,
          "category": "size_discipline",
          "tone": "positive"
        },
        {
          "id": "risk_reduction",
          "label": "Risk Reduction",
          "value": 1,
          "pctOfTotal": 0.041667,
          "category": "risk_reduction",
          "tone": "positive"
        },
        {
          "id": "exit_structure",
          "label": "Exit Structure",
          "value": 10,
          "pctOfTotal": 0.416667,
          "category": "exit_structure",
          "tone": "positive"
        },
        {
          "id": "pnl",
          "label": "P/L",
          "value": 6,
          "pctOfTotal": 0.25,
          "category": "pnl",
          "tone": "positive"
        }
      ]
    },
    "durationHistogram": {
      "id": "duration_histogram",
      "kind": "histogram",
      "title": "Trade Duration",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "under_1m",
          "label": "< 1m",
          "value": 1,
          "pctOfTotal": 0.111111,
          "tone": "info"
        },
        {
          "id": "15m_to_60m",
          "label": "15m-60m",
          "value": 7,
          "pctOfTotal": 0.777778,
          "tone": "info"
        },
        {
          "id": "over_60m",
          "label": "> 60m",
          "value": 1,
          "pctOfTotal": 0.111111,
          "tone": "info"
        }
      ]
    },
    "behaviorRiskRates": {
      "id": "behavior_risk_rates",
      "kind": "bar",
      "title": "Key Execution Risk Rates",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "size_expansion_after_adverse_price",
          "label": "Review adds that need chart data",
          "value": 1,
          "category": "Review prompt",
          "tone": "info",
          "pctOfTotal": 0.111111
        },
        {
          "id": "multiple_adds_before_first_reduction",
          "label": "Added several times before reducing size",
          "value": 1,
          "category": "Certified execution evidence",
          "tone": "warning",
          "pctOfTotal": 0.111111
        },
        {
          "id": "open_position_leftover",
          "label": "Trade was left open",
          "value": 1,
          "category": "Certified execution evidence",
          "tone": "warning",
          "pctOfTotal": 0.111111
        },
        {
          "id": "rapid_fire_execution_cluster",
          "label": "Review fast execution clusters",
          "value": 1,
          "category": "Review prompt",
          "tone": "info",
          "pctOfTotal": 0.111111
        },
        {
          "id": "inconsistent_share_sizing",
          "label": "Inconsistent position sizing",
          "value": 1,
          "category": "Certified execution evidence",
          "tone": "warning",
          "pctOfTotal": 0.111111
        },
        {
          "id": "large_late_add",
          "label": "Added meaningful size late in the trade",
          "value": 0,
          "category": "Certified execution evidence",
          "tone": "neutral",
          "pctOfTotal": 0
        },
        {
          "id": "small_first_risk_reduction",
          "label": "First reduction did not take much risk off",
          "value": 0,
          "category": "Certified execution evidence",
          "tone": "neutral",
          "pctOfTotal": 0
        },
        {
          "id": "all_or_nothing_exit_after_many_adds",
          "label": "Many adds before one large exit",
          "value": 1,
          "category": "Certified execution evidence",
          "tone": "warning",
          "pctOfTotal": 0.111111
        },
        {
          "id": "losing_reduction_sequence",
          "label": "Reduced after price was against the entry",
          "value": 3,
          "category": "Certified execution evidence",
          "tone": "warning",
          "pctOfTotal": 0.333333
        }
      ]
    },
    "entrySessionPerformance": {
      "id": "entry_session_performance",
      "kind": "bar",
      "title": "Total Entry Session P/L",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "market_open",
          "label": "market_open",
          "value": -126.10005,
          "pctOfTotal": null,
          "category": "6 trades",
          "tone": "negative"
        },
        {
          "id": "midday",
          "label": "midday",
          "value": -109.6,
          "pctOfTotal": null,
          "category": "3 trades",
          "tone": "negative"
        }
      ]
    },
    "entryHourPerformance": {
      "id": "entry_hour_performance",
      "kind": "bar",
      "title": "Total Entry Hour P/L",
      "total": 9,
      "empty": false,
      "data": [
        {
          "id": "09",
          "label": "09:00-09:59 ET",
          "value": -126.10005,
          "pctOfTotal": null,
          "category": "6 trades",
          "tone": "negative"
        },
        {
          "id": "11",
          "label": "11:00-11:59 ET",
          "value": -120,
          "pctOfTotal": null,
          "category": "2 trades",
          "tone": "negative"
        },
        {
          "id": "14",
          "label": "14:00-14:59 ET",
          "value": 10.4,
          "pctOfTotal": null,
          "category": "1 trades",
          "tone": "positive"
        }
      ]
    }
  },
  "sourceBatch": {
    "contractVersion": "batch_execution_feedback_v1",
    "validateOnly": false,
    "failureCounts": {},
    "failures": []
  },
  "warnings": [
    "executions: Execution sequence leaves an open position; full-exit patterns may not apply."
  ],
  "limitations": [
    "This report aggregates execution-feedback summaries only.",
    "Gross P/L excludes commissions, fees, borrow costs, and slippage.",
    "Market context, support/resistance, VWAP/EMA, and candle structure were not used unless explicitly shown in a market-context section.",
    "Small sample sizes should be treated as review prompts, not statistical proof.",
    "Trader identity and long-term behavior conclusions require more reviewed trades."
  ]
}