Delta at High 指标:公式、参数与读法
高点 Delta(Delta at High)只衡量一根 K 线顶部几个 tick 内的订单流压力,而不是整根 K 线。它把 K 线最高价下方一个以 tick 计的窗口内(默认 3 个 tick)每个价位的主动买量减去主动卖量加总,让你看到极值处是谁在交易,而不是整体平均。
Senzoukria · 指标 · Updated September 2026
Delta at High — Delta 净委托量, 显示在图表下方的独立面板中.
Delta at High 测量的是什么
输出是净合约数,而不是比率:窗口内每个价位贡献“主动成交于卖价的量”减去“主动成交于买价的量”,窗口合计值作为每根 K 线的一个柱状值绘出。窗口以最高价下方的 tick 数定义,而不是以价位个数定义,因此只打出了少数零散价格的 K 线,不会悄悄扩大测量区域。求和前价位按整数 tick 键聚合,这意味着落在同一个 tick 上的两条数据只算作一个价位。当品种的 tick 大小未知,或 K 线没有可用价位时,这根 K 线不输出任何点,而不是用零替代。
公式:代码中的实现
这不是别处常见的定义,而是所发布代码实际计算的内容,记录在实现旁边:
Points d'histogramme : `f` rend `null` quand la barre n'a pas d'information — la barre n'émet alors PAS de point (contrat `HistogramPoint` : pas de trou, pas de valeur inventée). */ function histPoints( bars: readonly FootprintBar[], f: (bar: FootprintBar, i: number) => number | null, ): HistogramPoint[] { const out: HistogramPoint[] = []; for (let i = 0; i < bars.length; i++) { const v = f(bars[i], i); if (v !== null) out.push({ time: bars[i].bucketTsNs, value: v }); } return out; } function histOut( points: HistogramPoint[], positiveColor: string, negativeColor: string, ): SeriesOutput { return { shape: "histogram", points, positiveColor, negativeColor }; } /** Un niveau de la barre indexé par sa CLÉ ENTIÈRE (indice de tick quand le tick est connu, quantification 1e-6 sinon — canon : jamais de clé f64). */ type KeyedLevel = { key: number; price: number; buy: number; sell: number; }; /** Niveaux EXPLOITABLES de la barre (canon : qty = 0 et prix non fini exclus), agrégés par clé de prix et rendus en ordre ASCENDANT de prix. L'agrégation par clé est indispensable : deux entrées `levels` au même prix (source qui n'a pas fusionné, ou deux prix distincts qui tombent sur le même tick) ne doivent compter QUE POUR UN niveau — sinon `level-count`, `volume-per-level` et la garde `unique_levels ≥ 2` de l'absorption mentent. / function barLevelsByKey( bar: FootprintBar, tickSize: number | null, ): KeyedLevel[] { const byKey = new Map<number, KeyedLevel>(); for (const lvl of usableLevels(bar)) { const key = priceKey(lvl.price, tickSize); const cur = byKey.get(key); if (cur !== undefined) { cur.buy += lvl.buyVolume; cur.sell += lvl.sellVolume; } else { byKey.set(key, { key, price: lvl.price, buy: lvl.buyVolume, sell: lvl.sellVolume, }); } } return [...byKey.values()].sort((a, b) => a.key - b.key); } /** Delta des N ticks d'un BORD de la barre. bord haut : Σ (buy − sell) des niveaux de clé > maxKey − N bord bas : Σ (buy − sell) des niveaux de clé < minKey + N « N ticks » exige la grille de l'instrument : tick size inconnu → null (on ne convertit JAMAIS un nombre de ticks en nombre de niveaux, une barre creuse ferait diverger les deux). Barre sans niveau exploitable → null. / function edgeDelta( bar: FootprintBar, tickSize: number | null, topTicks: number, edge: "high" | "low", ): number | null { if (tickSize === null || !(tickSize > 0)) return null; const lvls = barLevelsByKey(bar, tickSize); if (lvls.length === 0) return null; const n = Math.max(1, Math.floor(topTicks)); const minKey = lvls[0].key; const maxKey = lvls[lvls.length - 1].key; let delta = 0; for (const lvl of lvls) { const inside = edge === "high" ? lvl.key > maxKey - n : lvl.key < minKey + n; if (inside) delta += lvl.buy - lvl.sell; } return delta; } /** Value Area d'UNE barre (profil de la seule barre courante), algorithme Steidlmayer canonique via `valueArea`. La marche ±1/±2 est en INDICES DE TICK : sans tick size les clés sont quantifiées 1e-6 et « 2 ticks » n'aurait aucun sens → null (canon : dégrader, jamais inventer). */ function barValueArea( bar: FootprintBar, tickSize: number | null, pct: number, ): { vahKey: number; valKey: number } | null { if (tickSize === null || !(tickSize > 0)) return null; const profile: Profile = new Map(); addBarToProfile(profile, bar, tickSize); return valueArea(profile, pct); } // ── Defs ──────────────────────────────────────────────────────────────────── /** Delta des N ticks SUPÉRIEURS de la barre : value = Σ (buy − sell) des niveaux de clé > maxKey − topTicks POURQUOI : le delta global d'une barre mélange ce qui s'est passé au plus haut et au plus bas. Isoler le sommet répond à la seule question qui compte sur un test de résistance — qui a payé l'offre EN HAUT ? Un delta négatif au sommet d'une barre haussière = les acheteurs n'ont pas suivi jusqu'au bout (absorption vendeuse potentielle). Défaut topTicks = 3 : la zone d'extrême usuelle des tests de niveau (1 tick est du bruit d'exécution, au-delà de 3 on remesure la barre entière). Convention : fenêtre en TICKS, pas en niveaux — une barre creuse ne doit pas élargir la zone. Tick size inconnu ou barre sans niveau → PAS de point.
如何解读
- 把高点处的符号与 K 线方向对照。一根阳线顶部几个 tick 的 Delta 为负,说明推动它上涨的买盘没有延续到极值处。
- 阳线高点处明显为正,表示主动买方在区间顶部仍在吃卖价。这描述的是延续行为,而不是目标位或入场点。
- 在同一阻力位的多次试探中持续观察。高点处反复为负,描述的是每次上推都有卖方迎上,但吸收可能失败,价格仍可能穿过。
- 接近零的数值往往意味着极值处几乎没有成交。那里换手很少,无论符号如何,这个读数的分量都很轻。
- 与同一根 K 线的低点 Delta 一起看。两端符号相反,说明这根 K 线两端都有争夺,而不是被单一方向推动。
参数与默认值
Ticks 设置窗口从最高价向下延伸的深度,默认 3,也就是试探价位时常见的极值区;只取 1 个 tick 大多只能捕捉到成交噪音,远超 3 个时,读数就开始重新衡量整根 K 线。该参数可设为 1 到 50,为 K 线跨越很多 tick 的品种留出空间。正值和负值颜色只改变柱状图的显示,不改变数值。
| 参数 | 类型 | 默认值 | 取值范围 |
|---|---|---|---|
| Ticks | number | 3 | 1 – 50 |
它无法显示的内容
该指标统计的是按主动方分类的已成交合约,因此对挂单流动性一无所知:它无法告诉你吸收买盘的卖单挂了多大。极值处几乎没有成交的 K 线会给出很小的数值,看起来像是平衡,实际上是缺少数据。每个值只由一根 K 线单独计算,没有记忆,因此它不会告诉你同一价格在本时段早些时候是否被守住过。它需要带有主动方信息的数据源和已知的 tick 大小;缺少任一项时,这根 K 线会被跳过,而不是被估算。
相关指标
- Delta % — Delta 净委托量
- Session CVD — Delta 净委托量
- Delta momentum — Delta 净委托量
- Delta min/max — Delta 净委托量
- Price/Delta Divergence — Delta 净委托量
- Delta % Histogram — Delta 净委托量
其他语言版本
Frequently asked questions
- 阳线上的高点 Delta 为负意味着什么?
- 意味着在这根 K 线顶部几个 tick 内,成交于买价的合约多于成交于卖价的合约,尽管 K 线收高。冲向高点的过程遇到的是卖盘,而不是由新的买盘推动。这通常被描述为潜在的卖方吸收,但单根 K 线并不能说明价格会反转。
- 高点 Delta 应该用多少个 tick?
- 默认 3 个 tick,覆盖试探价位时常见的极值区。1 个 tick 往往只衡量最后一笔成交附近的噪音,而窗口过大则会逐渐重现整根 K 线的 Delta,失去这个指标的意义。K 线较宽的品种可以使用更深的窗口;该参数可设为 1 到 50。
- 为什么有些 K 线上高点 Delta 是空白的?
- 当无法计算出可信的数值时,指标不绘制任何内容。这发生在品种 tick 大小未知时,因为没有价格网格,以 tick 表示的窗口就没有意义;也发生在剔除零成交量和无效价格后 K 线没有可用价位时。缺失的 K 线表示没有信息,而不是 Delta 为零。