Indicateur

Fathom Opening

Posez le cadre dès l’ouverture. Suivez les bornes de l’opening range et leurs extensions tout au long de la séance.

Range des openingMinutes minutes qui suivent 09:30 heure de New York, provisoire pendant sa formation. Une fois le range formé, la sortie fait apparaître des zones d'imbalance dans son sens et, si demandé, trois projections calculées à partir des statistiques des séances précédentes (fournies par l'historique). Sans statistiques couvrant au moins une séance complète, l'objet statistics:<session> signale STATISTICS_UNAVAILABLE. Le range et les projections d'une séance sont retirés à l'ouverture de la suivante.

Identifiant
opening-range
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": "opening-range",
  "instrument": "NQ.front",
  "indicator": "opening-range",
  "params": {
    "extendBars": 10,
    "openingMinutes": 60,
    "projections": true,
    "timeframe": 300,
    "zones": 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
extendBarsinteger101 à 500barresExtension initiale des zones, en barres.
openingMinutesinteger601 à 240—Durée de l'opening range après 09:30 heure de New York, en minutes.
projectionsbooleantruetrue · false—Publier les projections statistiques après la sortie du range.
timeframeinteger30015 · 60 · 300—Durée des barres, en secondes : 15, 60 ou 300.
zonesbooleantruetrue · false—Publier les zones d'imbalance dans le sens de la sortie.

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.

range mis à jour en continu

Range ; provisoire pendant sa formation, retiré à la séance suivante.

Format de l’id : range:<session>. 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
barstringtimestamp (ns)toujoursDébut de la barre où le range a commencé.
highintegertickstoujoursHaut (ORH).
lowintegertickstoujoursBas (ORL) ; milieu ORM = (high + low) / 2.

zone mis à jour en continu

Zone ; provisoire tant qu'elle est active.

Format de l’id : zone:<session>:<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 valide.
barstringtimestamp (ns)toujoursDébut de la barre qui a créé la zone.
endnumberbarrestoujoursFin, en barres depuis bar.
highintegertickstoujoursHaut de la zone.
lowintegertickstoujoursBas de la zone.
sidestring · buy | sell—toujoursSens de la sortie du range.
startnumberbarrestoujoursDébut, en barres depuis bar.

projection mis à jour en continu

Projection de la séance, mise à jour avec l'état du range.

Format de l’id : proj:<session>:<label>. 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
labelstring · Protection | Ext. Avg | Ext Std-1—toujoursProjection : protection, extension moyenne, extension moyenne + 1 écart-type.
priceintegertickstoujoursPrix projeté.

statistics mis à jour en continu

Signale que les statistiques de la séance manquent ; retiré à la séance suivante.

Format de l’id : statistics:<session>. 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
statusstring—toujoursProjections demandées alors que la séance n'a pas de statistiques.

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 en cours
{
  "t": "upsert",
  "id": "range:2026-09-24",
  "final": false,
  "ts": "1790256600000077031",
  "data": {
    "bar": "1790256600000000000",
    "high": 122076,
    "low": 122076
  }
}
Version finale
{
  "t": "upsert",
  "id": "range:2026-09-24",
  "final": true,
  "ts": "1790260200003097647",
  "data": {
    "bar": "1790256600000000000",
    "high": 122554,
    "low": 121973
  }
}
Version en cours
{
  "t": "upsert",
  "id": "zone:2026-09-24:0",
  "final": false,
  "ts": "1790266800003513995",
  "data": {
    "side": "buy",
    "high": 122373,
    "low": 122371,
    "active": true,
    "bar": "1790266500000000000",
    "start": -0.4,
    "end": 9.6
  }
}
Version en cours
{
  "t": "upsert",
  "id": "proj:2026-09-24:protection",
  "final": false,
  "ts": "1790266800003513995",
  "data": {
    "label": "Protection",
    "price": 122662
  }
}
Version finale
{
  "t": "upsert",
  "id": "zone:2026-09-24:2",
  "final": true,
  "ts": "1790270400021675849",
  "data": {
    "side": "buy",
    "high": 123010,
    "low": 123008,
    "active": false,
    "bar": "1790268300000000000",
    "start": -0.4,
    "end": 6
  }
}

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/opening-range/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "extendBars": {
      "description": "Extension initiale des zones, en barres.",
      "type": "integer",
      "default": 10,
      "minimum": 1,
      "maximum": 500
    },
    "openingMinutes": {
      "description": "Durée de l'opening range après 09:30 heure de New York, en minutes.",
      "type": "integer",
      "default": 60,
      "minimum": 1,
      "maximum": 240
    },
    "projections": {
      "description": "Publier les projections statistiques après la sortie du range.",
      "type": "boolean",
      "default": true
    },
    "timeframe": {
      "description": "Durée des barres, en secondes : 15, 60 ou 300.",
      "type": "integer",
      "default": 300,
      "enum": [
        15,
        60,
        300
      ]
    },
    "zones": {
      "description": "Publier les zones d'imbalance dans le sens de la sortie.",
      "type": "boolean",
      "default": true
    }
  }
}
Schéma du champ data
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/opening-range/data.json",
  "anyOf": [
    {
      "title": "range",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "bar": {
          "description": "Début de la barre où le range a commencé.",
          "type": "string",
          "pattern": "^[0-9]+$"
        },
        "high": {
          "description": "Haut (ORH).",
          "type": "integer"
        },
        "low": {
          "description": "Bas (ORL) ; milieu ORM = (high + low) / 2.",
          "type": "integer"
        }
      },
      "required": [
        "bar",
        "high",
        "low"
      ]
    },
    {
      "title": "zone",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "active": {
          "description": "Zone encore valide.",
          "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`.",
          "type": "number"
        },
        "high": {
          "description": "Haut de la zone.",
          "type": "integer"
        },
        "low": {
          "description": "Bas de la zone.",
          "type": "integer"
        },
        "side": {
          "description": "Sens de la sortie du range.",
          "type": "string",
          "enum": [
            "buy",
            "sell"
          ]
        },
        "start": {
          "description": "Début, en barres depuis `bar`.",
          "type": "number"
        }
      },
      "required": [
        "side",
        "high",
        "low",
        "active",
        "bar",
        "start",
        "end"
      ]
    },
    {
      "title": "projection",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "label": {
          "description": "Projection : protection, extension moyenne, extension moyenne + 1 écart-type.",
          "type": "string",
          "enum": [
            "Protection",
            "Ext. Avg",
            "Ext Std-1"
          ]
        },
        "price": {
          "description": "Prix projeté.",
          "type": "integer"
        }
      },
      "required": [
        "label",
        "price"
      ]
    },
    {
      "title": "statistics",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "status": {
          "description": "Projections demandées alors que la séance n'a pas de statistiques.",
          "const": "STATISTICS_UNAVAILABLE"
        }
      },
      "required": [
        "status"
      ]
    }
  ]
}