diff --git a/frontend/src/components/ticker/BaseRatesPanel.tsx b/frontend/src/components/ticker/BaseRatesPanel.tsx
new file mode 100644
index 0000000..d4e2e33
--- /dev/null
+++ b/frontend/src/components/ticker/BaseRatesPanel.tsx
@@ -0,0 +1,73 @@
+import type { BaseRates } from '../../lib/baseRates';
+
+/**
+ * What actually happens to trades like this one, measured under the real exit
+ * policy in the backtest. This is the honest replacement for the per-target
+ * "probability", which estimates the odds of touching a level the trade never
+ * exits at. Note `target` is absent from the exit mix — by construction.
+ */
+export function BaseRatesPanel({ rates }: { rates: BaseRates }) {
+ return (
+
+ Most trades lose a little; a few win big. That asymmetry is the edge — which is why
+ there is no take-profit.
+ how they ended
+ What usually happens · {rates.trades} backtested trades ({rates.lookbackLabel})
+
+
+
+ There is no take-profit. Winners are ridden until the + trailing stop is hit — that’s where the strategy’s edge comes from, so hitting a level + below is not a reason to sell. The levels shown below are screening context, not exits. +
+ )} +No target probabilities available.
; + returnNo overhead levels detected.
; } return (| Classification | -Price | +Band | +Level | Distance | -R:R | -Probability | ++ Gate R:R + | ++ Touch odds + |
|---|