Indicator

Fathom Trades

Size leaves a trace. Isolate aggressive orders above your threshold and see exactly where they hit the market.

Merges consecutive same-side trades into a single aggressive order, as long as the price never moves back and no more than 5 ms separate two trades. The current group is published as provisional once it reaches the minimum volume, then as final when it closes: side change, price moving back, a gap over 5 ms, or a trade with no aggressor side. Thresholds and price mode are view parameters: every subscriber to an instrument shares the same computation.

Identifier
big-trades
Objects received
group
Calculation
Recent trades
Historical cost
1 unit per trade

Subscribe

The same params work in real time, on historical data and in exports. Any you leave out take their default value.

Subscribe message
{
  "t": "subscribe",
  "sub": "big-trades",
  "instrument": "NQ.front",
  "indicator": "big-trades",
  "params": {
    "minimum": 30,
    "maximum": 0,
    "priceMode": "last"
  },
  "mode": "live",
  "from": "live"
}

Parameters

As soon as a parameter differs from its default, the subscription counts as a custom configuration. A display parameter only filters the results sent: changing it is instant. A calculation parameter may require preparing a new calculation (status warming).

ParameterTypeRoleDefaultAllowed valuesUnitDescription
minimumintegerDisplay301 to 1,000,000contractsMinimum group volume, in contracts.
maximumintegerDisplay00 to 1,000,000contractsMaximum group volume, in contracts; 0 = unlimited, otherwise at least minimum.
priceModechoiceDisplaylastlast · start · average—Price reported in price: the group’s last price, first price, or rounded VWAP.

Objects received

Each object keeps the same id from one update to the next. Its data is in the data field. Prices are in ticks: multiply them by the instrument’s tick size (GET /v1/instruments) to get points.

group updated continuously

Group of trades; provisional while it keeps growing.

Format of the id: <startNs>:<ordinal>. While it changes, the object is sent with final: false, and each new version fully replaces the previous one. Its last version carries final: true.

FieldTypeUnitPresentDescription
endstringtimestamp (ns)alwaysts_event of the last trade.
firstintegerticksalwaysPrice of the first trade.
lastintegerticksalwaysPrice of the last trade.
priceintegerticksalwaysPrice per priceMode: last price, first price, or VWAP rounded to the tick (ties to even).
sidestring · buy | sell—alwaysAggressor side of the group.
startstringtimestamp (ns)alwaysts_event of the first trade.
tradesintegertradesalwaysNumber of trades in the group.
volumeintegercontractsalwaysTotal group volume.
vwapnumberticksalwaysVolume-weighted average price, in fractional ticks.

Calculation warm-up

This indicator only depends on recent trades. If nobody is using your parameters yet, you briefly receive a status warming before the snapshot.

Historical data follows the same rules: a query over a past period returns exactly what the real-time stream published.

Example messages

Messages received with the subscription parameters above. Over WebSocket, each message also carries sub and cursor.

In-progress version
{
  "t": "upsert",
  "id": "1790208267461672923:0",
  "final": false,
  "ts": "1790208267461672923",
  "data": {
    "side": "sell",
    "volume": 30,
    "trades": 14,
    "start": "1790208267461672923",
    "end": "1790208267461672923",
    "first": 122991,
    "last": 122979,
    "price": 122979,
    "vwap": 122984.5
  }
}
Final version
{
  "t": "upsert",
  "id": "1790208267461672923:0",
  "final": true,
  "ts": "1790208267468979827",
  "data": {
    "side": "sell",
    "volume": 40,
    "trades": 21,
    "start": "1790208267461672923",
    "end": "1790208267461672923",
    "first": 122991,
    "last": 122976,
    "price": 122976,
    "vwap": 122982.775
  }
}

JSON schemas

To validate or type your data: the JSON schemas of the parameters and of data, also available from GET /v1/indicators. The SDK can generate types from them.

Parameters schema
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/big-trades/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "minimum": {
      "type": "integer",
      "default": 30,
      "minimum": 1,
      "maximum": 1000000,
      "description": "Minimum group volume, in contracts."
    },
    "maximum": {
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000,
      "description": "Maximum group volume, in contracts; 0 = unlimited, otherwise at least `minimum`."
    },
    "priceMode": {
      "type": "string",
      "default": "last",
      "enum": [
        "last",
        "start",
        "average"
      ],
      "description": "Price reported in `price`: the group’s last price, first price, or rounded VWAP."
    }
  }
}
Schema of the data field
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/big-trades/data.json",
  "title": "group",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "side",
    "volume",
    "trades",
    "start",
    "end",
    "first",
    "last",
    "price",
    "vwap"
  ],
  "properties": {
    "end": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "`ts_event` of the last trade."
    },
    "first": {
      "type": "integer",
      "description": "Price of the first trade."
    },
    "last": {
      "type": "integer",
      "description": "Price of the last trade."
    },
    "price": {
      "type": "integer",
      "description": "Price per `priceMode`: last price, first price, or VWAP rounded to the tick (ties to even)."
    },
    "side": {
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ],
      "description": "Aggressor side of the group."
    },
    "start": {
      "type": "string",
      "pattern": "^[0-9]+$",
      "description": "`ts_event` of the first trade."
    },
    "trades": {
      "type": "integer",
      "description": "Number of trades in the group."
    },
    "volume": {
      "type": "integer",
      "description": "Total group volume."
    },
    "vwap": {
      "type": "number",
      "description": "Volume-weighted average price, in fractional ticks."
    }
  }
}