Fisher Transform 指标:公式、参数与读法
Fisher 变换(Fisher Transform)由 John Ehlers 于 2002 年发表,它先对K线中点在近期区间中的位置重新缩放,再把这个位置代入反双曲正切函数,从而拉伸刻度的两端。线性震荡指标会压平成平台的转折点,在这里会显示为尖锐的峰值。
Senzoukria · 指标 · Updated September 2026
Fisher Transform — 动量, 显示在图表下方的独立面板中.
Fisher Transform 测量的是什么
输入是K线中点 (high + low) / 2,而不是收盘价,其位置在最近 N 根K线(默认 9 根)的最低中点与最高中点之间确定。这个 0 到 1 的位置先以零为中心,再送入第一级递推,使用 Ehlers 的固定系数:新值 0.66、前值 0.67;结果被限制在正负 0.999 以内,然后进行变换,而变换本身又保留自己前一个输出的一半。这些常数都不随所选周期缩放,也都不作为参数开放。限幅是结构性的,而不是装饰性的:第一级递推恰好在正负 1 处有不动点,一串贴在窗口边缘的K线会收敛到这个边界,而变换在那里是无穷大——没有限幅的话,一次持续的推动就会输出无穷大,第二级递推会把 NaN 带到图表的剩余部分。两级递推都从第一根拥有完整窗口的K线上的零开始;当窗口完全走平时,没有位置可以计算,指标不输出数值并保持状态不变,而不是重复上一个读数。
公式:代码中的实现
这不是别处常见的定义,而是所发布代码实际计算的内容,记录在实现旁边:
Fisher Transform (John Ehlers, 2002) — rend GAUSSIENNE la distribution du prix normalisé, pour que les extrêmes deviennent lisibles : ratio = (hl2 − min(hl2, N)) / (max(hl2, N) − min(hl2, N)) ∈ [0, 1] value ← clamp( 0.66·(ratio − 0.5) + 0.67·value₋₁ , ±0.999 ) fish ← 0.5·ln( (1 + value)/(1 − value) ) + 0.5·fish₋₁ POURQUOI : les prix ne sont PAS gaussiens — leurs extrêmes sont fréquents et un oscillateur linéaire les écrase. La transformée de Fisher (= atanh) étire violemment les bords de [−1, 1] : un `value` de 0.95 sort à 1.83, un 0.999 à 3.80. Les retournements deviennent des pics nets au lieu de plateaux. LES DEUX LISSAGES sont EXPONENTIELS À FACTEUR FIXE (ce ne sont PAS des EMA de période N) : 0.67 sur la normalisation, 0.5 sur la transformée — les coefficients d'Ehlers, non paramétrés pour rester à parité TradingView. `value` et `fish` sont amorcés à 0 (convention d'Ehlers) au premier point où la fenêtre de N barres est pleine. LE CLAMP À ±0.999 EST STRUCTUREL, pas cosmétique : la récurrence value ← 0.33·s + 0.67·value₋₁ (s = ±1) a pour points fixes ±1 exactement, et une série de barres toutes au plus haut de leur fenêtre y converge géométriquement (1 − value = 0.67^k). Or atanh(±1) = ±∞ : sans borne, une poussée directionnelle assez longue ferait sortir un `Infinity`, puis un `NaN` par la récurrence de `fish`, et l'indicateur mourrait DÉFINITIVEMENT pour le reste du chart. Le clamp plafonne la sortie à ln(1999) ≈ 7.60 — variante « clamp » et non le `round_()` de TradingView (qui rabat tout |x| > 0.99 sur 0.999, donc peut DIMINUER une valeur en la bornant) : ici, seules les valeurs qui dépassent réellement 0.999 sont ramenées, la transformation reste monotone. Défaut N=9 (Ehlers). Fenêtre PLATE (max == min) → null ET état FIGÉ (ni valeur inventée, ni report). Warm-up : i ≥ N − 1.
如何解读
- 零轴把位于 N 根K线区间上半部分的中点与位于下半部分的中点分开。
- 由于两端被拉伸,短暂地达到很大的绝对值,描述的是中点到达了其窗口的极端,而不是价格成比例地大幅变动。
- 线条的急剧反转是可读的事件;这一变换正是为了把缓慢的转弯变成可见的拐点。
- 接近约 7.60 上限的读数,描述的是中点已经连续若干根K线停在窗口边缘,此时线条不再能区分相邻的K线。
- 刻度没有量纲,因此同一读数在任何品种上都表示相同的相对位置——但只是相对于该图表自身的 N 根K线区间。
参数与默认值
周期默认为 9,可设为 2 到 200;它只控制高低归一化所用的回看。窗口越短,越频繁地到达极值,因为价格只需超过少数几根K线就能处于区间边缘。平滑系数固定为 Ehlers 的取值,无法更改。
| 参数 | 类型 | 默认值 | 取值范围 |
|---|---|---|---|
| Period | number | 9 | 2 – 200 |
它无法显示的内容
Fisher 变换是对价格在窗口中位置的重新缩放。它不包含成交量、成交规模和订单流,也无法区分缓慢漂移到新高与激进推升到新高。两级递推都带有状态,因此每个读数都依赖于之前的读数,市场状态的突变会较晚体现。极值在构造上就很常见——这正是设计目标——因此极值本身并不罕见。在最高中点与最低中点相等的走平窗口中,位置未定义,线条就会中断。
相关指标
其他语言版本
Frequently asked questions
- 为什么 Fisher 变换在 7.6 左右就不再上升?
- 送入变换的数值被限制在绝对值 0.999,而 0.999 的反双曲正切约为 3.80。绘出的线条每根K线都加上自身前值的一半,因此持续的单边行情会稳定在其两倍,约 7.60——恰好是 ln(1999)。之所以限幅,是因为变换在恰好等于 1 时为无穷大,而长时间的单边行情会把内部数值推到任意接近 1 的位置。
- Fisher 变换使用收盘价吗?
- 不使用。它使用K线中点,即最高价与最低价的平均,这是 Ehlers 的原始设定。因此收盘价相同但区间不同的两根K线会产生不同的输入。
- Fisher 变换应该用什么周期?
- 默认为 9 根K线,即 Ehlers 公布的数值。回看越短,线条几乎在每次摆动中都会触及极值,因为需要超越的K线更少;回看越长,极端读数越少、出现得也越慢。这个设置只改变归一化窗口——内部平滑常数保持不变。