Indicateur

Fathom Imbalances

Là où le footprint montre tous les chiffres, Imbalances ne garde que le signal : quand un côté écrase l’autre sur plusieurs niveaux d’affilée, la bougie close laisse une zone sur le graphique.

Sur chaque barre close, repère les séries de niveaux consécutifs en imbalance (diagonale, horizontale ou en pourcentage de delta) et en fait des zones prolongées sur extendedBars barres. Une zone franchie peut créer une zone de retest. Chaque zone est republiée à chaque changement et devient définitive à sa fin. Le calcul repart à zéro chaque semaine.

Identifiant
imbalances
Objets reçus
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": "imbalances",
  "instrument": "NQ.front",
  "indicator": "imbalances",
  "params": {
    "consecutive": 3,
    "extendedBars": 10,
    "extraTicks": 0,
    "groupTicks": 1,
    "includeZero": false,
    "minimumPercent": 300,
    "minimumVolume": 0,
    "mode": "diagonal",
    "resetSession": false,
    "timeframe": 300,
    "triggerOnlyTouch": false,
    "triggeredZones": true
  },
  "mode": "live",
  "from": "live"
}

Paramètres

Dès qu’un paramètre s’écarte de sa valeur par défaut, la subscription compte comme une configuration personnalisée. Une nouvelle valeur peut demander de préparer un nouveau calcul (status warming).

ParamètreTypeDéfautValeurs possiblesUnitéDescription
consecutiveinteger31 à 20—Nombre minimum de niveaux consécutifs en imbalance pour former une zone.
extendedBarsinteger101 à 500barresDurée de vie d'une zone, en barres.
extraTicksinteger00 à 100ticksMarge ajoutée aux zones, en ticks.
groupTicksinteger11 à 100ticksNombre de ticks regroupés par niveau.
includeZerobooleanfalsetrue · false—Compter un côté vide comme une imbalance.
minimumPercentinteger3001 à 10 000%Rapport minimum entre les deux côtés, en pourcentage.
minimumVolumeinteger00 à 1 000 000contratsÉcart de volume minimum entre les deux côtés.
modechoicediagonaldiagonal · horizontal · delta-percentage—Comparaison des volumes : diagonale, horizontale ou en pourcentage de delta.
resetSessionbooleanfalsetrue · false—Terminer les zones à l'ouverture de chaque séance.
timeframeinteger30015 · 60 · 300—Durée des barres, en secondes : 15, 60 ou 300.
triggerOnlyTouchbooleanfalsetrue · false—Déclencher au toucher plutôt qu'à la clôture.
triggeredZonesbooleantruetrue · false—Créer une zone de retest après le déclenchement.

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.

zone mis à jour en continu

Zone ; provisoire tant qu'elle est active.

Format de l’id : <weekStart>:<ordinal>. 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.
barstringtimestamp (ns)toujoursDébut de la barre qui a créé la zone.
endnumberbarresparfoisFin, en barres depuis bar ; présent quand la zone est terminée.
highintegertickstoujoursHaut de la zone.
lowintegertickstoujoursBas de la zone (égal au haut pour une ligne).
sidestring · buy | sell—toujoursImbalance acheteuse ou vendeuse.
startnumberbarrestoujoursDébut, en barres depuis bar.
triggeredboolean—toujoursZone de retest, créée après le déclenchement d'une 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": "2026-09-19:526",
  "final": true,
  "ts": "1790208000058746563",
  "data": {
    "side": "sell",
    "high": 123052,
    "low": 123050,
    "triggered": true,
    "active": false,
    "bar": "1790207400000000000",
    "start": -0.5,
    "end": 2
  }
}
Version en cours
{
  "t": "upsert",
  "id": "2026-09-19:527",
  "final": false,
  "ts": "1790208000058746563",
  "data": {
    "side": "sell",
    "high": 123040,
    "low": 123038,
    "triggered": false,
    "active": true,
    "bar": "1790207700000000000",
    "start": 0.5
  }
}

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/imbalances/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "consecutive": {
      "description": "Nombre minimum de niveaux consécutifs en imbalance pour former une zone.",
      "type": "integer",
      "default": 3,
      "minimum": 1,
      "maximum": 20
    },
    "extendedBars": {
      "description": "Durée de vie d'une zone, en barres.",
      "type": "integer",
      "default": 10,
      "minimum": 1,
      "maximum": 500
    },
    "extraTicks": {
      "description": "Marge ajoutée aux zones, en ticks.",
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 100
    },
    "groupTicks": {
      "description": "Nombre de ticks regroupés par niveau.",
      "type": "integer",
      "default": 1,
      "minimum": 1,
      "maximum": 100
    },
    "includeZero": {
      "description": "Compter un côté vide comme une imbalance.",
      "type": "boolean",
      "default": false
    },
    "minimumPercent": {
      "description": "Rapport minimum entre les deux côtés, en pourcentage.",
      "type": "integer",
      "default": 300,
      "minimum": 1,
      "maximum": 10000
    },
    "minimumVolume": {
      "description": "Écart de volume minimum entre les deux côtés.",
      "type": "integer",
      "default": 0,
      "minimum": 0,
      "maximum": 1000000
    },
    "mode": {
      "description": "Comparaison des volumes : diagonale, horizontale ou en pourcentage de delta.",
      "type": "string",
      "default": "diagonal",
      "enum": [
        "diagonal",
        "horizontal",
        "delta-percentage"
      ]
    },
    "resetSession": {
      "description": "Terminer les zones à l'ouverture de chaque séance.",
      "type": "boolean",
      "default": false
    },
    "timeframe": {
      "description": "Durée des barres, en secondes : 15, 60 ou 300.",
      "type": "integer",
      "default": 300,
      "enum": [
        15,
        60,
        300
      ]
    },
    "triggerOnlyTouch": {
      "description": "Déclencher au toucher plutôt qu'à la clôture.",
      "type": "boolean",
      "default": false
    },
    "triggeredZones": {
      "description": "Créer une zone de retest après le déclenchement.",
      "type": "boolean",
      "default": true
    }
  }
}
Schéma du champ data
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/imbalances/data.json",
  "title": "zone",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "active": {
      "description": "Zone encore prolongée.",
      "type": "boolean"
    },
    "bar": {
      "description": "Début de la barre qui a créé la zone.",
      "type": "string",
      "pattern": "^[0-9]+$"
    },
    "end": {
      "description": "Fin, en barres depuis `bar` ; présent quand la zone est terminée.",
      "type": "number"
    },
    "high": {
      "description": "Haut de la zone.",
      "type": "integer"
    },
    "low": {
      "description": "Bas de la zone (égal au haut pour une ligne).",
      "type": "integer"
    },
    "side": {
      "description": "Imbalance acheteuse ou vendeuse.",
      "type": "string",
      "enum": [
        "buy",
        "sell"
      ]
    },
    "start": {
      "description": "Début, en barres depuis `bar`.",
      "type": "number"
    },
    "triggered": {
      "description": "Zone de retest, créée après le déclenchement d'une zone.",
      "type": "boolean"
    }
  },
  "required": [
    "side",
    "high",
    "low",
    "triggered",
    "active",
    "bar",
    "start"
  ]
}