Indicateur

Fathom Zones

Voyez où le marché insiste. Le volume et le temps passé dans chaque barre font ressortir les zones d’effort.

Calculé sur des barres range de 40 ticks : le trade qui dépasse l'amplitude ouvre la barre suivante, tout comme une nouvelle séance. Une suite d'au moins deux barres d'effort valides (delta modéré, effort borné, durée courte) forme une zone quand elle s'interrompt. La zone est prolongée sur 20 barres, ou jusqu'à ce qu'un corps de barre la franchisse. Publie les barres closes, la moyenne mobile exponentielle 20 et les zones. Le calcul repart à zéro chaque semaine.

Identifiant
effort-zones
Objets reçus
bar, ema, zone
Calcul
Depuis le début de la semaine
Coût sur l’historique
1 compute unit par trade

S’abonner

Les mêmes params fonctionnent en temps réel, sur l’historique et en export. Ceux que vous omettez prennent leur valeur par défaut.

Message subscribe
{
  "t": "subscribe",
  "sub": "effort-zones",
  "instrument": "NQ.front",
  "indicator": "effort-zones",
  "params": {},
  "mode": "live",
  "from": "live"
}

Paramètres

Cet indicateur n’a aucun paramètre. Envoyez "params": {}.

Objets reçus

Chaque objet garde le même id d’une mise à jour à l’autre. Ses données sont dans le champ data. Les prix sont en ticks : multipliez-les par le tick size de l’instrument (GET /v1/instruments) pour obtenir des points.

bar envoyé terminé

Barre range close (index depuis le début de la semaine).

Format de l’id : bar:<weekStart>:<index>. Chaque objet est envoyé une seule fois, déjà terminé (final: true).

ChampTypeUnitéPrésentDescription
closeintegertickstoujoursClôture.
highintegertickstoujoursPlus haut.
lowintegertickstoujoursPlus bas.
openintegertickstoujoursOuverture.
startstringtimestamp (ns)toujoursts_event du premier trade de la barre.

ema envoyé terminé

Point de la moyenne mobile à la clôture de la barre index.

Format de l’id : ema:<weekStart>:<index>. Chaque objet est envoyé une seule fois, déjà terminé (final: true).

ChampTypeUnitéPrésentDescription
valuenumbertickstoujoursMoyenne mobile exponentielle 20 des clôtures, prise à la clôture de la barre index.

zone mis à jour en continu

Zone ; provisoire tant qu'elle est active.

Format de l’id : zone:<weekStart>:<startIndex>. Tant qu’il évolue, l’objet est envoyé avec final: false, et chaque nouvelle version remplace entièrement la précédente. Sa dernière version porte final: true.

ChampTypeUnitéPrésentDescription
activeboolean—toujoursZone encore prolongée.
endintegerbarresparfoisIndex de la dernière barre ; absent tant que la zone est active.
highnumbertickstoujoursHaut de la zone.
lownumbertickstoujoursBas de la zone.
sidestring · buy | sell—toujoursCôté de l'effort qui a formé la zone.
startintegerbarrestoujoursIndex de la barre range qui a confirmé la zone.

Warming du calcul

Le calcul repart de zéro au début de chaque semaine (samedi 00:00 UTC). Pendant la fermeture du week-end, il conserve l’état de la semaine écoulée ; les objets encore ouverts sont finalisés au premier trade de la nouvelle semaine. Si personne n’utilise encore vos paramètres, le serveur recalcule d’abord la semaine depuis son début (status warming), puis passe en direct (status live).

L’historique suit les mêmes règles : une requête sur une période passée renvoie exactement ce que le temps réel a publié.

Exemples de messages

Messages reçus avec les paramètres de la subscription ci-dessus. Sur le WebSocket, chaque message contient aussi sub et cursor.

Version finale
{
  "t": "upsert",
  "id": "bar:2026-09-19:2173",
  "final": true,
  "ts": "1790208062570437091",
  "data": {
    "start": "1790207999116757165",
    "open": 123012,
    "high": 123044,
    "low": 123004,
    "close": 123006
  }
}
Version finale
{
  "t": "upsert",
  "id": "ema:2026-09-19:2173",
  "final": true,
  "ts": "1790208062570437091",
  "data": {
    "value": 123066.85128768138
  }
}
Version en cours
{
  "t": "upsert",
  "id": "zone:2026-09-19:2348",
  "final": false,
  "ts": "1790230140362667235",
  "data": {
    "side": "buy",
    "high": 122357,
    "low": 122258,
    "active": true,
    "start": 2348
  }
}
Version finale
{
  "t": "upsert",
  "id": "zone:2026-09-19:2348",
  "final": true,
  "ts": "1790231072263560767",
  "data": {
    "side": "buy",
    "high": 122357,
    "low": 122258,
    "active": false,
    "start": 2348,
    "end": 2369
  }
}

Schémas JSON

Pour valider ou typer vos données : les schémas JSON des paramètres et de data, aussi disponibles par GET /v1/indicators. Le SDK peut en générer les types.

Schéma des paramètres
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/effort-zones/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {}
}
Schéma du champ data
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/effort-zones/data.json",
  "anyOf": [
    {
      "title": "bar",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "close": {
          "description": "Clôture.",
          "type": "integer"
        },
        "high": {
          "description": "Plus haut.",
          "type": "integer"
        },
        "low": {
          "description": "Plus bas.",
          "type": "integer"
        },
        "open": {
          "description": "Ouverture.",
          "type": "integer"
        },
        "start": {
          "description": "`ts_event` du premier trade de la barre.",
          "type": "string",
          "pattern": "^[0-9]+$"
        }
      },
      "required": [
        "start",
        "open",
        "high",
        "low",
        "close"
      ]
    },
    {
      "title": "ema",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "value": {
          "description": "Moyenne mobile exponentielle 20 des clôtures, prise à la clôture de la barre `index`.",
          "type": "number"
        }
      },
      "required": [
        "value"
      ]
    },
    {
      "title": "zone",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "active": {
          "description": "Zone encore prolongée.",
          "type": "boolean"
        },
        "end": {
          "description": "Index de la dernière barre ; absent tant que la zone est active.",
          "type": "integer"
        },
        "high": {
          "description": "Haut de la zone.",
          "type": "number"
        },
        "low": {
          "description": "Bas de la zone.",
          "type": "number"
        },
        "side": {
          "description": "Côté de l'effort qui a formé la zone.",
          "type": "string",
          "enum": [
            "buy",
            "sell"
          ]
        },
        "start": {
          "description": "Index de la barre range qui a confirmé la zone.",
          "type": "integer"
        }
      },
      "required": [
        "side",
        "high",
        "low",
        "active",
        "start"
      ]
    }
  ]
}