doc headers

This commit is contained in:
Miha Kralj
2026-02-27 07:48:12 -08:00
parent 8a1ba95173
commit 4ab3a7fb53
389 changed files with 6682 additions and 468 deletions
+17
View File
@@ -1,5 +1,22 @@
# ABBER: Aberration Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- ABBER measures price deviation from a central moving average using mean absolute deviation rather than standard deviation, producing dynamic bands ...
- Parameterized by `period`, `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
ABBER measures price deviation from a central moving average using mean absolute deviation rather than standard deviation, producing dynamic bands that adapt to volatility while remaining robust against extreme outliers. Where Bollinger Bands amplify outliers through squaring (the $L^2$ norm), ABBER uses raw absolute differences (the $L^1$ norm), so bands respond to typical price behavior rather than the occasional spike that yanks everything sideways. For a 20-period window with a 2.0 multiplier, ABBER contains approximately 89% of normally-distributed price action, but its real advantage emerges with fat-tailed distributions where standard deviation overreacts to single-bar anomalies.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# ACCBANDS: Acceleration Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period`, `factor` (default 4.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Acceleration Bands construct a volatility envelope using the intra-bar high-low range rather than close-to-close standard deviation, creating chann...
- Parameterized by `period`, `factor` (default 4.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Acceleration Bands construct a volatility envelope using the intra-bar high-low range rather than close-to-close standard deviation, creating channels that accommodate the full price excursion of the underlying asset. Each bar's contribution to band width is normalized by price level ($w = (H-L)/(H+L)$), making the bands scale-invariant across instruments. Three independent Simple Moving Averages of the adjusted high, adjusted low, and close prices form the upper, lower, and middle bands respectively. Headley's original breakout rule declares a trend when price closes outside the bands for two consecutive bars.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# APCHANNEL: Adaptive Price Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (Apchannel) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
### TL;DR
- APCHANNEL applies exponential smoothing independently to price highs and lows, creating a dynamic envelope that "remembers" significant extremes wh...
- No configurable parameters; computation is stateless per bar.
- Output range: Tracks input.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
APCHANNEL applies exponential smoothing independently to price highs and lows, creating a dynamic envelope that "remembers" significant extremes while gradually fading their influence over time. Unlike rigid Donchian channels that drop price extremes abruptly when they exit the lookback window (the "cliff effect"), APCHANNEL decays them smoothly through leaky integration. The result is a channel with continuously sloping boundaries that responds to volatility without the discontinuous jumps that plague fixed-window approaches. The algorithm is $O(1)$ per bar with only two state variables and no buffers.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# APZ: Adaptive Price Zone
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period`, `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- APZ constructs a volatility-adaptive envelope using double-smoothed exponential moving averages with an aggressive smoothing factor derived from $\...
- Parameterized by `period`, `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
APZ constructs a volatility-adaptive envelope using double-smoothed exponential moving averages with an aggressive smoothing factor derived from $\sqrt{\text{period}}$, making it significantly faster than standard EMA-based channels. The center line is a double-EMA of price; the band width is a double-EMA of the high-low range, scaled by a multiplier. Designed specifically for mean-reversion trading in non-trending markets, APZ identifies overbought/oversold extremes where price is likely to reverse rather than continue. A closing price outside the zone signals an immediate overshoot, not a breakout.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# ATRBANDS: Average True Range Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period`, `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- ATR Bands create a volatility-adaptive envelope by projecting Wilder's Average True Range above and below a central Simple Moving Average.
- Parameterized by `period`, `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
ATR Bands create a volatility-adaptive envelope by projecting Wilder's Average True Range above and below a central Simple Moving Average. Unlike fixed-percentage envelopes or standard-deviation bands, ATR Bands use True Range to measure volatility, making them robust for assets with gaps, pre-market moves, and 24/7 trading where the "hidden" volatility between bars is significant. The True Range captures the maximum of intra-bar range, gap-up distance, and gap-down distance, ensuring that overnight gaps contribute fully to band width even when the current bar's open-to-close range is narrow.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# BBANDS: Bollinger Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default DefaultPeriod), `multiplier` (default DefaultMultiplier) |
| **Outputs** | Multiple series (Middle, Upper, Lower, Width, PercentB) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Bollinger Bands construct a volatility-adaptive envelope around a Simple Moving Average using population standard deviation as the width measure.
- Parameterized by `period` (default defaultperiod), `multiplier` (default defaultmultiplier).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Bollinger Bands construct a volatility-adaptive envelope around a Simple Moving Average using population standard deviation as the width measure. The bands expand during high-volatility periods and contract during consolidation, dynamically adapting to changing market conditions. Under Gaussian assumptions, $\pm 2\sigma$ contains approximately 95.4% of price action, but financial returns exhibit fat tails and volatility clustering, so the bands function more as a volatility-normalized reference frame than a strict probability envelope. The derived metrics %B (price position as a fraction of band width) and BandWidth (normalized band spread) extend the raw bands into a complete analytical toolkit.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# DCHANNEL: Donchian Channels
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Donchian Channels track the highest high and lowest low over a fixed lookback period, defining the absolute price boundaries within which an asset ...
- Parameterized by `period`.
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Donchian Channels track the highest high and lowest low over a fixed lookback period, defining the absolute price boundaries within which an asset has traded. Unlike volatility-based bands that compute statistical dispersion, Donchian Channels represent actual historical extremes — the literal "price box." The implementation uses monotonic deques for $O(1)$ amortized sliding-window max/min, ensuring that computing a 500-period channel costs no more than a 20-period one. The midpoint of the upper and lower bands serves as a simple trend bias indicator.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# DECAYCHANNEL: Decay Min-Max Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Decay Channel combines the absolute price boundaries of Donchian Channels with exponential decay toward the midpoint, creating an envelope that exp...
- Parameterized by `period`.
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Decay Channel combines the absolute price boundaries of Donchian Channels with exponential decay toward the midpoint, creating an envelope that expands instantly on new volatility but contracts smoothly during consolidation. While Donchian Channels hold their width until an extreme exits the lookback window, Decay Channel allows the bands to "forget" old extremes over time using a half-life model. The period parameter serves as the half-life: after that many bars without a new extreme, the band has decayed 50% of the distance back toward center. The decayed values are always clamped within Donchian bounds, ensuring they never extrapolate beyond actual price history.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# FCB: Fractal Chaos Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 20) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period + 2` bars |
### TL;DR
- Fractal Chaos Bands filter raw price action through Bill Williams' fractal detection logic, tracking the highest confirmed fractal high and lowest ...
- Parameterized by `period` (default 20).
- Output range: Tracks input.
- Requires `period + 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Fractal Chaos Bands filter raw price action through Bill Williams' fractal detection logic, tracking the highest confirmed fractal high and lowest confirmed fractal low over a lookback period. Unlike Donchian Channels which use every bar's high and low, FCB uses only structurally significant turning points — bars where the middle element of a 3-bar pattern is a local extremum. The result is a "cleaner" channel that ignores transient spikes and focuses on confirmed support and resistance levels. The bands tend to remain flat during trends and step discretely when new structural pivots form, making them useful for identifying genuine breakouts versus noise.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# JBANDS: Jurik Adaptive Envelope Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `phase` (default 0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
### TL;DR
- JBANDS expose the internal adaptive envelope mechanism of the Jurik Moving Average (JMA), producing asymmetric bands that snap instantly to new pri...
- Parameterized by `period`, `phase` (default 0).
- Output range: Tracks input.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
JBANDS expose the internal adaptive envelope mechanism of the Jurik Moving Average (JMA), producing asymmetric bands that snap instantly to new price extremes and decay exponentially during consolidation. Unlike standard volatility bands (Bollinger, Keltner) which maintain symmetric width around a center line, JBANDS feature "snap-and-decay" hysteresis: expansion is instantaneous (plasticity), contraction is gradual (elasticity). The decay rate is dynamically modulated by a two-stage volatility estimator — a 10-bar SMA feeding a 128-bar trimmed mean — making the bands tight during quiet markets and expansive during trends. The center line is the full JMA: a 2-pole IIR filter with phase control and adaptive alpha.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# KCHANNEL: Keltner Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 20), `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period * 2` bars |
### TL;DR
- Keltner Channel constructs a volatility-adaptive envelope by projecting Average True Range above and below an Exponential Moving Average center line.
- Parameterized by `period` (default 20), `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period * 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Keltner Channel constructs a volatility-adaptive envelope by projecting Average True Range above and below an Exponential Moving Average center line. The channel differs from ATR Bands solely in the center line: Keltner uses EMA (faster, more responsive) while ATR Bands use SMA (more stable, more lag). The EMA center combined with ATR width creates a channel that both tracks trend and adapts to volatility, making it one of the most widely used channel indicators for trend-following and mean-reversion strategies. The implementation uses EMA with warmup compensation for accurate early values and Wilder's smoothing (RMA) for ATR.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# MAENV: Moving Average Envelope
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 20), `percentage` (default 1.0), `maType` (default MaenvType.EMA) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Moving Average Envelope (MA Envelope) constructs symmetric bands at a fixed percentage distance above and below a moving average center line.
- Parameterized by `period` (default 20), `percentage` (default 1.0), `matype` (default maenvtype.ema).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Moving Average Envelope (MA Envelope) constructs symmetric bands at a fixed percentage distance above and below a moving average center line. Unlike volatility-adaptive channels (Bollinger, Keltner, ATR Bands) where band width varies with market conditions, MA Envelope uses a constant percentage offset, creating bands whose absolute width scales only with price level. The indicator supports configurable moving average types (SMA, EMA, WMA) for the center line, allowing users to trade off between lag, smoothness, and responsiveness.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# MMCHANNEL: Min-Max Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Min-Max Channel tracks the highest high and lowest low over a lookback period, creating a pure price envelope without any midpoint calculation.
- Parameterized by `period`.
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Min-Max Channel tracks the highest high and lowest low over a lookback period, creating a pure price envelope without any midpoint calculation. Unlike Donchian Channels which include a middle band, MMCHANNEL delivers only the raw extremes. The implementation uses monotonic deques for O(1) amortized updates: each element enters the deque once and leaves at most once, so total work over $N$ bars is $O(N)$ regardless of period length.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# PCHANNEL: Price Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Price Channel tracks the highest high and lowest low over a lookback period with a midpoint average, creating a three-line price envelope that defi...
- Parameterized by `period`.
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Price Channel tracks the highest high and lowest low over a lookback period with a midpoint average, creating a three-line price envelope that defines where the market has been. Functionally identical to Donchian Channels, the indicator uses actual price extremes rather than volatility estimates, producing bands that represent real support and resistance levels. This implementation uses monotonic deques for O(1) amortized updates instead of the naive O(n) rescan that most platforms use internally.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# REGCHANNEL: Linear Regression Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 20), `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Linear Regression Channel plots a best-fit line through price data over a specified period with parallel bands at a configurable standard deviation...
- Parameterized by `period` (default 20), `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Linear Regression Channel plots a best-fit line through price data over a specified period with parallel bands at a configurable standard deviation of residuals. Unlike moving average envelopes that offset from a smoothed price, regression channels adapt their slope to the underlying trend and their width to actual dispersion around that trend. The algorithm uses ordinary least squares with precomputed index sums, requiring two passes per bar: one for the regression coefficients and one for the residual standard deviation.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# SDCHANNEL: Standard Deviation Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 20), `multiplier` (default 2.0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Standard Deviation Channel plots a linear regression line through price data with parallel bands at a specified number of standard deviations of re...
- Parameterized by `period` (default 20), `multiplier` (default 2.0).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Standard Deviation Channel plots a linear regression line through price data with parallel bands at a specified number of standard deviations of residuals above and below. Unlike Bollinger Bands which measure deviation from a moving average, SDCHANNEL measures deviation from the best-fit trend line, capturing how much price wanders from its underlying trajectory rather than from its simple average. The algorithm is identical to REGCHANNEL; the distinction is purely a naming convention found across different platforms and literature.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# STARCHANNEL: Stoller Average Range Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 20), `multiplier` (default 2.0), `atrPeriod` (default 0) |
| **Outputs** | Multiple series (Upper, Lower) |
| **Output range** | Tracks input |
| **Warmup** | `Math.Max(period, effectiveAtrPeriod)` bars |
### TL;DR
- Stoller Average Range Channel creates a volatility-adaptive price envelope using Average True Range (ATR) to determine band width around a simple m...
- Parameterized by `period` (default 20), `multiplier` (default 2.0), `atrperiod` (default 0).
- Output range: Tracks input.
- Requires `Math.Max(period, effectiveAtrPeriod)` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Stoller Average Range Channel creates a volatility-adaptive price envelope using Average True Range (ATR) to determine band width around a simple moving average centerline. The bands automatically expand during volatile periods and contract during calmer markets. The implementation uses a circular buffer for the SMA running sum and Wilder's RMA with a warmup compensator for ATR, achieving O(1) streaming updates per bar.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# STBANDS: Super Trend Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default DefaultPeriod), `multiplier` (default DefaultMultiplier) |
| **Outputs** | Multiple series (Upper, Lower, Trend, Width) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Super Trend Bands provide ATR-based dynamic support and resistance levels with asymmetric ratchet logic: the upper band only tightens downward duri...
- Parameterized by `period` (default defaultperiod), `multiplier` (default defaultmultiplier).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Super Trend Bands provide ATR-based dynamic support and resistance levels with asymmetric ratchet logic: the upper band only tightens downward during downtrends, and the lower band only tightens upward during uptrends. This creates natural trailing stop-loss levels that respect market momentum. A trend direction signal ($+1$ or $-1$) flips when price breaches the opposite band. The ATR is computed as a simple moving average of True Range via a ring buffer with running sum, providing O(1) streaming updates.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# TTM_LRC: TTM Linear Regression Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 100) |
| **Outputs** | Multiple series (Midline, Upper1, Lower1, Upper2, Lower2) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- TTM Linear Regression Channel plots a least-squares regression line through price data with dual standard deviation bands at $\pm 1\sigma$ and $\pm...
- Parameterized by `period` (default 100).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
TTM Linear Regression Channel plots a least-squares regression line through price data with dual standard deviation bands at $\pm 1\sigma$ and $\pm 2\sigma$. Developed by John Carter as part of his TTM (Trade The Markets) indicator suite, it extends the standard regression channel by providing two band levels that create statistically meaningful trading zones. The algorithm is identical to REGCHANNEL/SDCHANNEL in its regression and residual computation, but uses a longer default period (100) and emits four bands instead of two.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# UBANDS: Ehlers Ultimate Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default DefaultPeriod), `multiplier` (default DefaultMultiplier) |
| **Outputs** | Multiple series (Upper, Middle, Lower, Width) |
| **Output range** | Tracks input |
| **Warmup** | `period` bars |
### TL;DR
- Ehlers Ultimate Bands replace the conventional SMA foundation of Bollinger Bands with the Ultrasmooth Filter (USF), a 2-pole IIR filter with zero o...
- Parameterized by `period` (default defaultperiod), `multiplier` (default defaultmultiplier).
- Output range: Tracks input.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Ehlers Ultimate Bands replace the conventional SMA foundation of Bollinger Bands with the Ultrasmooth Filter (USF), a 2-pole IIR filter with zero overshoot and minimal lag. Band width is determined by the RMS (Root Mean Square) of residuals between price and the smoothed centerline, providing a mathematically rigorous deviation measure that makes no assumptions about the distribution of returns. The USF is a recursive filter requiring O(1) computation per bar, while the RMS calculation scans the lookback window at O(n) per bar.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# UCHANNEL: Ehlers Ultimate Channel
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `strPeriod` (default DefaultStrPeriod), `centerPeriod` (default DefaultCenterPeriod), `multiplier` (default DefaultMultiplier) |
| **Outputs** | Multiple series (Upper, Middle, Lower, STR) |
| **Output range** | Tracks input |
| **Warmup** | 1 bar |
### TL;DR
- Ehlers Ultimate Channel applies the Ultrasmooth Filter (USF) twice: once to the close price for the centerline and once to True Range for band widt...
- Parameterized by `strperiod` (default defaultstrperiod), `centerperiod` (default defaultcenterperiod), `multiplier` (default defaultmultiplier).
- Output range: Tracks input.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Ehlers Ultimate Channel applies the Ultrasmooth Filter (USF) twice: once to the close price for the centerline and once to True Range for band width, creating a channel where both the trend estimate and the volatility measure share the same low-lag, zero-overshoot filter characteristics. Unlike UBANDS which uses RMS of price residuals, UCHANNEL uses Smoothed True Range (STR) for band width, making it responsive to gap-inclusive volatility. Separate period parameters allow independent tuning of centerline smoothness and band-width responsiveness.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# VWAPBANDS: VWAP with Dual Standard Deviation Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `multiplier` (default DefaultMultiplier) |
| **Outputs** | Multiple series (Upper1, Lower1, Upper2, Lower2, Vwap, StdDev, Width) |
| **Output range** | Tracks input |
| **Warmup** | `2` bars |
### TL;DR
- VWAP Bands extend the Volume Weighted Average Price with dual standard deviation bands at $\pm 1\sigma$ and $\pm 2\sigma$ levels, creating a five-l...
- Parameterized by `multiplier` (default defaultmultiplier).
- Output range: Tracks input.
- Requires `2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
VWAP Bands extend the Volume Weighted Average Price with dual standard deviation bands at $\pm 1\sigma$ and $\pm 2\sigma$ levels, creating a five-line channel system anchored to volume-weighted fair value. Three running sums (cumulative price×volume, cumulative volume, cumulative price²×volume) enable O(1) streaming updates per bar. A session reset mechanism clears accumulations at configurable intervals, keeping the indicator anchored to current market structure.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# VWAPSD: VWAP with Standard Deviation Bands
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Channel |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `numDevs` (default DefaultNumDevs) |
| **Outputs** | Multiple series (Upper, Lower, Vwap, StdDev, Width) |
| **Output range** | Tracks input |
| **Warmup** | `2` bars |
### TL;DR
- VWAP with Standard Deviation Bands combines the Volume Weighted Average Price with a single configurable standard deviation band pair, providing a ...
- Parameterized by `numdevs` (default defaultnumdevs).
- Output range: Tracks input.
- Requires `2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
VWAP with Standard Deviation Bands combines the Volume Weighted Average Price with a single configurable standard deviation band pair, providing a simpler alternative to VWAPBANDS (which uses dual $\pm 1\sigma$ and $\pm 2\sigma$ levels). Three running sums enable O(1) streaming updates. A session reset mechanism clears accumulations at configurable intervals, keeping the indicator anchored to current market structure. The configurable deviation parameter allows traders to select their desired confidence level ($1\sigma$ ≈ 68%, $2\sigma$ ≈ 95%, $3\sigma$ ≈ 99.7%).
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# AVGPRICE: Average Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (AVGPRICE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `1` bars |
### TL;DR
- AVGPRICE computes the arithmetic mean of a bar's four canonical prices: Open, High, Low, and Close.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
AVGPRICE computes the arithmetic mean of a bar's four canonical prices: Open, High, Low, and Close. The formula $\frac{O + H + L + C}{4}$ produces a single representative price that weights all four price components equally, unlike Typical Price (which excludes Open) or Weighted Close (which double-weights Close). This equal weighting makes AVGPRICE the least biased single-bar summary statistic, useful as a neutral input to downstream indicators when no particular price component deserves emphasis. The calculation is stateless, requires no warmup, and costs a single FMA instruction per bar.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HA: Heikin-Ashi
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (HA) |
| **Output range** | Varies (see docs) |
| **Warmup** | `1` bars |
### TL;DR
- HA transforms standard OHLC bars into smoothed Heikin-Ashi candles by averaging each component with its predecessor.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The trend is your friend — but only if the noise doesn't make you abandon it at the first bump." — Every trader, eventually
HA transforms standard OHLC bars into smoothed Heikin-Ashi candles by averaging each component with its predecessor. The Close is the bar's four-price mean $(O+H+L+C)/4$, the Open is a recursive midpoint of the prior HA Open and HA Close, and High/Low are clamped extremes that guarantee the HA body always fits inside the HA wick. Unlike most indicators that reduce a bar to a single scalar, HA outputs a complete `TBar` — four smoothed prices per bar — making it a bar-to-bar transform rather than a bar-to-value reduction. The recursive Open gives HA an IIR character: each bar carries a decaying memory of the entire price history, which is what flattens trend noise but also why HA prices do not match any actual traded price.
+17
View File
@@ -1,5 +1,22 @@
# MEDPRICE: Median Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (MEDPRICE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `1` bars |
### TL;DR
- MEDPRICE computes the midpoint of a bar's High and Low: $(H + L) \times 0.5$.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
MEDPRICE computes the midpoint of a bar's High and Low: $(H + L) \times 0.5$. This is the simplest possible estimate of a bar's "fair value," splitting the difference between the session's extremes while ignoring both the opening gap and closing settlement. The result represents the geometric center of the bar's vertical range. Because it excludes Open and Close, MEDPRICE responds purely to the supply/demand boundaries that the market tested, making it a useful input for range-based indicators like CCI or as a detrending reference. Stateless, zero-warmup, one addition and one multiply per bar.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# MIDPOINT: Rolling Range Midpoint
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Midpoint) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- Single-series rolling midpoint: `(Highest(V, N) + Lowest(V, N)) * 0.5`.
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The center holds, but only for the window you're watching." — Statistical folk wisdom
Single-series rolling midpoint: `(Highest(V, N) + Lowest(V, N)) * 0.5`. Returns the center of the value range within a lookback window. TA-Lib compatible (`MIDPOINT` function). Unlike MIDPRICE which operates on separate High/Low bar channels, MIDPOINT operates on a single value series.
+17
View File
@@ -1,5 +1,22 @@
# MIDPRICE: Midpoint Price over Period
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Single series (Midprice) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- MIDPRICE computes the center of a rolling price channel by averaging the highest High and lowest Low over the past $N$ bars: $(\text{Highest}(H, N)...
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
MIDPRICE computes the center of a rolling price channel by averaging the highest High and lowest Low over the past $N$ bars: $(\text{Highest}(H, N) + \text{Lowest}(L, N)) \times 0.5$. Unlike the stateless price transforms (AVGPRICE, MEDPRICE, TYPPRICE, WCLPRICE) that operate on a single bar, MIDPRICE maintains a lookback window and produces a rolling estimate of the price range's midpoint. This makes it a simplified channel center line, equivalent to the midpoint of a Donchian Channel. The calculation uses two internal RingBuffers for $O(N)$ max/min computation per bar. TA-Lib compatible via `TA_MIDPRICE`.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# SimdExtensions Class
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (SimdExtensions) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `SimdExtensions` provides high-performance, SIMD-accelerated extension methods for `ReadOnlySpan<double>`.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
`SimdExtensions` provides high-performance, SIMD-accelerated extension methods for `ReadOnlySpan<double>`. It leverages .NET's `Vector<T>` to achieve 4-8x speedups on supported hardware (AVX2, AVX-512) while automatically falling back to scalar implementations on older hardware.
## Key Features
+17
View File
@@ -1,5 +1,22 @@
# TBar: OHLCV Bar Struct
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Multiple series (O, H, L, C, V) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `TBar` is a lightweight, immutable struct representing a single OHLCV (Open, High, Low, Close, Volume) bar.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
## What It Does
`TBar` is a lightweight, immutable struct representing a single OHLCV (Open, High, Low, Close, Volume) bar. It serves as the fundamental unit for price data in QuanTAlib, designed to hold market data with minimal memory overhead while providing convenient accessors for common price derivations.
+17
View File
@@ -1,5 +1,22 @@
# TBarSeries: OHLCV Data Container
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Multiple series (Open, High, Low, Close, Volume) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `TBarSeries` is a high-performance collection of OHLCV bars.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
## What It Does
`TBarSeries` is a high-performance collection of OHLCV bars. It is the primary data structure for managing historical and real-time market data in QuanTAlib. It uses a **Structure of Arrays (SoA)** layout to optimize memory access and enable efficient SIMD operations across individual price components.
+17
View File
@@ -1,5 +1,22 @@
# TSeries: Time Series Data Container
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (TSeries) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `TSeries` is a high-performance, memory-efficient container for time-series data.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
## What It Does
`TSeries` is a high-performance, memory-efficient container for time-series data. Unlike standard collections (like `List<TValue>`), it uses a **Structure of Arrays (SoA)** layout internally. This means it stores timestamps and values in separate contiguous arrays, optimizing memory access patterns for numerical processing and SIMD vectorization.
+17
View File
@@ -1,5 +1,22 @@
# TValue: Time-Value Pair
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (TValue) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `TValue` is the fundamental atomic unit of data in QuanTAlib.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
## What It Does
`TValue` is the fundamental atomic unit of data in QuanTAlib. It represents a single point in a time series, consisting of a timestamp and a double-precision floating-point value. It serves as the standard input and output format for all indicators and data streams.
+17
View File
@@ -1,5 +1,22 @@
# TYPPRICE: Typical Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (TYPPRICE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `1` bars |
### TL;DR
- TYPPRICE computes the equal-weighted average of High, Low, and Close: $(H + L + C) \times \frac{1}{3}$.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
TYPPRICE computes the equal-weighted average of High, Low, and Close: $(H + L + C) \times \frac{1}{3}$. This three-component mean is the most widely used "representative price" in technical analysis, serving as the default input for CCI, MFI, and many other indicators. By including Close but excluding Open, Typical Price captures both the range extremes and the settlement point, giving slightly more weight to closing action than AVGPRICE does. The calculation is stateless and costs a single FMA instruction per bar.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# WCLPRICE: Weighted Close Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Core |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (WCLPRICE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `1` bars |
### TL;DR
- WCLPRICE computes a Close-biased average of High, Low, and Close by double-weighting the closing price: $(H + L + 2C) \times 0.25$.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
WCLPRICE computes a Close-biased average of High, Low, and Close by double-weighting the closing price: $(H + L + 2C) \times 0.25$. This gives Close 50% of the total weight versus 25% each for High and Low, reflecting the widely held belief that the closing price is the most important price of the bar because it represents the final consensus of buyers and sellers. The calculation is stateless, costs a single FMA instruction per bar, and is TA-Lib compatible (`TA_WCLPRICE`).
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# CCOR: Ehlers Correlation Cycle
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 20), `threshold` (default 9.0) |
| **Outputs** | Single series (Ccor) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- CCOR extracts cycle phase by computing Pearson correlation of a price window against cosine (Real) and negative-sine (Imaginary) reference waves of...
- Parameterized by `period` (default 20), `threshold` (default 9.0).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
CCOR extracts cycle phase by computing Pearson correlation of a price window against cosine (Real) and negative-sine (Imaginary) reference waves of a presumed fixed period, converting the resulting phasor to an angle with a monotonic constraint, and classifying the market state as trending or cycling based on the angle rate of change. Unlike Hilbert Transform approaches that rely on analytic signal construction, CCOR uses the statistical machinery of correlation to measure how well price "fits" each quadrature component, yielding bounded $[-1, +1]$ outputs that double as confidence measures. The method was introduced to address the instability of Hilbert-based phasors during trend-dominated regimes.
## Historical Context
+2 -2
View File
@@ -161,12 +161,12 @@ public class CcycValidationTests
var ccycNoise = new Ccyc(0.07);
var ccycSine = new Ccyc(0.07);
var rng = new Random(42);
var rng = new GBM(startPrice: 100.0, sigma: 0.1, seed: 42);
double sineEnergy = 0;
for (int i = 0; i < 300; i++)
{
double noiseVal = 100 + rng.NextDouble() * 10;
double noiseVal = rng.Next().Close;
ccycNoise.Update(new TValue(DateTime.UtcNow.AddMinutes(i), noiseVal), true);
double sineVal = 100 + 10 * Math.Sin(2 * Math.PI * i / 20.0);
+17
View File
@@ -1,5 +1,22 @@
# CCYC: Ehlers Cyber Cycle
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `alpha` (default 0.07) |
| **Outputs** | Single series (Ccyc) |
| **Output range** | Varies (see docs) |
| **Warmup** | `7` bars |
### TL;DR
- CCYC isolates the dominant cycle component from price data using a 2-pole high-pass IIR filter applied to a 4-tap FIR-smoothed input, producing an ...
- Parameterized by `alpha` (default 0.07).
- Output range: Varies (see docs).
- Requires `7` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
CCYC isolates the dominant cycle component from price data using a 2-pole high-pass IIR filter applied to a 4-tap FIR-smoothed input, producing an oscillator that strips trend while preserving cyclical content with minimal lag. The companion trigger line (one-bar delay of the cycle output) provides crossover signals for timing entries and exits. Unlike band-pass approaches that require specifying a center frequency, CCYC's high-pass architecture extracts whatever cyclic energy exists above a cutoff controlled by a single $\alpha$ damping parameter, making it adaptive to the dominant period present in the data.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# CG: Ehlers Center of Gravity
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 10) |
| **Outputs** | Single series (Cg) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- CG identifies potential turning points using the physics concept of weighted center of mass applied to a price window.
- Parameterized by `period` (default 10).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
CG identifies potential turning points using the physics concept of weighted center of mass applied to a price window. Developed by John Ehlers, the oscillator measures where the "weight" of prices is concentrated within a lookback period, producing a leading indicator that oscillates around zero with minimal lag compared to traditional moving average crossover systems.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# DSP: Ehlers Detrended Synthetic Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 40) |
| **Outputs** | Single series (Dsp) |
| **Output range** | Varies (see docs) |
| **Warmup** | `slowPeriod * 3` bars |
### TL;DR
- DSP creates a zero-centered oscillator by subtracting a half-cycle EMA from a quarter-cycle EMA, isolating the dominant cyclical component of price...
- Parameterized by `period` (default 40).
- Output range: Varies (see docs).
- Requires `slowPeriod * 3` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
DSP creates a zero-centered oscillator by subtracting a half-cycle EMA from a quarter-cycle EMA, isolating the dominant cyclical component of price while cancelling longer-term trends. Developed by John Ehlers, the indicator is grounded in cycle theory rather than arbitrary period selection, making it a principled alternative to MACD for cycle-aware trading. Bias-corrected EMAs ensure accurate amplitude during warmup.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# EACP: Ehlers Autocorrelation Periodogram
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `minPeriod` (default 8), `maxPeriod` (default 48), `avgLength` (default 3), `enhance` (default true) |
| **Outputs** | Single series (Eacp) |
| **Output range** | Varies (see docs) |
| **Warmup** | `maxPeriod * 2` bars |
### TL;DR
- EACP estimates the dominant cycle period of a financial time series by computing autocorrelation across multiple lags and transforming the result i...
- Parameterized by `minperiod` (default 8), `maxperiod` (default 48), `avglength` (default 3), `enhance` (default true).
- Output range: Varies (see docs).
- Requires `maxPeriod * 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
EACP estimates the dominant cycle period of a financial time series by computing autocorrelation across multiple lags and transforming the result into a power spectrum via the Wiener-Khinchin theorem. The output is a continuously updating cycle period measurement (in bars) that can adaptively tune other indicators to the market's current rhythm, making fixed-period assumptions unnecessary.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# EBSW: Ehlers Even Better Sinewave
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `hpLength` (default 40), `ssfLength` (default 10) |
| **Outputs** | Single series (Ebsw) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- EBSW is a refined cycle oscillator that combines a high-pass filter (trend removal), a Super-Smoother filter (noise removal), and Automatic Gain Co...
- Parameterized by `hplength` (default 40), `ssflength` (default 10).
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
EBSW is a refined cycle oscillator that combines a high-pass filter (trend removal), a Super-Smoother filter (noise removal), and Automatic Gain Control to produce a normalized $[-1, +1]$ output representing the current position within the dominant market cycle. Developed by John Ehlers as an improvement over the original Hilbert Transform SineWave, it provides cleaner turning point detection without requiring complex phase extraction mathematics.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HOMOD: Ehlers Homodyne Discriminator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `minPeriod` (default 6.0), `maxPeriod` (default 50.0) |
| **Outputs** | Single series (Homod) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- HOMOD estimates the dominant cycle period of a market using homodyne mixing, a technique from radio engineering where a signal is multiplied by a d...
- Parameterized by `minperiod` (default 6.0), `maxperiod` (default 50.0).
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
HOMOD estimates the dominant cycle period of a market using homodyne mixing, a technique from radio engineering where a signal is multiplied by a delayed copy of itself to expose the angular phase change between samples. The output is a continuously varying period measurement (in bars) that tracks the market's instantaneous cycle length, enabling adaptive indicator tuning. Developed by John Ehlers, it offers better noise rejection and stability than the raw Hilbert Transform period estimator.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HT_DCPERIOD: Ehlers Hilbert Transform Dominant Cycle Period
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (HT_DCPERIOD) |
| **Output range** | Varies (see docs) |
| **Warmup** | `LOOKBACK` bars |
### TL;DR
- HT_DCPERIOD estimates the period of the dominant market cycle using Ehlers' Hilbert Transform cascade.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `LOOKBACK` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
HT_DCPERIOD estimates the period of the dominant market cycle using Ehlers' Hilbert Transform cascade. The algorithm extracts In-Phase and Quadrature components from price, computes instantaneous phase via homodyne discrimination, and derives the period from the phase rate of change. Output is a continuously varying period (typically 6-50 bars) compatible with TA-Lib's `HT_DCPERIOD` function. The indicator enables dynamic tuning of other indicators to the market's actual rhythm rather than fixed-parameter assumptions.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HT_DCPHASE: Ehlers Hilbert Transform Dominant Cycle Phase
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (HT_DCPHASE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `LOOKBACK` bars |
### TL;DR
- HT_DCPHASE measures the instantaneous phase angle of the dominant market cycle using Ehlers' Hilbert Transform cascade.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `LOOKBACK` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
HT_DCPHASE measures the instantaneous phase angle of the dominant market cycle using Ehlers' Hilbert Transform cascade. The output ranges from $-45°$ to $315°$, with phase discontinuities at cycle completions marking the transition from one cycle to the next. Compatible with TA-Lib's `HT_DCPHASE` function, the indicator enables cycle-position timing for entries and exits based on where price currently sits within the dominant cycle.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HT_PHASOR: Ehlers Hilbert Transform Phasor Components
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (HT_PHASOR) |
| **Output range** | Varies (see docs) |
| **Warmup** | `LOOKBACK` bars |
### TL;DR
- HT_PHASOR decomposes the price signal into two orthogonal components, InPhase ($I$) and Quadrature ($Q$), using the Hilbert Transform.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `LOOKBACK` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
HT_PHASOR decomposes the price signal into two orthogonal components, InPhase ($I$) and Quadrature ($Q$), using the Hilbert Transform. Together these form a complex phasor $Z = I + jQ$ that describes the instantaneous amplitude and phase of the dominant market cycle. Compatible with TA-Lib's `HT_PHASOR` function, this dual-output indicator provides the fundamental building blocks for cycle analysis, phasor crossover timing, and instantaneous amplitude measurement.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# HT_SINE: Ehlers Hilbert Transform SineWave (also known as SINE)
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (HT_SINE) |
| **Output range** | Varies (see docs) |
| **Warmup** | `LOOKBACK` bars |
### TL;DR
- HT_SINE extracts the dominant market cycle phase and outputs both Sine and LeadSine (45° phase advance) for cycle timing.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `LOOKBACK` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
HT_SINE extracts the dominant market cycle phase and outputs both Sine and LeadSine (45° phase advance) for cycle timing. The crossover of these two waves identifies turning points in ranging markets up to one-eighth of a cycle early. Compatible with TA-Lib's `HT_SINE` function, the indicator builds on the full Hilbert Transform cascade (phasor extraction, homodyne period estimation, DFT phase accumulation) to produce dual bounded $[-1, +1]$ oscillators that track cycle position rather than price amplitude.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# LUNAR: Lunar Phase Indicator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (LUNAR) |
| **Output range** | Varies (see docs) |
| **Warmup** | `0` bars |
### TL;DR
- LUNAR calculates the Moon's illumination fraction using precise orbital mechanics from Jean Meeus' *Astronomical Algorithms*.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `0` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
LUNAR calculates the Moon's illumination fraction using precise orbital mechanics from Jean Meeus' *Astronomical Algorithms*. Output ranges from 0.0 (New Moon) through 0.5 (Quarter) to 1.0 (Full Moon), providing a continuous astronomical cycle for research into potential lunar-correlated market behavior. The indicator is purely time-based, requires no price data, and has zero warmup since the calculation is deterministic from any timestamp.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# SOLAR: Solar Cycle Indicator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (SOLAR) |
| **Output range** | Varies (see docs) |
| **Warmup** | `0` bars |
### TL;DR
- SOLAR models Earth's seasonal position relative to the Sun using astronomical ephemeris calculations.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires `0` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
SOLAR models Earth's seasonal position relative to the Sun using astronomical ephemeris calculations. Output oscillates continuously from $-1.0$ (Winter Solstice) through $0.0$ (Equinoxes) to $+1.0$ (Summer Solstice), providing a smooth, mathematically precise seasonal phase for econometric modeling. Like LUNAR, the indicator is purely time-based, requires no price data, and has zero warmup since the calculation is deterministic from any timestamp.
## Historical Context
+17
View File
@@ -1,5 +1,22 @@
# SSFDSP: Ehlers SSF Detrended Synthetic Price
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Cycle |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 40) |
| **Outputs** | Single series (SsfDsp) |
| **Output range** | Varies (see docs) |
| **Warmup** | `slowPeriod * 2` bars |
### TL;DR
- SSFDSP isolates the dominant cycle by subtracting a half-cycle Super-Smoother from a quarter-cycle Super-Smoother, producing a zero-centered oscill...
- Parameterized by `period` (default 40).
- Output range: Varies (see docs).
- Requires `slowPeriod * 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
SSFDSP isolates the dominant cycle by subtracting a half-cycle Super-Smoother from a quarter-cycle Super-Smoother, producing a zero-centered oscillator with superior noise rejection compared to the EMA-based DSP. The 2-pole Butterworth characteristic of the Super-Smoother filter provides zero phase lag at the cutoff frequency and sharper rolloff than exponential smoothing, making SSFDSP the preferred variant for cycle-aware trading when the approximate dominant period is known.
## Historical Context
+18 -1
View File
@@ -1,4 +1,21 @@
# ADX: Average Directional Index
# ADX: Average Directional Index
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (DiPlus, DiMinus) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period * 2` bars |
### TL;DR
- The Average Directional Index is the industry-standard measure of trend strength, ignoring direction entirely to focus on the velocity of price exp...
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `period * 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Average Directional Index is the industry-standard measure of trend strength, ignoring direction entirely to focus on the velocity of price expansion. Wilder's pipeline decomposes range into directional movement (+DM, -DM), normalizes against True Range to produce directional indicators (+DI, -DI), derives a directional index (DX) from their ratio, then smooths DX with a final RMA pass. The double-smoothed architecture creates significant lag but exceptional noise rejection, making ADX a regime filter rather than a timing tool. Output is unbounded above 0, with readings above 25 conventionally indicating trending conditions and below 20 indicating choppy markets.
+18 -1
View File
@@ -1,4 +1,21 @@
# ADXR: Average Directional Movement Rating
# ADXR: Average Directional Movement Rating
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Single series (Adxr) |
| **Output range** | Varies (see docs) |
| **Warmup** | `adx.WarmupPeriod + period - 1` bars |
### TL;DR
- The Average Directional Movement Rating is a smoothed version of ADX that dampens short-term fluctuations in trend strength by averaging the curren...
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `adx.WarmupPeriod + period - 1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Average Directional Movement Rating is a smoothed version of ADX that dampens short-term fluctuations in trend strength by averaging the current ADX with a historical ADX value. This creates a doubly-lagged metric that sacrifices all timing utility in exchange for stable regime classification. ADXR answers one question: does the current market environment reward trend-following strategies? If ADXR is high, deploy momentum logic. If low, deploy mean-reversion. It is a strategic filter, not a tactical signal.
+18 -1
View File
@@ -1,4 +1,21 @@
# ALLIGATOR: Williams Alligator
# ALLIGATOR: Williams Alligator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `jawPeriod`, `jawOffset`, `teethPeriod`, `teethOffset`, `lipsPeriod`, `lipsOffset` |
| **Outputs** | Multiple series (Jaw, Teeth, Lips) |
| **Output range** | Varies (see docs) |
| **Warmup** | `Math.Max(Math.Max(jawPeriod, teethPeriod), lipsPeriod)` bars |
### TL;DR
- The Williams Alligator is a trend-following system that uses three Smoothed Moving Averages (SMMA/RMA) with different periods and forward display o...
- Parameterized by `jawperiod`, `jawoffset`, `teethperiod`, `teethoffset`, `lipsperiod`, `lipsoffset`.
- Output range: Varies (see docs).
- Requires `Math.Max(Math.Max(jawPeriod, teethPeriod), lipsPeriod)` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Williams Alligator is a trend-following system that uses three Smoothed Moving Averages (SMMA/RMA) with different periods and forward display offsets to visualize market phases. The Jaw (13-period, offset 8), Teeth (8-period, offset 5), and Lips (5-period, offset 3) create a layered structure where intertwined lines indicate consolidation ("sleeping") and separated, aligned lines indicate trending conditions ("eating"). The metaphor maps directly to position management: stay out when the alligator sleeps, ride when it eats. Each line uses Wilder's smoothing ($\alpha = 1/N$), which is heavier than standard EMA, providing superior noise rejection at the cost of additional lag.
+18 -1
View File
@@ -1,4 +1,21 @@
# AMAT: Archer Moving Averages Trends
# AMAT: Archer Moving Averages Trends
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `fastPeriod` (default 10), `slowPeriod` (default 50) |
| **Outputs** | Multiple series (Strength, FastEma, SlowEma) |
| **Output range** | Varies (see docs) |
| **Warmup** | `slowPeriod` bars |
### TL;DR
- The Archer Moving Averages Trends indicator is a triple-confirmation trend identification system that uses dual EMAs to produce discrete directiona...
- Parameterized by `fastperiod` (default 10), `slowperiod` (default 50).
- Output range: Varies (see docs).
- Requires `slowPeriod` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Archer Moving Averages Trends indicator is a triple-confirmation trend identification system that uses dual EMAs to produce discrete directional signals (+1 bullish, -1 bearish, 0 neutral). Unlike simple crossover systems that trigger on any intersection, AMAT requires alignment of three conditions: relative position (fast above/below slow), fast EMA direction (rising/falling), and slow EMA direction (rising/falling). This triple gate filters out the whipsaw endemic to single-condition crossover systems in ranging markets. A secondary output quantifies trend strength as the percentage separation between EMAs, providing a conviction metric for position sizing.
+18 -1
View File
@@ -1,4 +1,21 @@
# AROON: Aroon Indicator
# AROON: Aroon Indicator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Multiple series (Up, Down) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Aroon indicator measures the temporal freshness of price extremes, answering not "how much did price move?" but "how long ago did it make a new...
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Aroon indicator measures the temporal freshness of price extremes, answering not "how much did price move?" but "how long ago did it make a new high or low?" Aroon Up tracks the recency of the highest high within the lookback window; Aroon Down tracks the recency of the lowest low. Both are normalized to 0-100 where 100 means the extreme occurred on the current bar and 0 means it occurred at the far edge of the window. A companion Aroon Oscillator (Up minus Down) provides a single zero-centered metric for trend bias. Unlike recursive indicators that accumulate floating-point drift, Aroon is purely windowed — its value depends only on data within the lookback period, making it immune to initialization artifacts.
+18 -1
View File
@@ -1,4 +1,21 @@
# AROONOSC: Aroon Oscillator
# AROONOSC: Aroon Oscillator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Single series (AroonOsc) |
| **Output range** | $-100$ to $+100$ |
| **Warmup** | `period` bars |
### TL;DR
- The Aroon Oscillator condenses the dual-line Aroon system into a single zero-centered value by computing $\text{AroonUp} - \text{AroonDown}$.
- Parameterized by `period`.
- Output range: $-100$ to $+100$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Aroon Oscillator condenses the dual-line Aroon system into a single zero-centered value by computing $\text{AroonUp} - \text{AroonDown}$. This distills the temporal battle between fresh highs and fresh lows into a bounded $[-100, +100]$ metric where positive values indicate bullish recency dominance and negative values indicate bearish. Unlike recursive indicators that accumulate floating-point drift, the Aroon Oscillator is purely windowed — its value depends only on data within the lookback period, making it stateless in the long term and immune to initialization poisoning. The step-function output reflects discrete events (new extremes appearing or aging out) rather than smooth price trajectories.
+18 -1
View File
@@ -1,4 +1,21 @@
# CHOP: Choppiness Index
# CHOP: Choppiness Index
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 14) |
| **Outputs** | Single series (CHOP) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Choppiness Index is a non-directional regime indicator that measures whether the market is trending or trading sideways.
- Parameterized by `period` (default 14).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Choppiness Index is a non-directional regime indicator that measures whether the market is trending or trading sideways. It compares total price movement (sum of True Range) to net price movement (high-low channel width) using a logarithmic ratio, producing a bounded value where high readings indicate choppy/consolidating conditions and low readings indicate trending conditions. CHOP does not indicate direction — only whether directional strategies are likely to succeed. The logarithmic scaling normalizes the output to approximately 0-100 regardless of price level or volatility magnitude.
+18 -1
View File
@@ -1,4 +1,21 @@
# DMX: Directional Movement Index (Jurik)
# DMX: Directional Movement Index (Jurik)
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` |
| **Outputs** | Single series (Dmx) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The DMX is Mark Jurik's modernized overhaul of Wilder's Directional Movement system, replacing the sluggish RMA smoothing with the Jurik Moving Ave...
- Parameterized by `period`.
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The DMX is Mark Jurik's modernized overhaul of Wilder's Directional Movement system, replacing the sluggish RMA smoothing with the Jurik Moving Average (JMA) to achieve faster trend detection with superior noise rejection. The core directional movement logic (+DM, -DM, True Range) is preserved faithfully from Wilder, but the three parallel smoothing passes use JMA's adaptive bandwidth instead of RMA's fixed $\alpha = 1/N$. The result is a directional indicator that reacts 3-5 bars earlier to trend changes than standard DMI while filtering out more noise during consolidation. Output is the difference between smoothed directional indicators: $DMX = DI^+ - DI^-$, positive for uptrends and negative for downtrends.
+18 -1
View File
@@ -1,4 +1,21 @@
# DX: Directional Movement Index
# DX: Directional Movement Index
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 14) |
| **Outputs** | Multiple series (DiPlus, DiMinus) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Directional Movement Index is the raw, unsmoothed measure of trend strength from Wilder's directional movement system.
- Parameterized by `period` (default 14).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Directional Movement Index is the raw, unsmoothed measure of trend strength from Wilder's directional movement system. It decomposes price expansion into +DM and -DM, normalizes against True Range using RMA smoothing to produce +DI and -DI, then computes the ratio $DX = 100 \times |{+DI - {-DI}}| / ({+DI + {-DI}})$. Unlike ADX, which applies a final RMA pass to DX, the raw DX responds immediately to changes in directional dominance — making it noisier but approximately one full period faster. Output ranges from 0 to 100, where high values indicate strong directional movement regardless of up/down direction. DX is the building block from which ADX is derived.
+17
View File
@@ -1,5 +1,22 @@
# GHLA: Gann High-Low Activator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 13) |
| **Outputs** | Single series (Ghla) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Gann High-Low Activator (GHLA) is a trend-following stop/reversal indicator that alternates between the Simple Moving Average of Highs and the ...
- Parameterized by `period` (default 13).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The simplest indicators are the hardest to argue with. Two averages, one rule, and the market tells you which side of the fence to stand on."
The Gann High-Low Activator (GHLA) is a trend-following stop/reversal indicator that alternates between the Simple Moving Average of Highs and the Simple Moving Average of Lows based on a three-state crossover rule. Developed by Robert Krausz and published in *Technical Analysis of Stocks & Commodities* (February 1998), the indicator produces a single trailing line: SMA(Low) during uptrends (acting as dynamic support) and SMA(High) during downtrends (acting as dynamic resistance). The flip between states occurs only when price closes decisively beyond the opposing SMA, creating a hysteresis zone that filters minor whipsaws. With a default period of 3 bars, GHLA responds aggressively to trend changes while requiring just $O(N)$ additions and one comparison per bar.
+18 -1
View File
@@ -1,4 +1,21 @@
# HT_TRENDMODE: Hilbert Transform Trend vs Cycle Mode
# HT_TRENDMODE: Hilbert Transform Trend vs Cycle Mode
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | Source (close) |
| **Parameters** | None |
| **Outputs** | Single series (HT_TRENDMODE) |
| **Output range** | $0$ to $1$ |
| **Warmup** | `LOOKBACK` bars |
### TL;DR
- The Hilbert Transform Trend Mode indicator is a binary regime classifier that determines whether price action is dominated by trending behavior (ou...
- No configurable parameters; computation is stateless per bar.
- Output range: $0$ to $1$.
- Requires `LOOKBACK` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
The Hilbert Transform Trend Mode indicator is a binary regime classifier that determines whether price action is dominated by trending behavior (output = 1) or cyclical/mean-reverting behavior (output = 0). It uses the full Ehlers Hilbert Transform pipeline — 4-bar WMA smoothing, Hilbert FIR filters, homodyne discriminator for period estimation, DC phase extraction, and SineWave indicators — then applies four decision criteria to classify the current regime. The implementation follows TA-Lib's Ehlers-faithful algorithm from the February 2002 publication. Output is discrete {0, 1}, making it a direct strategy selector: deploy trend-following logic when mode = 1, and mean-reversion logic when mode = 0.
+18 -1
View File
@@ -1,4 +1,21 @@
# ICHIMOKU: Ichimoku Kinko Hyo
# ICHIMOKU: Ichimoku Kinko Hyo
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `tenkanPeriod`, `kijunPeriod`, `senkouBPeriod`, `displacement` |
| **Outputs** | Multiple series (Tenkan, Kijun, SenkouA, SenkouB, Chikou) |
| **Output range** | Varies (see docs) |
| **Warmup** | `maxPeriod` bars |
### TL;DR
- Ichimoku Kinko Hyo ("One Glance Equilibrium Chart") is a comprehensive trend-following system that provides five distinct components revealing tren...
- Parameterized by `tenkanperiod`, `kijunperiod`, `senkoubperiod`, `displacement`.
- Output range: Varies (see docs).
- Requires `maxPeriod` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
Ichimoku Kinko Hyo ("One Glance Equilibrium Chart") is a comprehensive trend-following system that provides five distinct components revealing trend direction, momentum, support/resistance levels, and potential future price zones simultaneously. The Tenkan-sen and Kijun-sen are midpoints of high-low ranges at different timescales (not moving averages of closes). Senkou Span A and B form the "cloud" (Kumo) — a projected equilibrium zone displaced forward in time. Chikou Span is simply the current close displaced backward. All components use sliding window min/max arithmetic, producing step-function behavior on breakouts rather than the smooth curves of EMA-based systems. The system requires OHLC bar input.
+18 -1
View File
@@ -1,4 +1,21 @@
# IMPULSE: Elder Impulse System
# IMPULSE: Elder Impulse System
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `emaPeriod` (default 13), `macdFast` (default 12), `macdSlow` (default 26), `macdSignal` (default 9) |
| **Outputs** | Single series (Impulse) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- The Elder Impulse System combines a 13-period EMA (trend inertia) with the MACD(12,26,9) histogram (momentum acceleration) to classify each bar as ...
- Parameterized by `emaperiod` (default 13), `macdfast` (default 12), `macdslow` (default 26), `macdsignal` (default 9).
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The Impulse System identifies inflection points where a trend speeds up or slows down." -- Alexander Elder, *Come Into My Trading Room*
+17
View File
@@ -1,5 +1,22 @@
# PFE: Polarized Fractal Efficiency
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 10), `smoothPeriod` (default 5) |
| **Outputs** | Single series (Pfe) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period + 1` bars |
### TL;DR
- Polarized Fractal Efficiency (PFE) quantifies trend strength by comparing the Euclidean distance a price series actually travels bar-to-bar against...
- Parameterized by `period` (default 10), `smoothperiod` (default 5).
- Output range: Varies (see docs).
- Requires `period + 1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The shortest distance between two points is a straight line. The market never takes the shortest distance. PFE measures how badly it misses."
Polarized Fractal Efficiency (PFE) quantifies trend strength by comparing the Euclidean distance a price series actually travels bar-to-bar against the straight-line distance between the endpoints over the same window. The ratio, scaled to [-100, +100] and smoothed with an EMA, distinguishes efficient trending motion (values near ±100) from fractal, self-similar noise (values near 0). Created by Hans Hannula and published in *Technical Analysis of Stocks & Commodities* (January 1994), PFE applies fractal geometry to price action without requiring Hurst exponent estimation or rescaled-range analysis. With default parameters (period=10, smooth=5), the indicator needs 11 close values for the first raw reading plus 5 bars of EMA convergence, totaling ~16 bars of warmup. The core loop executes $N$ square roots per bar, making it $O(N)$ per update in streaming mode.
+18 -1
View File
@@ -1,4 +1,21 @@
# QSTICK: Qstick Indicator
# QSTICK: Qstick Indicator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default DefaultPeriod), `useEma` (default DefaultUseEma) |
| **Outputs** | Single series (QSTICK) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Qstick indicator, developed by Tushar Chande, computes a moving average of the close-minus-open difference over a lookback period, quantifying ...
- Parameterized by `period` (default defaultperiod), `useema` (default defaultuseema).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The average candlestick body reveals the market's true conviction."
+17
View File
@@ -1,5 +1,22 @@
# RAVI: Chande Range Action Verification Index
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | Source (close) |
| **Parameters** | `shortPeriod` (default 7), `longPeriod` (default 65) |
| **Outputs** | Single series (Ravi) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- RAVI (Range Action Verification Index) measures trend strength by computing the absolute percentage divergence between a short-period SMA and a lon...
- Parameterized by `shortperiod` (default 7), `longperiod` (default 65).
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The simplest question in technical analysis is also the most important: is this market trending or not? RAVI answers it with two moving averages and a division."
RAVI (Range Action Verification Index) measures trend strength by computing the absolute percentage divergence between a short-period SMA and a long-period SMA. Created by Tushar Chande and published in *Beyond Technical Analysis* (Wiley, 2001), the indicator classifies markets into trending (RAVI > 3%) and ranging (RAVI < 3%) regimes using a single threshold. With default parameters (short=7, long=65), RAVI requires 65 bars of warmup for the first valid reading. The core computation is three operations per bar in streaming mode: two running-sum updates and one division. No square roots, no exponentials, no recursion. The entire indicator reduces to normalized SMA spread, making it one of the cheapest dynamics classifiers available.
+18 -1
View File
@@ -1,4 +1,21 @@
# SUPER: SuperTrend
# SUPER: SuperTrend
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 10), `multiplier` (default 3.0) |
| **Outputs** | Multiple series (UpperBand, LowerBand) |
| **Output range** | Varies (see docs) |
| **Warmup** | `> period + 1` bars |
### TL;DR
- SuperTrend is a trend-following overlay that uses ATR-scaled bands around the HL2 midpoint, switching between upper and lower bands based on close ...
- Parameterized by `period` (default 10), `multiplier` (default 3.0).
- Output range: Varies (see docs).
- Requires `> period + 1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "It's not an indicator; it's a trailing stop with a marketing budget."
+18 -1
View File
@@ -1,4 +1,21 @@
# TTM_SQUEEZE: TTM Squeeze
# TTM_SQUEEZE: TTM Squeeze
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `bbPeriod` (default 20), `bbMult` (default 2.0), `kcPeriod` (default 20), `kcMult` (default 1.5), `momPeriod` (default 20) |
| **Outputs** | Single series (TtmSqueeze) |
| **Output range** | Varies (see docs) |
| **Warmup** | `Math.Max(Math.Max(bbPeriod, kcPeriod), momPeriod)` bars |
### TL;DR
- John Carter's TTM Squeeze detects low-volatility compression by comparing Bollinger Band width against Keltner Channel width: when BB fits inside K...
- Parameterized by `bbperiod` (default 20), `bbmult` (default 2.0), `kcperiod` (default 20), `kcmult` (default 1.5), `momperiod` (default 20).
- Output range: Varies (see docs).
- Requires `Math.Max(Math.Max(bbPeriod, kcPeriod), momPeriod)` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "Volatility compression is the market holding its breath before screaming."
+18 -1
View File
@@ -1,4 +1,21 @@
# TTM_TREND: TTM Trend
# TTM_TREND: TTM Trend
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default DefaultPeriod) |
| **Outputs** | Single series (TTM_TREND) |
| **Output range** | Varies (see docs) |
| **Warmup** | `> 2` bars |
### TL;DR
- John Carter's TTM Trend uses a fast EMA (default period 6) applied to typical price (HLC/3) to determine short-term trend direction via slope sign.
- Parameterized by `period` (default defaultperiod).
- Output range: Varies (see docs).
- Requires `> 2` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The simplest trend indicator is the one you actually follow."
+17
View File
@@ -1,5 +1,22 @@
# VHF: Vertical Horizontal Filter
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | Source (close) |
| **Parameters** | `period` (default 28) |
| **Outputs** | Single series (Vhf) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period + 1` bars |
### TL;DR
- VHF (Vertical Horizontal Filter) measures trend strength by dividing the price range over $N$ periods by the total absolute bar-to-bar path distanc...
- Parameterized by `period` (default 28).
- Output range: Varies (see docs).
- Requires `period + 1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "Before you ask which way the market is going, ask whether it is going anywhere at all. VHF answers the second question with a ratio and a ruler."
VHF (Vertical Horizontal Filter) measures trend strength by dividing the price range over $N$ periods by the total absolute bar-to-bar path distance over the same window. Created by Adam White and published in the August 1991 issue of *Futures* magazine, VHF produces a single positive value where higher readings indicate trending conditions and lower readings indicate choppy, range-bound markets. With the default period of 28, the indicator requires 29 close values for the first valid output. The core computation in streaming mode is O(1) per bar when implemented with deque-based min/max tracking and a running sum of absolute changes. No square roots, no exponentials, no recursion. VHF is one of the simplest and cheapest trend-strength classifiers available, requiring approximately 12 operations per bar at steady state.
+18 -1
View File
@@ -1,4 +1,21 @@
# VORTEX: Vortex Indicator
# VORTEX: Vortex Indicator
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Dynamic |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `period` (default 14) |
| **Outputs** | Multiple series (ViPlus, ViMinus) |
| **Output range** | Varies (see docs) |
| **Warmup** | `period` bars |
### TL;DR
- The Vortex Indicator measures upward and downward trend momentum by computing the ratio of positive and negative vortex movements to true range ove...
- Parameterized by `period` (default 14).
- Output range: Varies (see docs).
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When bulls and bears clash, the Vortex measures the violence."
+18 -1
View File
@@ -1,4 +1,21 @@
# Huber: Huber Loss
# Huber: Huber Loss
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `delta` (default 1.345) |
| **Outputs** | Single series (Huber) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Huber Loss is a hybrid loss function that combines the best properties of Mean Squared Error (MSE) and Mean Absolute Error (MAE).
- Parameterized by `period`, `delta` (default 1.345).
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The Goldilocks of loss functions: not too sensitive, not too robust, just right."
+18 -1
View File
@@ -1,4 +1,21 @@
# Log-Cosh: Logarithm of Hyperbolic Cosine Loss
# Log-Cosh: Logarithm of Hyperbolic Cosine Loss
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (UNKNOWN) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Log-Cosh Loss combines the best properties of L1 (absolute) and L2 (squared) error metrics through the logarithm of the hyperbolic cosine function.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The smooth operator that acts like L2 for small errors and L1 for large ones."
+18 -1
View File
@@ -1,4 +1,21 @@
# MAAPE: Mean Arctangent Absolute Percentage Error
# MAAPE: Mean Arctangent Absolute Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MAAPE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Arctangent Absolute Percentage Error (MAAPE) transforms percentage errors through the arctangent function, naturally bounding the metric betwe...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When percentage errors need boundaries, arctangent provides the walls."
+18 -1
View File
@@ -1,4 +1,21 @@
# MAE: Mean Absolute Error
# MAE: Mean Absolute Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MAE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Absolute Error (MAE) measures the average magnitude of errors in a set of predictions, without considering their direction.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When you need to know how wrong you are on average, without the drama of squared errors."
+18 -1
View File
@@ -1,4 +1,21 @@
# MAPD: Mean Absolute Percentage Deviation
# MAPD: Mean Absolute Percentage Deviation
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MAPD) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Absolute Percentage Deviation (MAPD) measures the average absolute percentage difference between actual and predicted values, using the predic...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "Like MAPE, but divides by what you predicted instead of what actually happened."
+18 -1
View File
@@ -1,4 +1,21 @@
# MAPE: Mean Absolute Percentage Error
# MAPE: Mean Absolute Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MAPE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Absolute Percentage Error (MAPE) measures the average absolute percentage difference between actual and predicted values.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The metric that lets you compare apples to oranges, as long as you don't have any zeros."
+18 -1
View File
@@ -1,4 +1,21 @@
# MASE: Mean Absolute Scaled Error
# MASE: Mean Absolute Scaled Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Mase) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period + 1` bars |
### TL;DR
- Mean Absolute Scaled Error (MASE) normalizes forecast errors by the average error of a naive "random walk" forecast (using the previous value as th...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period + 1` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "A good forecast is one that's better than guessing. MASE tells you exactly how much better."
+18 -1
View File
@@ -1,4 +1,21 @@
# MdAE: Median Absolute Error
# MdAE: Median Absolute Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Mdae) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Median Absolute Error (MdAE) measures the middle value of all absolute errors.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When outliers scream but you need to hear the whisper of typical performance."
+18 -1
View File
@@ -1,4 +1,21 @@
# MdAPE: Median Absolute Percentage Error
# MdAPE: Median Absolute Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Mdape) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Median Absolute Percentage Error (MdAPE) combines the scale-independence of percentage errors with the robustness of median statistics.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When you need relative errors but can't trust the outliers."
+18 -1
View File
@@ -1,4 +1,21 @@
# ME: Mean Error (Mean Bias Error)
# ME: Mean Error (Mean Bias Error)
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (ME) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Error (ME), also known as Mean Bias Error, measures the average error between actual and predicted values while preserving the sign.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "Sometimes you need to know not just how wrong you are, but which direction you're wrong in."
+18 -1
View File
@@ -1,4 +1,21 @@
# MPE: Mean Percentage Error
# MPE: Mean Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MPE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Percentage Error measures the average percentage difference between actual and predicted values while preserving the sign.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "MAPE tells you how wrong you are; MPE tells you which direction you're wrong in."
+18 -1
View File
@@ -1,4 +1,21 @@
# MRAE: Mean Relative Absolute Error
# MRAE: Mean Relative Absolute Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MRAE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Relative Absolute Error (MRAE) measures the average magnitude of errors relative to the actual values.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When you need to understand your error in the context of what you're predicting."
+18 -1
View File
@@ -1,4 +1,21 @@
# MSE: Mean Squared Error
# MSE: Mean Squared Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MSE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Squared Error (MSE) measures the average of the squares of the errors between actual and predicted values.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The metric that makes outliers pay dearly for their transgressions."
+18 -1
View File
@@ -1,4 +1,21 @@
# MSLE: Mean Squared Logarithmic Error
# MSLE: Mean Squared Logarithmic Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (MSLE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Mean Squared Logarithmic Error transforms both actual and predicted values through logarithms before computing squared error.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When your data spans orders of magnitude, MSLE keeps outliers from hijacking your loss function."
+18 -1
View File
@@ -1,4 +1,21 @@
# Pseudo-Huber: Smooth Huber Approximation
# Pseudo-Huber: Smooth Huber Approximation
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `delta` (default 1.0) |
| **Outputs** | Single series (UNKNOWN) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Pseudo-Huber Loss (also called Charbonnier Loss) is a smooth approximation to the Huber loss function.
- Parameterized by `period`, `delta` (default 1.0).
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "All the robustness of Huber, none of the discontinuities."
+18 -1
View File
@@ -1,4 +1,21 @@
# Quantile Loss: Pinball Loss Function
# Quantile Loss: Pinball Loss Function
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `quantile` (default 0.5) |
| **Outputs** | Single series (Quantile) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Quantile Loss (also called Pinball Loss) measures prediction accuracy with asymmetric penalties for over-prediction versus under-prediction.
- Parameterized by `period`, `quantile` (default 0.5).
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When over-prediction and under-prediction carry different costs, quantiles find the balance."
+18 -1
View File
@@ -1,4 +1,21 @@
# RAE: Relative Absolute Error
# RAE: Relative Absolute Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Rae) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Relative Absolute Error (RAE) measures the total absolute error of predictions relative to the total absolute error of a simple baseline predictor ...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "How much better than just guessing the mean? RAE gives you the ratio."
+18 -1
View File
@@ -1,4 +1,21 @@
# RMSE: Root Mean Squared Error
# RMSE: Root Mean Squared Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (RMSE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Root Mean Squared Error (RMSE) is the square root of MSE, providing an error metric in the same units as the original data while retaining sensitiv...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "MSE's more interpretable sibling that speaks the language of your data."
+18 -1
View File
@@ -1,4 +1,21 @@
# RMSLE: Root Mean Squared Logarithmic Error
# RMSLE: Root Mean Squared Logarithmic Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (RMSLE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Root Mean Squared Logarithmic Error is the square root of MSLE, providing an error metric in log-scale units.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "RMSLE: because sometimes your errors need to be measured in decades, not dollars."
+18 -1
View File
@@ -1,4 +1,21 @@
# RSE: Relative Squared Error
# RSE: Relative Squared Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Rse) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Relative Squared Error (RSE) measures the total squared error of predictions relative to the total squared error of a simple baseline predictor tha...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The squared error version of RAE. RSE and R² are two sides of the same coin: R² = 1 - RSE."
+18 -1
View File
@@ -1,4 +1,21 @@
# R²: Coefficient of Determination
# R²: Coefficient of Determination
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (R) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- The Coefficient of Determination (R²) measures the proportion of variance in the actual values that is predictable from the predicted values.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "R² tells you how much of the variance in actual values is explained by your predictions. It's the statistician's favorite metric for good reason."
+18 -1
View File
@@ -1,4 +1,21 @@
# SMAPE: Symmetric Mean Absolute Percentage Error
# SMAPE: Symmetric Mean Absolute Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (SMAPE) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Symmetric Mean Absolute Percentage Error addresses a fundamental asymmetry in MAPE: the fact that over-predictions and under-predictions of the sam...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "MAPE punishes based on who's right; SMAPE punishes based on how different they are."
+18 -1
View File
@@ -1,4 +1,21 @@
# Theil's U: Theil's U Statistic
# Theil's U: Theil's U Statistic
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (TheilU) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Theil's U Statistic measures forecast accuracy relative to a naive no-change forecast.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "The forecast that matters is the one that beats a naive guess."
+18 -1
View File
@@ -1,4 +1,21 @@
# Tukey's Biweight: Robust Loss Function
# Tukey's Biweight: Robust Loss Function
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period`, `c` (default DefaultC) |
| **Outputs** | Single series (UNKNOWN) |
| **Output range** | $\geq 0$ |
| **Warmup** | 1 bar |
### TL;DR
- Tukey's Biweight (also called Bisquare) is a redescending M-estimator that completely ignores errors beyond a threshold.
- Parameterized by `period`, `c` (default defaultc).
- Output range: $\geq 0$.
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When outliers need to be silenced, not just quieted."
+18 -1
View File
@@ -1,4 +1,21 @@
# WMAPE: Weighted Mean Absolute Percentage Error
# WMAPE: Weighted Mean Absolute Percentage Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Wmape) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- Weighted Mean Absolute Percentage Error (WMAPE) adjusts MAPE by weighting each error by the magnitude of the actual value.
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "When not all errors are created equal, weight them by what matters."
+18 -1
View File
@@ -1,5 +1,22 @@
# WRMSE: Weighted Root Mean Squared Error
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Error Metric |
| **Inputs** | Source (close) |
| **Parameters** | `period` |
| **Outputs** | Single series (Wrmse) |
| **Output range** | $\geq 0$ |
| **Warmup** | `period` bars |
### TL;DR
- WRMSE extends the classic RMSE by incorporating weights for each observation, enabling analysts to emphasize critical data points such as recent ob...
- Parameterized by `period`.
- Output range: $\geq 0$.
- Requires `period` bars of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
> "Not all errors are created equal—WRMSE lets you decide which ones matter most."
WRMSE extends the classic RMSE by incorporating weights for each observation, enabling analysts to emphasize critical data points such as recent observations, high-volume periods, or specific market regimes. When all weights are equal, WRMSE reduces exactly to RMSE, making it a strict generalization. This implementation uses dual RingBuffers for O(1) streaming updates with periodic resync to manage floating-point drift.
@@ -169,4 +186,4 @@ WRMSE is validated by:
- Aitken, A.C. (1936). "On Least Squares and Linear Combinations of Observations." *Proceedings of the Royal Society of Edinburgh*.
- Gauss, C.F. (1809). *Theoria Motus Corporum Coelestium*. (Foundation of least squares theory)
- Greene, W.H. (2012). *Econometric Analysis*. 7th ed. Chapter 9: Generalized Least Squares.
- Greene, W.H. (2012). *Econometric Analysis*. 7th ed. Chapter 9: Generalized Least Squares.
+17
View File
@@ -1,5 +1,22 @@
# IFeed Interface
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Feed |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (IFeed) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `IFeed` defines the standard contract for all data feeds in QuanTAlib, ensuring consistent behavior across different data sources (synthetic, file-...
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
`IFeed` defines the standard contract for all data feeds in QuanTAlib, ensuring consistent behavior across different data sources (synthetic, file-based, or live API).
## Key Concepts
+17
View File
@@ -1,5 +1,22 @@
# CsvFeed Class
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Feed |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | `filePath` |
| **Outputs** | Single series (CsvFeed) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `CsvFeed` is a file-based feed implementation that loads historical OHLCV data from CSV files.
- Parameterized by `filepath`.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
`CsvFeed` is a file-based feed implementation that loads historical OHLCV data from CSV files. It supports both streaming access (simulating real-time playback) and batch retrieval.
## Key Features
+17
View File
@@ -1,5 +1,22 @@
# GBM Class
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Feed |
| **Inputs** | OHLCV bar (TBar) |
| **Parameters** | None |
| **Outputs** | Single series (GBM) |
| **Output range** | Varies (see docs) |
| **Warmup** | 1 bar |
### TL;DR
- `GBM` (Geometric Brownian Motion) is a synthetic data generator that simulates realistic financial price movements.
- No configurable parameters; computation is stateless per bar.
- Output range: Varies (see docs).
- Requires 1 bar of warmup before first valid output (IsHot = true).
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
`GBM` (Geometric Brownian Motion) is a synthetic data generator that simulates realistic financial price movements. It is useful for testing indicators, strategies, and system performance without relying on external data files.
## Key Features

Some files were not shown because too many files have changed in this diff Show More