From e17b00172a5414407768794ff7aeee899f5b2b0c Mon Sep 17 00:00:00 2001 From: Miha Kralj Date: Tue, 17 Mar 2026 15:31:58 -0700 Subject: [PATCH] =?UTF-8?q?docs:=20standardize=20.md=20template=20?= =?UTF-8?q?=E2=80=94=20add=20PineScript=20links,=20blockquotes,=20bullet?= =?UTF-8?q?=20summaries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Eeo.md: full rewrite to canonical template (blockquote, table, 3 bullets, paragraph) - Ac.md: add PineScript row - Ao.md: add PineScript row - Fisher04.md: add table, PineScript row, 3 bullets, paragraph - TtmWave.md: add PineScript row - Dstoch.md: full rewrite header (blockquote, canonical table, 3 bullets, paragraph) - Net.md: add blockquote, canonical table, PineScript row, 3 bullets, paragraph --- lib/filters/net/Net.md | 25 ++++++++++++++--------- lib/oscillators/ac/Ac.md | 1 + lib/oscillators/ao/Ao.md | 1 + lib/oscillators/dstoch/Dstoch.md | 29 ++++++++++++++------------- lib/oscillators/eeo/Eeo.md | 30 ++++++++++++++++------------ lib/oscillators/fisher04/Fisher04.md | 16 +++++++++++++-- lib/oscillators/ttm_wave/TtmWave.md | 1 + 7 files changed, 65 insertions(+), 38 deletions(-) diff --git a/lib/filters/net/Net.md b/lib/filters/net/Net.md index 156a0ae4..e8398eb9 100644 --- a/lib/filters/net/Net.md +++ b/lib/filters/net/Net.md @@ -1,15 +1,22 @@ # NET: Ehlers Noise Elimination Technology -**NET** applies Kendall Tau-a rank correlation to a rolling window of the input series. It measures the degree of monotonic trend: +1 means perfectly rising, −1 means perfectly falling, 0 means no trend. Unlike Pearson correlation (used in CTI), Kendall tau is nonparametric and robust to outliers. +> *Rank the bars. Count the agreements. If the market is trending, the ranks will tell you — without a single moving average.* -| Property | Value | -| :------------- | :--------------------------- | -| **Category** | Filters | -| **Author** | John F. Ehlers | -| **Source** | TASC, December 2020 | -| **Parameters** | period (int, default 14, ≥ 2) | -| **Output** | double, bounded [−1, +1] | -| **Inputs** | Single series (Close, HL2, etc.) | +| Property | Value | +| ---------------- | -------------------------------- | +| **Category** | Filter | +| **Inputs** | Source (close) | +| **Parameters** | `period` (default 14, ≥ 2) | +| **Outputs** | Single series (Net) | +| **Output range** | [-1, +1] | +| **Warmup** | `period` bars | +| **PineScript** | [net.pine](net.pine) | + +- NET applies Kendall Tau-a rank correlation to a rolling window, measuring the degree of monotonic trend: +1 = perfectly rising, −1 = perfectly falling, 0 = no trend. Unlike Pearson correlation (CTI), Kendall tau is nonparametric and robust to outliers. +- **Similar:** [CTI](../../oscillators/cti/Cti.md) | **Complementary:** Moving averages for trend confirmation | **Trading note:** Values above +0.5 or below −0.5 indicate strong monotonic trend; zero crossings signal direction changes. +- No external validation libraries implement NET. Validated through self-consistency and behavioral testing. + +NET measures the degree of monotonic ordering within a rolling window using Kendall's Tau-a concordance statistic. For each pair of bars in the window, it checks whether both price and time agree on direction (concordant) or disagree (discordant). The normalized difference (concordant − discordant) / total_pairs produces a bounded [-1, +1] output with zero lag — no smoothing filters involved. ## Historical Context diff --git a/lib/oscillators/ac/Ac.md b/lib/oscillators/ac/Ac.md index d33b8461..44290c2b 100644 --- a/lib/oscillators/ac/Ac.md +++ b/lib/oscillators/ac/Ac.md @@ -10,6 +10,7 @@ | Outputs | double (single value) | | Output range | Unbounded, centered at zero | | Warmup | `slowPeriod + acPeriod - 1` bars (default: 38) | +| PineScript | [ac.pine](ac.pine) | ### Key takeaways diff --git a/lib/oscillators/ao/Ao.md b/lib/oscillators/ao/Ao.md index f4e6d34e..359f36a1 100644 --- a/lib/oscillators/ao/Ao.md +++ b/lib/oscillators/ao/Ao.md @@ -10,6 +10,7 @@ | Outputs | double (single value) | | Output range | Unbounded, centered at zero | | Warmup | `slowPeriod` bars (default: 34) | +| PineScript | [ao.pine](ao.pine) | ### Key takeaways diff --git a/lib/oscillators/dstoch/Dstoch.md b/lib/oscillators/dstoch/Dstoch.md index 863ffac4..2df696e3 100644 --- a/lib/oscillators/dstoch/Dstoch.md +++ b/lib/oscillators/dstoch/Dstoch.md @@ -1,21 +1,22 @@ -# DSTOCH — Double Stochastic (Bressert DSS) +# DSTOCH: Double Stochastic (Bressert DSS) -## Overview +> *Apply the Stochastic formula twice — once to price, once to the result — and the oscillator sharpens from a gentle hill into a decisive cliff.* -**DSTOCH** (Double Stochastic / DSS Bressert) applies the Stochastic oscillator formula twice with EMA smoothing between stages, producing a momentum indicator bounded between 0 and 100. Developed by Walter Bressert, it is more responsive than standard Stochastic while remaining bounded. +| Property | Value | +| ---------------- | -------------------------------- | +| **Category** | Oscillator | +| **Inputs** | High, Low, Close | +| **Parameters** | `period` (default 21) | +| **Outputs** | Single series (Dstoch) | +| **Output range** | [0, 100] | +| **Warmup** | `period` bars | +| **PineScript** | [dstoch.pine](dstoch.pine) | -| Property | Value | -| :--------- | :-------------- | -| Category | Oscillator | -| Output | Single (DSS) | -| Range | [0, 100] | -| Default | period = 21 | -| Input | TBar (HLC) | -| Hot after | period bars | +- DSTOCH (Double Stochastic / DSS Bressert) applies the Stochastic oscillator formula twice with EMA smoothing between stages, producing a momentum indicator bounded between 0 and 100 that is more responsive than standard Stochastic. +- **Similar:** [Stoch](../stoch/Stoch.md), [StochRSI](../stochrsi/Stochrsi.md) | **Complementary:** ADX for trend confirmation | **Trading note:** Overbought above 80, oversold below 20; sharper transitions than single Stochastic. +- No external validation libraries implement DSS Bressert. Validated through self-consistency and behavioral testing. -**Source:** [Dstoch.cs](Dstoch.cs) · [PineScript](dstoch.pine) - ---- +DSTOCH applies the Stochastic normalization formula to price, then applies it again to the normalized result with EMA smoothing in between. This double application sharpens the oscillator's transitions, making overbought/oversold signals more decisive while remaining bounded to [0, 100]. ## Formula diff --git a/lib/oscillators/eeo/Eeo.md b/lib/oscillators/eeo/Eeo.md index 7d784b39..6e9c05d7 100644 --- a/lib/oscillators/eeo/Eeo.md +++ b/lib/oscillators/eeo/Eeo.md @@ -1,22 +1,26 @@ # EEO: Ehlers Elegant Oscillator -A bounded zero-crossing oscillator that applies the Inverse Fisher Transform to RMS-normalized 2-bar momentum, then smooths the result with a 2-pole Super Smoother filter. Output is approximately bounded to [-1, +1]. +> *Where DSO shouts through a megaphone, EEO whispers through a compressor — the Inverse Fisher Transform tames extremes into a clean bounded signal.* -| Property | Value | -|:-------------- |:--------------------------------------------- | -| **Category** | Oscillators | -| **Author** | John F. Ehlers | -| **Source** | TASC, February 2022 | -| **Article** | "An Elegant Oscillator: Inverse Fisher Transform Redux" | -| **Input** | Single series (Close) | -| **Parameters** | BandEdge (default 20) | -| **Output** | Bounded ≈ [-1, +1] | -| **Hot after** | 50 + BandEdge bars | -| **PineScript** | [eeo.pine](eeo.pine) | +| Property | Value | +| ---------------- | -------------------------------- | +| **Category** | Oscillator | +| **Inputs** | Source (close) | +| **Parameters** | `bandEdge` (default 20) | +| **Outputs** | Single series (Eeo) | +| **Output range** | Bounded ≈ [-1, +1] | +| **Warmup** | `50 + bandEdge` bars | +| **PineScript** | [eeo.pine](eeo.pine) | + +- EEO (Elegant Oscillator) applies the Inverse Fisher Transform (tanh) to RMS-normalized 2-bar momentum, then smooths the result with a 2-pole Super Smoother filter, producing a bounded zero-crossing oscillator. +- **Similar:** [DSO](../dso/Dso.md), [RSIH](../rsih/Rsih.md) | **Complementary:** ADX for trend confirmation | **Trading note:** Output bounded ≈ [-1, +1]; ±0.5 levels indicate strong momentum. Unlike DSO (unbounded), EEO compresses extremes via tanh. +- No external validation libraries implement EEO. Validated through self-consistency and behavioral testing. + +EEO is Ehlers' 2022 refinement of his earlier DSO (2018). Where DSO applies the Fisher Transform (arctanh) to expand a normalized signal, EEO applies the **Inverse Fisher Transform** (tanh) to compress it. The IFT naturally bounds the output to [-1, +1] without the ±0.99 clamping that DSO requires. A Super Smoother post-filter then removes residual noise. The fixed 50-bar RMS normalization window provides a stable volatility baseline independent of the BandEdge parameter. ## Historical Context -Ehlers' 2022 "Elegant Oscillator" is a refinement of his earlier DSO (2018). Where DSO applies the Fisher Transform (arctanh) to expand a normalized signal, EEO applies the **Inverse Fisher Transform** (tanh) to compress it. The IFT naturally bounds the output to [-1, +1] without needing the ±0.99 clamping that DSO requires. A Super Smoother post-filter then removes residual noise. +John F. Ehlers published the Elegant Oscillator in the February 2022 issue of *Technical Analysis of Stocks & Commodities* magazine under the title "An Elegant Oscillator: Inverse Fisher Transform Redux." The article presents EEO as a deliberate counterpart to his 2018 Deviation-Scaled Oscillator (DSO). While DSO uses the Fisher Transform (arctanh) to stretch readings near zero into large excursions, EEO uses the Inverse Fisher Transform (tanh) to compress them — producing a naturally bounded output without the artificial clamping that DSO requires. ## Architecture & Physics diff --git a/lib/oscillators/fisher04/Fisher04.md b/lib/oscillators/fisher04/Fisher04.md index 0e7bec3d..58af598f 100644 --- a/lib/oscillators/fisher04/Fisher04.md +++ b/lib/oscillators/fisher04/Fisher04.md @@ -2,9 +2,21 @@ > *The Fisher Transform provides clear, unambiguous turning points that make it possible to identify trend reversals.* -## Introduction +| Property | Value | +| ---------------- | -------------------------------- | +| **Category** | Oscillator | +| **Inputs** | Source (close) | +| **Parameters** | `period` (default 9) | +| **Outputs** | Single series (Fisher04) | +| **Output range** | Unbounded (typically ±3) | +| **Warmup** | `period` bars | +| **PineScript** | [fisher04.pine](fisher04.pine) | -The Fisher04 indicator implements the revised Fisher Transform from Chapter 1 of Ehlers' 2004 book *Cybernetic Analysis for Stocks and Futures*. It converts price data into a Gaussian normal distribution using the inverse hyperbolic tangent (arctanh), producing sharp turning-point signals. This 2004 revision uses wider normalization bandwidth, gentler IIR smoothing, and a reduced arctanh multiplier compared to the original 2002 TASC article, resulting in a smoother oscillator with less noise. +- Fisher04 implements the revised Fisher Transform from Ehlers' 2004 *Cybernetic Analysis for Stocks and Futures*, converting price data to a Gaussian distribution via arctanh with wider normalization and gentler IIR smoothing than the original 2002 article. +- **Similar:** [Fisher](../fisher/Fisher.md), [RRSI](../rrsi/Rrsi.md) | **Complementary:** Moving averages for trend confirmation | **Trading note:** Unbounded oscillator; values beyond ±2 indicate extremes. Uses 2004 coefficients (1.0 normalization, 0.5 IIR, 0.25 arctanh multiplier) — distinct from the 2002 version. +- No external validation libraries implement the 2004 Fisher variant. Validated through self-consistency and behavioral testing. + +Fisher04 uses wider normalization bandwidth, gentler IIR smoothing (0.5 vs 0.67 feedback), and a halved arctanh multiplier (0.25 vs 0.5) compared to the original 2002 TASC formulation. The result is a smoother oscillator with less noise while retaining the sharp turning-point characteristics of the Fisher Transform. ## Historical Context diff --git a/lib/oscillators/ttm_wave/TtmWave.md b/lib/oscillators/ttm_wave/TtmWave.md index 51d0a272..bbb90efb 100644 --- a/lib/oscillators/ttm_wave/TtmWave.md +++ b/lib/oscillators/ttm_wave/TtmWave.md @@ -10,6 +10,7 @@ | **Outputs** | WaveA1, WaveA2, WaveB1, WaveB2, WaveC1, WaveC2 (`Last` = Wave1 = WaveA2) | | **Output range** | Unbounded (MACD histograms in price units) | | **Warmup period** | 752 bars | +| **PineScript** | [ttm_wave.pine](ttm_wave.pine) | ### Key takeaways