Live signals feed
Real-time table of every active and waiting USDⓈ-M futures signal. Columns, filters (side · status · source), sort by ROE / age, mobile layout, and deep-link from notifications via the symbol query parameter.
The live feed is the running-signals table — every signal currently active or waiting for entry. Sub-second WebSocket updates keep ROE, current price, and time-in-trade in sync with the market. The feed is also the entry point to every per-signal action: click a row to open the detail dialog, or use the row's action buttons to pipe to autotrade / set alert / open in chart.

Columns
| Column | Notes |
|---|---|
| Symbol | E.g. BTCUSDT. Sortable. Click → opens detail dialog. |
| Side | LONG (green) / SHORT (red) badge. |
| Source | The signal generator (e.g. mrD-RSI Pullback, mrDAlgo, Smart Ranges). Click → filters feed to that source. |
| TF | Timeframe of the originating bar (5m / 15m / 1h / 4h). |
| Entry | Limit price for the entry. If active, this is the fill price. |
| SL | Stop-loss price. |
| TP1 / TP2 / TP3 | Three TP levels. Green dot = hit; grey = pending; red = won't be hit (SL was hit first). |
| Mark price | Current symbol mark price, WS-updated. |
| ROE % | Current return on equity if you're in the signal at default leverage. Negative = red, positive = green. |
| Max ROE | Highest ROE achieved by this signal since entry. |
| Age | Time since signal generated. Formatted as 5m, 2h, 1d 4h. |
| 24h Δ | Symbol's 24h percentage change. Context only. |
| 24h Vol | Symbol's 24h volume. Sorted for liquidity filtering. |
| Status chip | ACTIVE / WAITING. |
Filters
Above the table:
| Filter | Options |
|---|---|
| Status | All / Active / Waiting. Default = All. Counts shown next to each option. |
| Side | Long / Short. Default = Long. Toggle to flip. Counts shown. |
| Source | Multi-select dropdown of signal generators. Default = all sources. |
| Symbol search | Free-text typeahead — restricts feed to matching symbols. |
| Sort | Default (newest first) / ROE descending / ROE ascending / Age. |
The filter state is URL-shareable — copy the URL with filters applied and it loads the same view.
Row interactions
- Click row → opens the detail dialog with the chart loaded for that signal.
- Hover row → highlights the symbol on the right-side chart panel (if visible) and shows a 1-line tooltip with current P&L.
- Right-click row (desktop) → context menu with "Open in new tab", "Copy signal link", "Pipe to Auto Trade", "Set alert".
- Long-press row (mobile) → same actions as desktop right-click.
Deep-link from notifications
When a notification fires for a signal, tapping it opens the page with a ?symbol= query:
/trading-signals/future-signals?symbol=BTCUSDT
The feed auto-selects the matching signal and pre-opens the detail dialog. If the page is already open in another tab, the notification re-uses that tab and updates the selection.
Real-time update mechanics
The feed maintains a persistent WebSocket connection to the signals service. Each tick:
- New signal → row prepends, briefly highlighted (gold tint, fades over 2 s).
- Signal entry fills → row's status flips
WAITING→ACTIVE, brief amber pulse. - TP / SL hit → row briefly flashes green (TP) or red (SL), then animates to closed history.
- Mark price + ROE → updated every ~250 ms (throttled).
If the WS disconnects, a small banner appears top-right with a reconnect status. The engine auto-reconnects within ~3 s under normal conditions.
Mobile layout
On screens < 768 px the table collapses to a card list:
- One card per signal.
- Card shows: Symbol + Side · Entry / SL / TP1 row · Mark price + ROE · Age + Status.
- Tap card → opens detail dialog (full-screen on mobile).
- Filters move to a slide-up sheet (tap the filter icon top-right).
Pagination
The feed shows up to 200 simultaneously-running signals. If the BE has more, paginate:
- Older signals button at the bottom → loads the next 200.
- Most users see < 50 active signals at any time — pagination is rare.
Empty state
If no signals match the current filters, the feed shows:
No active signals match your filters. Try widening Status or Side, or removing the source filter.
If the BE is healthy but genuinely has zero signals (rare; usually weekend lull), the message is:
No signals running right now. Active markets typically generate 20-50 signals per day across all sources.
What's next
- Signal detail — what the dialog shows when you click a row.
- History — closed signals.
- Metrics dashboard — aggregate performance.