The Scattered Balance
The order check adds up buying power from three systems that each saw a different moment.
Market open. $5,000 in cash, nothing on hold.
Where this shows up
Why the stream job gets it wrong
Buying power isn’t stored anywhere. It’s cash from the ledger, minus holds from the order service, minus orders whose fills haven’t come back, plus positions on other venues. A stream job assembles part of it into a serving copy, and the order check fills in the rest from the other systems. Each piece comes from a slightly different moment, and at the open those moments drift apart.
By the time the decision ran, its context was inconsistent. We call that a context gap.
Work out buying power from one moment’s data.
Venue fills and positions stream into Tacnode, and the order check reads buying power computed from cash, holds and fills as of the same moment. When a check places a hold, it’s written to Tacnode, so the next order on any product sees it.
If an engineer asks how
Buying power is a query over ingested cash, fills and positions plus the holds written to Tacnode, computed on demand against the latest committed data. Reads scale out over shared storage, so the open doesn’t add copies.
Questions to put to your team
- When a customer trades two products at the open, do both order checks see the same buying power?
- How many systems does that number get assembled from?
- Does withdrawable cash net out every deposit still on hold?
Is your buying power telling this lie?
Bring it to a demo, and we’ll trace what it reads and how old that data is by the time it runs.
Book a demo →