Engulfing 指标:公式、参数与读法

吞没形态(Engulfing)标记实体完全包含前一根K线实体的K线,即其开盘与收盘中的较低者小于等于前一根的较低者,较高者大于等于前一根的较高者。只比较实体——影线不参与——标记的方向取自被标记的K线本身。

Senzoukria · 指标 · Updated September 2026


Engulfing 结构与交易时段, 叠加在价格图上.

Engulfing 测量的是什么

包含关系的判断包含边界,因此一个正好触及前一根开盘或收盘的实体仍算吞没。这一选择符合拍卖的读法——当前实体覆盖了前一根K线所接受的整个区域——也避免在离散的 tick 价格网格上漏掉最清晰的吞没,因为在这种网格上完全相等很常见。方向严格取自当前实体:收在开盘之上的K线标为看涨,箭头在其最低价;收在开盘之下的K线标为看跌,箭头在其最高价;收盘正好等于开盘的K线即使通过了包含判断,也不产生标记。与教科书定义有一处有意的不同:不要求前一根K线颜色相反。包含关系是可测量的事实;按前一根K线的方向过滤属于解读,留给读者自行判断。图表上的第一根K线永远不会被标记,因为它没有可吞没的对象。

公式:代码中的实现

这不是别处常见的定义,而是所发布代码实际计算的内容,记录在实现旁边:

Période entière ≥ `min` depuis les params (garde-fou UI, même helper que momentum.ts). */ function intParam( params: Record<string, unknown>, key: string, fallback: number, min = 1, ): number { return Math.max(min, Math.floor(numParam(params, key, fallback))); } function boolParam( params: Record<string, unknown>, key: string, fallback: boolean, ): boolean { const v = params[key]; return typeof v === "boolean" ? v : fallback; } /** Bas du CORPS (open/close) — le corps ignore les mèches par définition. */ function bodyLow(b: FootprintBar): number { return Math.min(b.open, b.close); } function bodyHigh(b: FootprintBar): number { return Math.max(b.open, b.close); } function bodySize(b: FootprintBar): number { return Math.abs(b.close - b.open); } function barRange(b: FootprintBar): number { return b.high - b.low; } function upperWick(b: FootprintBar): number { return b.high - bodyHigh(b); } function lowerWick(b: FootprintBar): number { return bodyLow(b) - b.low; } function markersOut(markers: SeriesMarker[]): SeriesOutput { return { shape: "markers", markers }; } function histOut( points: HistogramPoint[], positiveColor: string, negativeColor: string, ): SeriesOutput { return { shape: "histogram", points, positiveColor, negativeColor }; } /** Pivot HAUT strict sur `lr` barres de CHAQUE côté : high[i] > high[j] pour tout j de la fenêtre. STRICT des deux côtés — choix documenté : un plateau (double top exact dans la fenêtre) ne produit AUCUN pivot plutôt que deux pivots collés qui feraient double emploi sur le chart et fausseraient le « dernier swing » du break of structure. `false` si la fenêtre déborde du tableau : un pivot n'est confirmable qu'avec ses `lr` barres de droite CHARGÉES — on ne devine pas la suite. / function isSwingHigh( bars: readonly FootprintBar[], i: number, lr: number, ): boolean { if (i - lr < 0 || i + lr >= bars.length) return false; const h = bars[i].high; for (let j = i - lr; j <= i + lr; j++) { if (j !== i && bars[j].high >= h) return false; } return true; } /** Pivot BAS strict — miroir exact d'`isSwingHigh` (mêmes gardes de bord). */ function isSwingLow( bars: readonly FootprintBar[], i: number, lr: number, ): boolean { if (i - lr < 0 || i + lr >= bars.length) return false; const l = bars[i].low; for (let j = i - lr; j <= i + lr; j++) { if (j !== i && bars[j].low <= l) return false; } return true; } // ── Defs ──────────────────────────────────────────────────────────────────── /** Engulfing — le CORPS de la barre englobe entièrement celui de la précédente : bodyLow[i] ≤ bodyLow[i−1] ET bodyHigh[i] ≥ bodyHigh[i−1] haussière ssi close > open (marqueur arrow-up au LOW) baissière ssi close < open (marqueur arrow-down au HIGH) Contenance INCLUSIVE (≤/≥) : un corps qui touche exactement l'open ou le close précédent l'englobe — c'est la lecture de l'auction (le corps couvre toute la zone d'acceptation de la barre d'avant), et l'exiger strictement ferait rater les engulfings les plus nets sur une grille de ticks discrète. Le SENS vient du corps courant, strictement : close == open (doji) → aucun marqueur, même si la contenance passe. Choix assumé : on n'exige PAS que la barre précédente soit de sens opposé (la définition « livre » d'un engulfing de retournement). La contenance du corps est le fait mesurable ; filtrer sur le sens de la barre d'avant est une interprétation qu'on laisse au lecteur du chart. Première barre → rien (pas de précédente à englober).

如何解读

  • 在一根小实体K线之后出现标记,表示一个更宽的实体覆盖了前一根K线在开盘与收盘之间所接受的整个价格区域。
  • 如果你想要经典的反转读法,请自己检查被吞没的K线是否颜色相反——指标不会替你做这个过滤。
  • 出现在既有趋势中段的吞没K线,往往只是一根更大的延续K线;它相对于时段结构的位置,比形态本身更能说明问题。
  • 把吞没实体的大小与该品种的典型实体比较:吞没一根非常小的前K线,门槛很低。
  • 这个形态只是价格几何——请查看被标记K线的足迹图或 delta,判断这波移动来自主动买方、主动卖方,还是被动吸收。

它无法显示的内容

判断只涉及四个价格,因此参与度很高的吞没K线与几乎无人成交的吞没K线,在图表上看起来完全一样。在快速行情中,当一根宽幅K线远大于前面几根小K线时,吞没会变得常见,被越过的实体也相应很小。由于不对前一根K线的方向做过滤,一些标记描述的是延续而不是反转,区分两者是读者的工作。标记记录的是一个已经完成的形状,不对随后的走势做任何确认。

浏览全部指标

其他语言版本

Frequently asked questions

吞没K线也必须吞没影线吗?
这里不需要。判断只比较实体:当前K线开盘到收盘的范围,必须包含前一根K线开盘到收盘的范围。按定义影线会被忽略,因此即使前一根K线的最高价或最低价超出当前K线,也可能被标为吞没。
前一根K线必须颜色相反吗?
本指标不要求。它标记任何实体包含前一实体的K线,然后仅根据当前K线确定方向。这是有意的选择:包含关系是可测量的事实,而要求前一根K线颜色相反是叠加在其上的解读,你可以通过查看图表自行应用。
为什么我的K线明明吞没了前一根,却没有被标记?
最可能的原因是这根K线收盘正好等于开盘。没有实体方向的K线即使满足包含条件也不产生标记,因为指标无法为箭头分配方向。另一个常见情况是图表上的第一根K线,它没有可吞没的前一根K线。

Keep reading