Fathom Walls
Certains niveaux tiennent, encore et encore. Repérez ceux que les acheteurs ou les vendeurs défendent à répétition.
Sur barres closes, repère un groupe d'extrêmes proches : des hauts ou des bas répétés à moins de tickGrouping ticks, sans cassure au-delà de tickBreakoutMargin. Les cellules à l'extrême doivent concentrer un volume suffisant, dominé par un côté. Au plus un signal par barre, toujours définitif. Le calcul repart à zéro chaque semaine.
- Identifiant
liquidity-walls- Objets reçus
signal- 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.
{
"t": "subscribe",
"sub": "liquidity-walls",
"instrument": "NQ.front",
"indicator": "liquidity-walls",
"params": {
"minClusterVolume": 30,
"minDeltaPercent": 40,
"minPerBarVolume": 10,
"minimumBars": 2,
"nearnessBars": 100,
"tickBreakoutMargin": 0,
"tickGrouping": 4,
"timeframe": 15
},
"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ètre | Type | Défaut | Valeurs possibles | Unité | Description |
|---|---|---|---|---|---|
minClusterVolume | integer | 400 | 0 à 10 000 000 | contrats | Volume total que les cellules du mur doivent dépasser (seuil exclu). |
minDeltaPercent | integer | 70 | 0 à 100 | % | Part minimum du côté dominant dans le volume des cellules du mur. |
minPerBarVolume | integer | 100 | 0 à 1 000 000 | contrats | Volume minimum d'une cellule pour qu'elle soit retenue. |
minimumBars | integer | 2 | 2 à 100 | barres | Nombre minimum de cellules retenues. |
nearnessBars | integer | 20 | 1 à 1 000 | barres | Ancienneté maximum d'un extrême du groupe, en barres. |
tickBreakoutMargin | integer | 1 | 0 à 100 | ticks | Dépassement toléré au-delà de l'extrême du groupe de barres. |
tickGrouping | integer | 1 | 1 à 100 | ticks | Profondeur du mur sous ou au-dessus de l'extrême. |
timeframe | integer | 60 | 15 · 60 · 300 | — | Durée des barres, en secondes : 15, 60 ou 300. |
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.
signal envoyé terminé
Signal de la barre close barStartNs.
Format de l’id : <barStartNs>. Chaque objet est envoyé une seule fois, déjà terminé (final: true).
| Champ | Type | Unité | Présent | Description |
|---|---|---|---|---|
cells | integer | — | toujours | Nombre de cellules qui qualifient le mur. |
price | integer | ticks | toujours | Extrême testé par la barre. |
side | string · buy | sell | — | toujours | sell : mur vendeur au plus haut ; buy : mur acheteur au plus bas. |
sideVolume | integer | contrats | toujours | Volume du côté dominant dans ces cellules. |
volume | integer | contrats | toujours | Volume des cellules du mur. |
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.
{
"t": "upsert",
"id": "1790217915000000000",
"final": true,
"ts": "1790217934086470651",
"data": {
"price": 122988,
"side": "sell",
"volume": 72,
"sideVolume": 60,
"cells": 4
}
}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
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://fathomcharts.com/schemas/liquidity-walls/params.json",
"type": "object",
"additionalProperties": false,
"properties": {
"minClusterVolume": {
"description": "Volume total que les cellules du mur doivent dépasser (seuil exclu).",
"type": "integer",
"default": 400,
"minimum": 0,
"maximum": 10000000
},
"minDeltaPercent": {
"description": "Part minimum du côté dominant dans le volume des cellules du mur.",
"type": "integer",
"default": 70,
"minimum": 0,
"maximum": 100
},
"minPerBarVolume": {
"description": "Volume minimum d'une cellule pour qu'elle soit retenue.",
"type": "integer",
"default": 100,
"minimum": 0,
"maximum": 1000000
},
"minimumBars": {
"description": "Nombre minimum de cellules retenues.",
"type": "integer",
"default": 2,
"minimum": 2,
"maximum": 100
},
"nearnessBars": {
"description": "Ancienneté maximum d'un extrême du groupe, en barres.",
"type": "integer",
"default": 20,
"minimum": 1,
"maximum": 1000
},
"tickBreakoutMargin": {
"description": "Dépassement toléré au-delà de l'extrême du groupe de barres.",
"type": "integer",
"default": 1,
"minimum": 0,
"maximum": 100
},
"tickGrouping": {
"description": "Profondeur du mur sous ou au-dessus de l'extrême.",
"type": "integer",
"default": 1,
"minimum": 1,
"maximum": 100
},
"timeframe": {
"description": "Durée des barres, en secondes : 15, 60 ou 300.",
"type": "integer",
"default": 60,
"enum": [
15,
60,
300
]
}
}
}Schéma du champ data
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://fathomcharts.com/schemas/liquidity-walls/data.json",
"title": "signal",
"type": "object",
"additionalProperties": false,
"properties": {
"cells": {
"description": "Nombre de cellules qui qualifient le mur.",
"type": "integer"
},
"price": {
"description": "Extrême testé par la barre.",
"type": "integer"
},
"side": {
"description": "`sell` : mur vendeur au plus haut ; `buy` : mur acheteur au plus bas.",
"type": "string",
"enum": [
"buy",
"sell"
]
},
"sideVolume": {
"description": "Volume du côté dominant dans ces cellules.",
"type": "integer"
},
"volume": {
"description": "Volume des cellules du mur.",
"type": "integer"
}
},
"required": [
"price",
"side",
"volume",
"sideVolume",
"cells"
]
}