Hodrick-Prescott Structural CycleThis script is about solving one specific problem: Decomposition.
In any market, you have two things happening at once: the underlying "Trend" (the structural value) and the "Cycle" (the noise or volatility around that value). The Hodrick-Prescott (HP) filter is the standard econometric tool to separate them.
1. The Separation Logic (HP Filter)
Most moving averages lag. The HP filter attempts to find a smooth curve that represents the long-term path of the asset, minimizing the variance of the cycle.
In the code, the "stiffness" of this curve is controlled by Lambda ().
get_auto_lambda() =>
timeframe.isintraday ? 6250000 :
timeframe.isdaily ? 129600 :
1600
1600 is the standard used by economists for quarterly data. If the timeframe changes (daily or intraday), it automatically scales Lambda up to maintain that same "quarterly" smoothness on a faster chart.
2. The Mechanics (2-Pole Recursion)
The classic HP filter looks at future data, which is impossible for live trading. We uses a 2-Pole Super Smoother to approximate that curve using only past data.
hp_filter_2pole(src, period) =>
// ... coefficients calculated ...
var float filt = 0.0
filt := c1 * (src + nz(src )) / 2 + c2 * nz(filt ) + c3 * nz(filt )
See the filt and filt -> that's recursion. The filter references its own previous output. This creates memory, allowing the line to resist sudden spikes in price (noise) while slowly adapting to the true direction.
3. The Four Market Regimes
This script splits the market into four distinct quadrants based on where the Z-Score is and where it is going.
bool is_expansion = z_score > 0 and z_score > z_score
bool is_downturn = z_score > 0 and z_score < z_score
bool is_recovery = z_score < 0 and z_score > z_score
bool is_recession = z_score < 0 and z_score < z_score
1. Expansion (Green): We are above the trend, and momentum is accelerating.
2. Downturn (Orange): We are above the trend, but momentum is slowing (topping out).
3. Recession (Red): We are below the trend, and price is collapsing.
4. Recovery (Blue): We are below the trend, but price has stopped falling and is turning up.
The Background Zones: Statistical Extremes
This script monitors the Z-Score (the normalized cycle). When this score moves beyond 1.0 standard deviation from the mean (zero), the background lights up.
Red Background (Recession Zone): The Z-Score is < -1.0. Price is significantly below its structural trend. This is where fear is highest, and the asset is statistically "underwater."
Green Background (Overheating Zone): The Z-Score is > 1.0. Price is stretching far above the trend.
Why it matters: Markets rarely stay beyond 2.0 standard deviations for long. When you see the background colored, you are in an outlier event. (The rubber band is stretched)
Divergences: The "Check Engine" Light
It also scans for discrepancies between Price Action and the Cycle Momentum (Z-Score).
Bullish Divergence: Price makes a Lower Low, but the Cycle makes a Higher Low. The sellers are pushing price down, but with less conviction than before.
Bearish Divergence: Price makes a Higher High, but the Cycle makes a Lower High. Buyers are exhausted.
How to use this:
Do not treat a divergence tag as an entry signal.
A divergence is a state of discrepancy, not a timing trigger. It tells you that the prevailing trend is running out of steam.
Indikator Pine Script®















