Docs
Engine B: Big Hand

Engine B: Big Hand

Detect when a tracked wallet places an outsized buy in a single prediction market relative to its own per-market average. Concept and payload reference for BIG_HAND signals.

Overview

Engine B detects a Big Hand — the moment a tracked wallet's cumulative buying in one market first crosses a multiple of that wallet's own average per-market bet.

The threshold is relative, not absolute. A $5,000 buy is only a Big Hand if it is large for that wallet. This adapts to each wallet's typical position size instead of using a fixed dollar floor, so the same signal works for both small and large wallets.

Engine B emits BIG_HAND signals. They are delivered over the WebSocket stream as they fire and are retrievable through the REST signal endpoints.

How It Works

Tracking unit

Signals are tracked per wallet + market. Both sides of a market count toward the same total — a wallet's YES and NO buys in one market are summed together, since both express conviction that the market will move.

Average bet (baseline)

The baseline is the wallet's average buy across all of its other markets:

average_bet = sum(cumulative buys in every OTHER market)
              ─────────────────────────────────────────────
              count of those OTHER markets

The market currently being evaluated is excluded from both the numerator and the denominator. This prevents a growing position from inflating its own baseline.

A wallet with no prior market history has no baseline, so it cannot produce a Big Hand on its very first market.

Signal condition

A BIG_HAND fires when:

new_cumulative_buy  ≥  average_bet  ×  multiple

The default multiple is . The signal fires only the first time a (wallet, market) pair crosses this threshold. Additional buys into the same market afterward do not re-fire.

Processing order

On each new buy from a tracked wallet:

  1. Compute the average bet from the wallet's other markets.
  2. Add the buy to this market's running cumulative total.
  3. If the new cumulative crosses average × multiple and this pair has not fired before, emit the signal.
  4. Record the last fill price.

Retrieving Big Hand Signals

BIG_HAND signals flow through the same delivery surfaces as Engine A:

SurfaceHow to receive Big Hand
wss://.../v1/ws/signalsLive — filter messages on signal_type === "BIG_HAND"
GET /v1/signals/latestPass ?type=BIG_HAND (defaults to Smart Money otherwise)
GET /v1/signals/market/{id}Pass ?type=BIG_HAND
GET /v1/signals/{signal_id}Returns an eligible stored Big Hand by ID

The /signals/latest and /signals/market endpoints default to SMART_MONEY_FLOW when no type is supplied, so you must request BIG_HAND explicitly.

REST endpoints only include Big Hand records that have enough wallet history to present a reliable average-bet context.

Live Payload (WebSocket)

When a Big Hand fires, the live broadcast carries the engine's native shape:

{
  "signal_id": "9b4d3f7a-1c2e-4e8a-b1f2-c3d4e5f6a7b8",
  "signal_type": "BIG_HAND",
  "timestamp": "2026-04-01T09:03:11Z",
  "signal_expiry": "2026-04-01T15:03:11Z",
  "market": {
    "platform": "polymarket",
    "market_id": "0x...",
    "question": "Will ETH reach $5000 before June?",
    "category": "CRYPTO",
    "volume_24h": 215000,
    "market_closes_at": "2026-06-01T00:00:00Z"
  },
  "signal": {
    "direction": "YES",
    "wallet_address": "0xabc...",
    "cumulative_buy_usd": 18000,
    "average_bet_usd": 4200.0,
    "multiple": 4,
    "last_fill_price": 0.47
  },
  "analysis": {
    "average_bet_usd": 4200.0,
    "threshold_multiple": 4
  },
  "context": {
    "narrative": "",
    "x_pulse_score": 0.0
  }
}

signal

FieldTypeDescription
directionStringSide of the triggering buy: YES or NO
wallet_addressStringThe tracked wallet that placed the Big Hand
cumulative_buy_usdIntWallet's total buying in this market at the moment of firing
average_bet_usdFloatWallet's average per-market bet across its other markets (the baseline)
multipleIntThreshold multiple applied to the baseline (default 4)
last_fill_priceFloatMarket probability at the wallet's most recent fill

analysis

FieldTypeDescription
average_bet_usdFloatThe baseline the threshold was measured against
threshold_multipleIntThe multiple in effect when the signal fired

REST Payload

For consistency across the API, the REST endpoints serialize BIG_HAND using the shared signal shape (the same envelope as SMART_MONEY_FLOW). The Big Hand values map onto it as follows:

{
  "signal_id": "...",
  "signal_type": "BIG_HAND",
  "timestamp": "2026-04-01T09:03:11Z",
  "signal_expiry": "2026-04-01T15:03:11Z",
  "market": { ... },
  "signal": {
    "direction": "YES",
    "total_flow_usd": 18000,
    "price_before": 0.47,
    "price_after": 0.47,
    "average_entry_price": 0.47
  },
  "analysis": {
    "consensus_wallet_count": 1,
    "wallet_historical_win_rate": 0.0,
    "decay_applied": false
  }
}
Shared fieldBig Hand meaning
signal.total_flow_usdThe wallet's cumulative_buy_usd in the market
signal.directionSide of the triggering buy (YES / NO)
signal.price_beforeLast fill price (Big Hand carries a single price, not a window)
signal.price_afterLast fill price (same value)
analysis.consensus_wallet_countAlways 1 — a Big Hand is a single-wallet event

Premium fields follow the same tier rules as Engine A: anonymous-tier responses mask total_flow_usd, average_entry_price, and other premium fields. Use GET /v1/signals/{signal_id}/entities with an API key to retrieve the wallet behind a Big Hand, including its score, win rate, and average bet size.

Engine A vs Engine B

Engine A — Smart MoneyEngine B — Big Hand
Signal typeSMART_MONEY_FLOWBIG_HAND
TriggerMultiple wallets converge on one sideOne wallet bets outsized for itself
Wallet countMIN_WALLET_COUNT (consensus)Always 1
ThresholdCluster size + flowPer-wallet average × multiple
FiresOnce per active clusterOnce per (wallet, market)

See Engine A for shared market and envelope field descriptions.