DEV Community

AlgoVault.com
AlgoVault.com

Posted on

Volume, gainers, losers, movers: choosing which perps an AI agent scans

Intro

An AI trading agent that scans crypto perpetuals every few minutes spends most of its budget deciding what to look at. Scoring is cheap; universe selection is where a scan quietly succeeds or quietly wastes calls. In the first post of this series we covered the default open-interest lens and the liquidity floor — the "what is big" question. This post is about the other question a scan can ask: what is moving right now.

That question has four answers in the AlgoVault MCP surface: volume, gainers, losers, and movers. They are not synonyms. Each one selects a different slice of the market, and picking the wrong one is the difference between an agent that catches continuation and an agent that catches nothing. Our composite verdict is built on 91.7% PFE win rate · 509,055+ verified calls · Merkle-anchored on Base L2, and every one of those calls started with a universe decision like the one this post is about.

cover

Big is not the same as busy

Open interest, the default lens covered in the earlier post of this series, answers a structural question: which perps carry committed capital right now. It is a slow-moving, high-signal filter, and it is the correct starting point for most agents most of the time.

The activity lenses answer a behavioural question instead: which perps are being traded right now, in which direction, and by how much. Big and busy overlap a lot at the top of the book — the majors are usually both — but the tail is where the two views diverge, and the tail is where the interesting setups usually live. An agent that only ever scans by open interest will keep re-scoring the same names every cycle. An agent that only ever scans by movement will chase noise on illiquid perps. The activity lenses exist so the scan can decide, per cycle, which of the two questions it is asking.

The rule of thumb we use internally: if the strategy is continuation (trend, breakout, momentum), the activity lenses tend to surface better candidates because they select for names where price is already in motion. If the strategy is mean reversion against a structural anchor, open interest and the liquidity floor tend to be safer, because you want the reversion to happen in a book that can actually absorb the position.

volume vs open interest — the one-sentence difference that matters

Volume is turnover — the notional that changed hands in a window. Open interest is the notional currently held. The one-sentence difference: volume can be inflated in ways open interest structurally cannot, because a single position can be opened and closed many times in a day, but it can only be held once. That is not a criticism of volume as a lens — it is exactly why volume surfaces different names than oiBasis. High turnover on a modest open-interest base is a real signal about who is present in the book right now, and that is often what a momentum agent wants to see.

gainers, losers, movers — three ways to ask "what is moving"

The three price-change lenses all read from the same underlying field — the venue's own 24h price change, reconstructed uniformly across venues so the number means the same thing whether the perp is on Binance, Bybit, OKX, Bitget, or Hyperliquid. What differs is the direction filter.

  • gainers — signed change, positive only. The top of this list is the perps that are up the most over the window. This is the lens for a long-biased continuation agent.
  • losers — signed change, negative only. The mirror. This is the lens for a short-biased continuation agent, or a mean-reversion agent hunting oversold candidates.
  • movers — magnitude regardless of sign. This is not the same as running gainers and losers and merging: movers orders by absolute change, so a perp down heavily and a perp up heavily can appear in the same slice, ranked together. It is the lens for a direction-agnostic scan that cares about volatility more than trend.

volume is the fourth option in the same family, ordering by 24h turnover rather than price change. It answers a different sub-question — where is participation right now — and the returned set often looks nothing like any of the three price-change lenses.

Implementation walkthrough — gainers, losers, movers, and the aliases

The MCP tool accepts the lens as a parameter on the scan call. The canonical names are volume, gainers, losers, movers, and short-form aliases are accepted so agent authors don't have to remember exact strings — enumerate them from the live tools/list schema rather than from a copy-pasted table, because that surface evolves.

Block 1 — install and first call, one lens, one venue:

npx -y @algovault/crypto-quant-signal-mcp@latest
# then, from your MCP client:
# call: scan_universe { "lens": "gainers", "venue": "binance", "timeframe": "15m" }
Enter fullscreen mode Exit fullscreen mode

Block 2 — a real verdict returned by get_trade_call, which is what the scan calls per shortlisted asset once the lens has selected the universe. Notice the _algovault.quota block: the lens changed which assets were scored, not how many calls were billed.

{
  "call": "HOLD",
  "confidence": 1,
  "price": 79803.9,
  "indicators": {
    "funding_rate": 0.0000796,
    "funding_state": "NORMAL",
    "oi_change_pct": 4.79,
    "volume_24h": 18859152141.64,
    "trend_persistence": "MEDIUM",
    "breakout_pending": "INACTIVE"
  },
  "regime": "RANGING",
  "reasoning": "Regime is ranging with the moving averages inside the noise band. Funding sits in BTC's normal 14-day band: no crowd pressure either way. Turns directional if funding moves off neutral.",
  "coin": "BTC",
  "timeframe": "15m",
  "_algovault": {
    "version": "1.28.1",
    "tool": "get_trade_call",
    "exchange": "BINANCE",
    "quota": {
      "used": 67,
      "total": 200,
      "remaining": 133,
      "daily": { "used": 3, "total": 100, "remaining": 97 }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

api-response

Block 3 — dropping the lens choice into an agent loop. The loop picks the lens dynamically based on the strategy the agent is currently running, calls the scan, then iterates the shortlist through get_trade_call:

# AlgoVault MCP example  coins=BTC confidence_threshold=70

[BTC] {
  "call": "HOLD",
  "confidence": 1,
  "price": 79803.9,
  "indicators": {
    "funding_rate": 0.0000796,
    "funding_24h_avg": 0.0000796,
    "funding_state": "NORMAL",
    "oi_change_pct": 4.79,
    "oi_change_window": "24h",
    "volu…

# DRYRUN_MODE=1 — example complete
Enter fullscreen mode Exit fullscreen mode

agent-loop

The agent chose gainers because it was in continuation mode this cycle. Had the same loop been in mean-reversion mode, it would have swapped to losers (to find oversold candidates) or fallen back to the open-interest default from the earlier post. Nothing else in the loop changed — same timeframe, same confidence threshold, same billing behaviour.

A worked comparison: two lenses, same venue, different universes

The load-bearing evidence for this post is that the lenses genuinely return different universes. Run a scan for the top slice by volume and a scan for the top slice by gainers on the same venue at the same timeframe. In a healthy market, the two shortlists overlap on maybe the top majors and then diverge — the volume list will be dominated by BTC, ETH, SOL and whichever mid-caps are being churned that day, while the gainers list will be dominated by whatever mid- and lower-caps are actually running.

The BTC verdict above is a good honest example of what a volume-lens scan surfaces on a quiet day: a HOLD at 1% conviction, ranging regime, funding in the normal band. The lens did its job — BTC is genuinely near the top of the venue by 24h turnover — but the scoring correctly refused to fabricate a call where none existed. A gainers scan at the same moment would have surfaced a completely different shortlist, and if any of those names had cleared the confidence threshold, the agent would have acted on them instead. If, on a given cycle, the two universes happen to overlap heavily — because the whole market is moving together — the honest report is "these overlapped today", and the agent should behave accordingly rather than pretending it found distinct opportunities.

The closest_tradeable hint in the response (XRP 3m at 57% confidence) is the scan's way of saying: "nothing on your requested shortlist crossed the bar, but here is the nearest thing that did on the wider surface." That hint is lens-agnostic. It behaves the same whether you selected volume, gainers, losers, or movers.

Pitfalls — the lens is universe-selection, not ranking

Three honest gotchas worth calling out.

The lens does not re-order the output. Once the universe is chosen, verdicts are returned in confidence order, not in lens order. If you scanned by gainers and the top gainer scored 12% confidence while a smaller gainer scored 71%, the 71% call comes first. This is a common and reasonable misreading — the natural assumption is that "scan by gainers" means "results ordered by gain" — but it is not what the tool does. The lens picks the universe; conviction picks the presentation.

The lens does not change the bill. A scan of the top slice by volume and a scan of the top slice by movers both score the same number of assets and consume the same number of calls against your monthly allowance. If the strategy is direction-agnostic and you find yourself running both lenses back-to-back on every cycle, you are billing twice for what should be one decision — pick one, or alternate on a schedule.

A quiet lens is a real result. Sometimes the movers lens on a given venue at a given timeframe returns a set where nothing crosses your confidence threshold. The correct behaviour is to record the empty result and move on, not to loosen the threshold until something appears. An honest empty scan protects the composite; a scan that fabricates conviction under pressure is the failure mode we spent the most engineering time designing against.

Performance — what the composite shows across lenses

The reason to trust any of this is that the composite verdict has been measured across every lens against forward outcomes. The AlgoVault public track record aggregates all lenses, all venues, and all timeframes into a single PFE win-rate figure: 91.7% PFE win rate · 509,055+ verified calls · Merkle-anchored on Base L2. That number is not a per-lens boast — it is the aggregate honesty check on the whole surface, including the cycles where the scan returned nothing and the agent correctly did nothing. Full breakdown, per-window slices, and the on-chain proofs are on the track record page.

What's Next?

  • the track record — live PFE win rate, verified call count, and the Merkle anchors on Base L2
  • the docs — scan parameters, lens aliases, and the free-tier allowance
  • the GitHub repo — the MCP server source, issue tracker, and example agent loops
  • Earlier post in the scan-lens series: the open-interest default and the liquidity floor, on the AlgoVault blog
  • Next in the series: funding and volatility lenses — when to scan by crowd pressure vs. realised range

— AlgoVault Labs

⭐ Star the repo to follow new exchanges and signals: https://github.com/AlgoVaultLabs/crypto-quant-signal-mcp

Top comments (0)