Skip to main content

Crypto Bot Trades Tab: Open Positions Now Visible Alongside Closed Trades

· 7 min read
VolatiCloud Team
VolatiCloud

Your bot's Overview tab says "1 open position." You click over to the Trades tab to examine it — and the table says "No trades found." The position is right there, live, consuming capital, and the Trades tab acts like it doesn't exist.

That gap is now closed. The Trades tab on every bot detail page shows live open positions in a dedicated table above your closed-trade history, refreshes automatically on every trade event, and all three filter states — All, Open, Closed — now work correctly.

Why This Was Broken

The root cause is an API boundary inside the Freqtrade trading engine. Freqtrade exposes two separate endpoints:

  • /api/v1/trades — returns closed trades only. This is what the database syncs, and what the Trades tab was reading.
  • /api/v1/status — returns the bot's current open positions. This is what the Overview tab uses for the "Open Positions" count and card.

Before the fix, the Trades tab queried only the closed-trades source. A position in a trade from open to close was invisible to the tab for its entire lifetime — you'd see Overview: Open Positions (1) and Trades tab: No trades found at the same time, which is confusing and makes it hard to monitor running positions from the one tab that's designed for trade history.

The Open filter was especially frustrating: clicking it correctly showed "open trades only," which was always zero, because the query never included open positions in the first place.

What Changed

The Trades tab now pulls from both sources:

  1. BotOpenTradesTable — a new live positions table that appears at the top of the Trades tab when a bot has open positions. It queries the same data source as the Overview's open-position card, and re-fetches automatically whenever the bot emits a trade-change event over the WebSocket subscription.

  2. Closed-trades grid — the existing historical table, unchanged, now positioned below the live table when both are visible.

  3. Status filter — reworked to drive both tables together:

Filter stateShows
AllLive open positions table + full closed-trades history
OpenLive open positions table only (skips the closed-trades query)
ClosedClosed-trades history only (skips the open-positions query)

The "Open" filter now returns real data instead of always being empty. Clicking it is a useful action: you see exactly what the bot is currently holding, without the closed-trade noise.

How the Real-Time Refresh Works

The live positions table subscribes to the same WebSocket trade-change events that drive the Overview's open-position card and the equity curve. When a trade opens, closes, or updates (partial fills, stoploss adjustments, etc.), the event fires and the open-positions table re-fetches immediately — no polling, no manual refresh.

This is the same infrastructure described in the real-time bot monitoring guide. The difference here is where the data surfaces: previously, real-time position data was only visible on the Overview tab. Now it's surfaced directly inside the Trades tab, where most traders go to examine individual positions in detail.

tip

If you want to watch a specific trade from entry to exit without switching tabs, stay on the Trades tab with the Open filter active. The table updates on every trade event until the position closes, at which point the row disappears and you'll find the completed trade in the closed-trades grid below.

Viewing Both Open and Closed Positions Together

The All filter is particularly useful when you want a full picture of trading activity — for example, when a strategy is actively opening new positions while previous ones are still running.

With "All" selected, the layout is:

Trades tab (All)
┌─────────────────────────────────────────┐
│ LIVE OPEN POSITIONS │
│ BTC/USDT · 0.05 BTC · +1.3% · 4h 12m │
│ ETH/USDT · 0.3 ETH · -0.4% · 1h 55m │
├─────────────────────────────────────────┤
│ CLOSED TRADES │
│ BTC/USDT · Sold 2026-06-11 · +2.1% │
│ SOL/USDT · Sold 2026-06-10 · -0.8% │
│ ... │
└─────────────────────────────────────────┘

Each open-position row shows the pair, entry price, current unrealized P&L, and time in trade. This gives you enough context to evaluate whether a position is behaving as expected before it closes.

What This Fixes for Analytics

The bot's Analytics tab computes metrics — total profit, trade count, win rate, average duration — from the same trade data as the Trades tab. Previously, that calculation excluded all currently-open positions, since they weren't in the query.

In practice this meant: if your bot had been running for a week with several trades still open, the Analytics tab was understating activity. The open positions would appear in the numbers only after closing.

Now that the Trades tab integrates the open-positions source, the analytics view has a more accurate picture of current activity. This is especially relevant for longer-timeframe strategies where trades can stay open for days or weeks.

Unrealized vs Realized P&L

The number in an open-position row is unrealized P&L — a mark-to-market estimate based on the current price, not money that's settled in your account yet. It moves every time the price ticks and isn't final until the trade closes and the exit fills. A position showing +1.3% can close at +0.4%, or at a loss, depending on the exit signal and slippage.

Keeping unrealized and realized results visually separated — open positions in one table, closed trades in another — is deliberate. It stops you from reading a temporary mark-to-market swing as a booked result, one of the most common ways traders misjudge how a strategy is performing. When you evaluate a strategy's edge, the closed-trades table is the source of truth; the open-positions table is for situational awareness about what's running right now.

Using VolatiCloud for Complete Trade Visibility

The Trades tab improvement reflects a broader design goal in VolatiCloud: you shouldn't need to context-switch between multiple tabs to understand what your bot is doing right now.

The Bot detail page now gives you:

  • Overview — status, open-position count, equity curve, runner health
  • Trades — all positions in one table (open at top, closed history below), with real-time refresh
  • Analytics — aggregate performance metrics computed from the complete trade set
  • Alerts — per-bot notification rules for trade events, errors, and PnL thresholds

The bot monitoring documentation covers what each tab shows and when to use each one. For traders new to VolatiCloud, the creating a bot guide walks through setting up your first bot from scratch.

If you're transitioning from manual trading and want a framework for understanding what to watch during the first days of automated execution, the paper trading to live guide covers exactly that: which metrics to verify in paper mode before committing capital, and how the monitoring interface reads differently when real money is on the line.

Checking the Update in Your Bots

The change is live on all accounts — no configuration needed. Navigate to any running bot in the VolatiCloud console, open the Trades tab, and you'll see the live open positions section if the bot has any active positions. If the bot has no open positions, the section is hidden and only the closed-trades history appears.

To test the filter behavior:

  1. Open a running bot's detail page
  2. Click the Trades tab
  3. Use the status filter in the top-right of the tab to switch between All / Open / Closed
  4. If the bot has open positions, switching to Open now returns them instead of an empty table

For bots running in dry-run (paper) mode, the behavior is identical — paper positions appear in the live table the same way live positions do.