A losing leg expires worthless and leaves no record in the activity feed. Winners leave records. So adding up the feed produces a number that is systematically too good — I measured it once and was out by a factor of eight.
| Method | Result |
|---|---|
| Summing the activity feed | +$187 |
| Reconstructing from positions | +$23 |
Same wallet, same period. The gap is not rounding — it is an entire category of event that never appears.
At settlement the winning token is worth $1 and the losing token is worth $0. The winner gets redeemed, which is an on-chain action and appears in the feed. The loser is simply worth nothing — there is no action to take, so nothing is written down.
Taking one wallet's unpaired legs — the positions that never found their other side:
| Shares | |
|---|---|
| Total unpaired legs | 825 |
| Leaving a record | 236 |
| Vanished silently | 589 |
Seventy-one per cent of the unpaired legs are invisible in the feed — and they are, definitionally, the ones that lost.
| Situation | Consequence |
|---|---|
| Profiling someone else's wallet | you overstate them — and copy something that does not work |
| Tracking your own results | you overstate yourself, and size up on a false read |
| Market-making wallets specifically | worst affected, because naked legs are their main cost |
| Anything holding to settlement | affected, because every loss expires rather than being sold |
The third row is the sharp one: a maker's entire risk lives in the unpaired legs (see pair rate and naked legs) — which is exactly the part the feed omits. The feed hides precisely the cost that matters most.
| Step | Do |
|---|---|
| 1 | enumerate everything bought (this the feed does record) |
| 2 | enumerate everything redeemed, merged and sold |
| 3 | the difference expired worthless — that is your invisible loss |
| 4 | add subsidies separately — they are not in trading P&L either |
Step 3 is the whole trick: the losses are not recorded, but they are derivable, because what you bought and what you disposed of are both recorded and the gap is the answer.
This is the same error as several others on this site:
· an empty rewards array read as "this board has no pool"
· a "position list is empty" response read as "the position is closed",
when it was ingestion lag → the redeemable trap
· and this one: no record read as no loss
All three share a shape: a system reports what it knows, and you read it as what is true. The defence is one question — "is this absent, or merely unreported?"
The activity feed is a ledger that records only good news. Anyone adding it up gets a flattering number, and the flattery is largest exactly where the real cost is — the legs that never paired. Reconstruct from positions, and the missing part is the answer.