Files

136 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

2026-02-27 07:48:12 -08:00
# DECO: Ehlers Decycler Oscillator
> *Ehlers' decycler oscillator removes the trend and isolates residual oscillation — what remains when the drift is subtracted.*
2026-02-27 07:48:12 -08:00
| Property | Value |
| ---------------- | -------------------------------- |
| **Category** | Oscillator |
| **Inputs** | Source (close) |
| **Parameters** | `shortPeriod` (default 30), `longPeriod` (default 60) |
| **Outputs** | Single series (Deco) |
| **Output range** | $0$ to $1$ |
| **Warmup** | 1 bar |
| **PineScript** | [deco.pine](deco.pine) |
2026-02-27 07:48:12 -08:00
- The Decycler Oscillator (DECO) is a DSP-based oscillator developed by John F.
- **Similar:** [DPO](../dpo/Dpo.md), [Reflex](../reflex/Reflex.md) | **Complementary:** Cycle analysis | **Trading note:** Ehlers' Decycler Oscillator; removes trend to isolate cycle component for timing.
2026-02-27 07:48:12 -08:00
- Validated against TA-Lib, Skender, and Tulip reference implementations where available.
## Overview
The Decycler Oscillator (DECO) is a DSP-based oscillator developed by John F. Ehlers that isolates intermediate-frequency market cycles. It computes the difference between two 2-pole Butterworth high-pass filters with different cutoff periods, revealing the spectral band between the two cutoff frequencies.
## Origin
- **Author:** John F. Ehlers
- **Source:** "Decyclers", Technical Analysis of Stocks & Commodities, September 2015
- **Category:** Oscillator / Digital Signal Processing
## Formula
The DECO uses two 2-pole Butterworth high-pass filters:
```
α = (cos(0.707 × 2π/period) + sin(0.707 × 2π/period) - 1) / cos(0.707 × 2π/period)
HP[n] = (1 - α/2)² × (x[n] - 2×x[n-1] + x[n-2]) + 2×(1-α) × HP[n-1] - (1-α× HP[n-2]
DECO = HP_long - HP_short
```
The 0.707 factor (1/√2) places the filter response at the -3 dB Butterworth design point.
### Transfer Function
Each HP filter has the z-domain transfer function:
```
H(z) = (1-α/2)² × (1 - 2z⁻¹ + z⁻²) / (1 - 2(1-α)z⁻¹ + (1-α)²z⁻²)
```
The DECO output is the difference H_long(z) - H_short(z), which forms a bandpass response isolating cycles between the short and long cutoff periods.
## Parameters
| Parameter | Type | Default | Range | Description |
|-----------|------|---------|-------|-------------|
| shortPeriod | int | 30 | > 0 | Short HP cutoff period (bars) |
| longPeriod | int | 60 | > shortPeriod | Long HP cutoff period (bars) |
## Interpretation
The Decycler Oscillator provides several analytical perspectives:
- **Zero-Line Crossovers:**
- Crossing above zero indicates bullish cycle momentum
- Crossing below zero indicates bearish cycle momentum
- The zero-crossing timing is relatively lag-free
- **Band Isolation:**
- The oscillator extracts only cycles within the frequency band defined by the two cutoff periods
- Shorter cycles and longer trends are both rejected
- This makes the oscillator highly selective
- **Divergence Analysis:**
- Bullish divergence: price makes lower lows while DECO makes higher lows
- Bearish divergence: price makes higher highs while DECO makes lower highs
- Indicates potential trend reversal
- **Multiple Instance Analysis:**
- Ehlers recommends using multiple DECO instances with different period pairs
- Crossovers between instances with different coefficients can identify trend reversals
## Warmup Period
The indicator requires `longPeriod` bars before producing reliable output. The first two bars always output zero (insufficient price history for the 2-pole HP filter).
## Properties
- **Range:** Unbounded (oscillates around zero)
- **Complexity:** O(1) per bar (pure IIR filter, no lookback buffer needed)
- **Memory:** O(1) — only stores filter state variables
## Related Indicators
- **Decycler (DECYCLER):** The low-pass complement — removes cycles, keeps trend
- **SSF-DSP:** Similar concept using Super Smooth Filters instead of HP filters
- **Roofing Filter:** HP + SSF combination for cycle isolation
- **BandPass Filter:** Ehlers' direct bandpass approach
2026-02-26 22:02:52 -08:00
## Performance Profile
### Operation Count (Streaming Mode)
DECO (Detrended Correlation Oscillator) subtracts a linear regression from price then computes correlation.
| Operation | Count | Cost (cycles) | Subtotal |
| :--- | :---: | :---: | :---: |
| Linear regression (O(N) or O(1) with prefix sums) | ~4 | 1 | 4 |
| SUB (detrend: price regression) | 1 | 1 | 1 |
| Correlation pipeline (see CTI) | ~22 | 7 | 156 |
| **Total** | **~27** | — | **~161 cycles** |
Dominated by the correlation computation. ~161 cycles per bar.
### Batch Mode (SIMD Analysis)
| Operation | Vectorizable? | Notes |
| :--- | :---: | :--- |
| Linear regression | Yes | Prefix-sum dot products; VFMADD |
| Detrend subtraction | Yes | VSUBPD |
| Correlation | Yes | See CTI batch analysis |
Fully vectorizable in batch. Regression and correlation both benefit from AVX2 VFMADD chains.
### Quality Metrics
| Metric | Score | Notes |
| :--- | :---: | :--- |
| **Accuracy** | 9/10 | Exact linear detrend + Pearson r |
| **Timeliness** | 5/10 | Two N-bar windows compound lag |
| **Smoothness** | 8/10 | Detrending removes linear drift; correlation bounded |
| **Noise Rejection** | 8/10 | Linear detrend + correlation is doubly robust to trend contamination |
## References
1. Ehlers, J. F. (2015). "Decyclers." *Technical Analysis of Stocks & Commodities*, September 2015.
2. Ehlers, J. F. (2013). *Cycle Analytics for Traders*. Wiley. Chapter 4.