Indicateur DEMA : formule, réglages et lecture
La DEMA (Double Exponential Moving Average, Patrick Mulloy, 1994) est une ligne de prix lissée, construite à partir de deux moyennes exponentielles combinées de façon à annuler une partie du retard d'une EMA simple. Elle se calcule comme deux fois l'EMA de la clôture moins l'EMA appliquée à cette première EMA, et se trace sur le graphique des prix.
Senzoukria · Indicateurs · Updated September 2026
DEMA — Moyennes et volatilité, sur le graphique des prix.
Ce que mesure DEMA
Les deux étages utilisent l'EMA du catalogue : initialisée par la moyenne simple des N premiers échantillons, puis mise à jour avec un facteur de lissage de 2 / (N + 1). Le second étage ne porte que sur la partie du premier réellement définie, si bien qu'aucune valeur n'est inventée tant que la première EMA est encore en phase de chauffe. Avec une période N, le résultat n'existe donc qu'à partir de l'indice de barre 2 x (N - 1), soit deux fois la chauffe d'une EMA simple. Si l'étage amont renvoyait un trou après son propre démarrage, l'implémentation refuse d'interpoler et ne renvoie rien plutôt que de tracer une ligne fondée sur une entrée défectueuse.
La formule, telle qu’implémentée
Ce n'est pas la définition habituelle ailleurs : c'est ce que calcule le code livré, documenté à côté de son implémentation :
EMA_N appliquée au SUFFIXE défini d'une série à préfixe null (sortie d'un étage EMA/lissage précédent — suffixe contigu par construction). Permet EMA(EMA(x)) sans inventer de valeur pendant le warm-up de l'étage amont. Défensif : un null APRÈS le début du suffixe (étage amont incohérent) → tout null, on ne trace rien de faux. */ function emaOverSuffix( values: ReadonlyArray<number | null>, period: number, ): Array<number | null> { const out: Array<number | null> = new Array(values.length).fill(null); let start = 0; while (start < values.length && values[start] === null) start++; if (start >= values.length) return out; const defined: number[] = []; for (let i = start; i < values.length; i++) { const v = values[i]; if (v === null) return out; // suffixe non contigu → dégradation totale defined.push(v); } const e = emaSeries(defined, period); for (let j = 0; j < e.length; j++) out[start + j] = e[j]; return out; } /** Moindres carrés y = a + b·t sur la fenêtre de n valeurs se terminant à l'indice i (t = 0 pour la plus ancienne, t = n−1 pour la courante). Sommes fermées : Σt = n(n−1)/2, Σt² = n(n−1)(2n−1)/6. n = 1 → b = 0. */ function linFit( values: readonly number[], i: number, n: number, ): { a: number; b: number } { const sumT = (n * (n - 1)) / 2; const sumT2 = (n * (n - 1) * (2 * n - 1)) / 6; let sumY = 0; let sumTY = 0; for (let t = 0; t < n; t++) { const y = values[i - n + 1 + t]; sumY += y; sumTY += t * y; } const denom = n * sumT2 - sumT * sumT; // > 0 dès n ≥ 2 const b = denom > 0 ? (n * sumTY - sumT * sumY) / denom : 0; const a = (sumY - b * sumT) / n; return { a, b }; } function periodOf( params: Record<string, unknown>, key: string, fallback: number, floor = 1, ): number { return Math.max(floor, Math.floor(numParam(params, key, fallback))); } // ── Défs ──────────────────────────────────────────────────────────────────── /** DEMA (Patrick Mulloy, 1994) : DEMA_N = 2·EMA_N(close) − EMA_N(EMA_N(close)) EMA du catalogue : graine = SMA des N premiers échantillons, α = 2/(N+1) (parité TradingView/ATAS). Le double étage compense le lag de l'EMA simple. Défini à partir de l'indice 2(N−1) — null avant. Défaut N=20.
Comment le lire
- Attendez-vous à ce que la ligne tourne plus tôt qu'une EMA de même période, et qu'elle dépasse davantage le prix lors d'un retournement brutal.
- Retrancher une copie lissée du lissage permet à la ligne de sortir brièvement de la fourchette des clôtures récentes ; c'est une propriété de la construction, pas une anomalie.
- L'événement utile ici est le changement de pente. Le croisement du prix avec une ligne qui extrapole déjà est le signal le plus bruité.
- Placez côte à côte une DEMA et une EMA de même période : l'écart entre les deux s'élargit avec la force du mouvement en cours et se referme dans les phases calmes.
- Sur des périodes courtes, le double étage amplifie les données les plus récentes et la ligne change alors souvent de direction.
Paramètres et valeurs par défaut
La période vaut 20 par défaut, comme l'EMA du catalogue, et va de 1 à 500. Une période courte rend la compensation du retard agressive et la ligne nerveuse ; une période longue rétablit la stabilité au prix de la réactivité pour laquelle la construction a été conçue. Augmenter la période repousse aussi la première barre tracée deux fois plus loin vers la droite qu'avec une EMA simple.
| Paramètre | Type | Par défaut | Bornes |
|---|---|---|---|
| Period | number | 20 | 1 – 500 |
Ce qu’il ne montre pas
La réduction du retard se paie en dépassement : après un mouvement rapide qui s'arrête, la DEMA peut continuer d'indiquer l'ancienne direction une barre ou deux au-delà des clôtures qui l'ont produite. Sa seule entrée est la clôture : rien de la répartition bid/ask du volume échangé ne lui parvient. Elle exige aussi un long historique ininterrompu avant de produire quoi que ce soit, ce qui compte sur un graphique fraîchement chargé ou lorsque la profondeur d'historique disponible pour ce contrat est limitée par ce que fournit votre fournisseur de données.
Indicateurs liés
- SMA — Moyennes et volatilité
- EMA — Moyennes et volatilité
- WMA — Moyennes et volatilité
- Hull MA — Moyennes et volatilité
- ATR (Wilder) — Moyennes et volatilité
- Bollinger — Moyennes et volatilité
Cette page dans d’autres langues
Frequently asked questions
- En quoi la DEMA diffère-t-elle d'une moyenne mobile lissée deux fois ?
- Appliquer deux fois une EMA rend la ligne plus lente, pas plus rapide. La DEMA prend deux fois la première EMA et en retranche la seconde : le double lissage sert de terme de correction et non de filtrage supplémentaire. Le résultat réagit plus tôt qu'une EMA simple de même période.
- Pourquoi la DEMA est-elle vide au début de mon graphique ?
- Chaque étage exponentiel a besoin de sa propre chauffe, et le second ne démarre que là où le premier est défini. Avec la période par défaut de 20, la première valeur tracée tombe à l'indice de barre 38, et rien n'est estimé avant ce point.
- La DEMA peut-elle dépasser la plus haute clôture récente ?
- Oui, et c'est attendu. Comme la seconde EMA est retranchée de deux fois la première, le résultat est une extrapolation et non une moyenne pondérée de la fenêtre : il n'est donc pas borné par les clôtures qui ont servi à le calculer.