All Articles

Connected accounts

Check connection health before you interpret the numbers

A portfolio figure carries an age and a source. Read both before you let the number change a decision.

A trader checking the cable at the side of his laptop before starting work.
Check the connection before the numbers.

Every Number Has An Age

The failure mode in a combined portfolio view is not a wrong number. It is a number that was right at some point and has been quietly retained ever since. Nothing on the screen looks different. The figure is formatted the same way, sits in the same row, and adds into the same total, and the only thing that has changed is that the connection behind it stopped answering forty minutes ago.

CVEST holds several connections with genuinely different capabilities, and they fail independently. An OKX read can lapse while a TradingView import sits untouched and perfectly valid. Treating the combined view as a single live instrument is the mistake; it is an assembly of readings, each with its own timestamp and its own reason for existing.

This article describes what the workspace actually checks, where each age comes from, and how to read a total that is missing a component rather than reporting one incorrectly.

What Counts As Fresh

A source is treated as fresh only when four things hold together: its status is complete, it recorded a successful observation, that observation is no more than three minutes old, and its timestamp is not in the future. A future timestamp is treated as a fault rather than as extremely fresh data, which is the correct reading when a clock is wrong somewhere in the chain.

Account-level health is then derived from those sources rather than declared separately. The workspace computes whether an account is complete, which issues it carries, and the single observation time that the account as a whole can honestly claim. That derived time is the one worth reading, because it is bounded by the weakest source behind the account.

When a saved account falls outside the window, or the venue connection itself is down, CVEST does not keep displaying its last equity figure. The account is marked disconnected and its dollar equity is set to nothing at all. That is a deliberate choice: an absent number is a question you will ask, and a stale number is one you will not.

Read the observation time before the number1Read the sourceWhich connection producedthis value, and for whichaccount.2Read its ageWhen that source lastobserved, not when thepage rendered.3Refresh or explainA stale source belongs inyour explanation of theresult.
The source sets the time, not the screen.

Three Clocks, Not One

It helps to know that the workspace runs more than one freshness rule, because they answer different questions and they expire at different rates.

Portfolio source freshness is the three-minute rule above, and it governs balances, positions, cash and orders. Market quote freshness is much tighter: a quote expires after thirty seconds, and the front end runs its own timer for that expiry so a dropped event stream cannot leave a stale price looking current. The engine applies the same thirty-second bound to the values it reports in its own state summary.

The practical consequence is that a portfolio figure and an executable price age at different speeds, and they should. A balance stays inside its window for three minutes; a bid expires after thirty seconds. A bid two minutes old is outside its window entirely.

Each Connection Has A Different Scope

The table below is a reading aid for interpreting a source, not a feature comparison and not a statement about which connection is better. The column that matters most during a review is the last one.

ConnectionWhat it providesWhat its silence means
OKXAccount configuration, balances, positions, pending option orders, fee rates and the option chain the loop readsThe account picture and the executable market both go unavailable together
IBKRReads through a local gateway on your own machine, with an interactive loginA closed gateway or an expired session, not necessarily a broker problem
DeribitRead-only account and market reads, used for comparisonComparison is unavailable; nothing about execution changes, because it never executes
TradingViewA full-history CSV you exported and imported yourselfNothing. An import does not go stale; it stays exactly as dated

The IBKR row deserves emphasis because it surprises people. That connection is constrained to a local gateway by construction, and the workspace verifies the session, the account identity and the live-or-paper realm before it will treat a reading as authoritative. If your machine is asleep, the connection is down, and that is the system working correctly.

A Missing Total Is An Answer

CVEST will only produce a dollar figure for a balance when the currency is already dollars or an observed conversion rate exists for it. When neither holds, the dollar value is absent rather than estimated. Totals are then computed only from connected accounts that have a real dollar equity, and the workspace reports how many accounts were included and how many were left out.

A total that says it excluded two accounts is more useful than a total that quietly included two guesses.

Some exclusions are structural rather than temporary. Cross-collateral equity on a venue that reports it that way is counted once rather than added up per currency, because adding it up would double-count the same collateral. On the OKX side, liquid-staking detail can overlap token balances, so only the venue's own reported account valuation is used as the total.

The workspace carries one exclusion in plain words that is worth internalising: cash remains on each venue, and workspace equity cannot collateralize another broker's trade. The combined figure is a reporting convenience. It is not a pool anything can draw on.

Reading Health Before Reading Value

Each venue connection records whether it is configured, whether it is connected, whether execution is enabled for it, when it was last checked, and any error or explanatory detail. Reading that record first reframes everything below it. An account showing no positions because the connection is down is a different situation from an account showing no positions because it holds none, and only the connection record distinguishes them.

This is also where the paused state of the product is visible rather than implied. The execution flag on a workspace connection reports false unless live execution has been explicitly enabled for that deployment, and it is off by default. A connection can be perfectly healthy for reading and still, correctly, refuse to place anything.

First Steps

  1. Before reading any figure, open the connection view and note which sources are complete and when each last observed. Write the oldest one down; it bounds everything else.
  2. Check the included and excluded account counts behind any combined total, and account for every exclusion before you treat the total as the portfolio.
  3. If a source is stale, refresh it and repeat the review from the start rather than mentally adjusting the number you already read.

Stale Data Belongs In The Explanation

The habit worth building is small. Read the health record, then the figure, in that order, every time. It costs a few seconds and it changes what the number means, because a value you know to be four minutes old is information, while the same value assumed to be current is a guess wearing a decimal point.

When a review produces a conclusion, the state of the connections behind it belongs in the conclusion. Not as a disclaimer at the end, but as part of the sentence: the position looks like this, based on sources that last observed at this time, with these accounts excluded. That sentence survives contact with a later correction. A bare number does not.

Read the risk information and check the current product scope before evaluating a workflow.

Sign up