The Squeeze & Release indicator is a technical tool designed to identify moments when the market is experiencing volatility compression (Squeeze) and when this compression is released (Release). This behavior often precedes significant price movements, as markets typically alternate between periods of low and high volatility.
The Squeeze & Release indicator uses the Average True Range (ATR) and other derived metrics to measure market volatility and the relationship between compression and expansion. This helps traders visualize potential breakout points and anticipate price directions.
The ATR (Average True Range) measures market volatility by considering the maximum range between high, low, and closing prices. This value is smoothed using an Exponential Moving Average (EMA), providing a more stable indicator.
The difference between the ATR and its EMA serves as the foundation for calculating the market’s relative volatility. Positive or negative values in this metric indicate changes in volatility intensity.
The Squeeze Value is a normalized metric that compares volatility to the price range (difference between the high and low). This value can be optionally smoothed to filter out market noise. A moving average of this value (SVMA) acts as a reference to identify crossovers and generate signals:
The indicator uses color combinations to highlight market states:
The indicator calculates thresholds based on standard deviations to highlight potential action zones. These areas serve as visual alerts to identify:
Filling between upper and lower zones helps traders easily identify these critical moments on a chart.
The Squeeze & Release indicator offers several customizable parameters to adapt it to different assets and trading strategies:
Each of these parameters can be fine-tuned based on the type of asset (stocks, currencies, cryptocurrencies) or strategy (short-term, long-term).
To better understand how this indicator works, here’s a practical example:
The Squeeze & Release indicator is a powerful tool for analyzing volatility and anticipating significant market movements. Its customization options and clear visual representation make it a valuable resource for traders seeking opportunities in compressed markets.
However, like any technical indicator, it’s essential to use it in conjunction with other analyses to confirm signals and minimize risks. Its ability to adapt to various assets and trading styles makes it a versatile choice in the arsenal of technical analysis tools.
//-----------------------------------------------------//
//PRC_Squeeze & Release
//version = 0
//08.04.24
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
//-----------------------------------------------------//
//-----Inputs-----------------------------------------//
//-----------------------------------------------------//
periodForCalculation=14 //Calculation Period
lengthForSmoothing=7 //Smoothing Length
lengthForEMA=14 //EMA Length
lengthForHyperSqueezeDetection=5 //Hyper Squeeze Detection Length
enableSmoothing=1 //Enable Smoothing
standarddeviationlength=min(barindex,4999)
//-----------------------------------------------------//
//-----Calculating ATR and its EMA---------------------//
//-----------------------------------------------------//
atr = average[periodForCalculation,1](TR(close))
emaofATR = average[periodForCalculation*2,1](atr)
volatilityIndicator = emaofATR - atr
//-----------------------------------------------------//
//-----Calculating SV (Squeeze Value) and //
//-----SVMA (Squeeze Value Moving Average) //
//-----------------------------------------------------//
emaHighLowDifference=average[periodForCalculation*2](high-low)
if enableSmoothing then
squeezeValue=average[lengthForSmoothing,1](volatilityIndicator / emaHighLowDifference * 100)
else
squeezeValue=volatilityIndicator / emaHighLowDifference * 100
endif
squeezeValueMA=average[lengthForEMA,1](squeezeValue)
//-----------------------------------------------------//
//-----Color Main Line---------------------------------//
//-----------------------------------------------------//
if squeezeValue>0 and squeezeValue>=highest[lengthForHyperSqueezeDetection](squeezeValue) then
ra=0
ga=0
ba=0
alpha=100
else
ra=124
ga=124
ba=124
alpha=70
endif
if squeezeValue > squeezeValueMA then
//colorForSqueeze r=233/g=30/b=99
r=233
g=30
b=99
else
//colorForRelease r=103/g=58/b=103
r=103
g=58
b=103
endif
//-----------------------------------------------------//
//----Plotting characters for Squeeze and Release-------//
//-----------------------------------------------------//
if squeezeValue crosses over squeezeValueMA then
drawtext("S",barindex,squeezeValueMA - 10)coloured(233,30,99)
elsif squeezeValue crosses under squeezeValueMA then
drawtext("R",barindex,squeezeValueMA + 10)coloured(103,58,103)
endif
//-----------------------------------------------------//
//-----Filling between MA and Value--------------------//
//-----------------------------------------------------//
COLORBETWEEN(squeezeValueMA,squeezeValue,r,g,b)
if barindex <= periodForCalculation*3+lengthForEMA then
meanvalue=0
squeezeValue=0
else
meanValue=summation[barindex](squeezeValue)/barindex
standardDeviation=std[standarddeviationlength](squeezeValue)
endif
thresholdUp=max((squeezeValue-meanValue)/(2*standardDeviation) * 100, 70)
thresholdDown=max((meanValue-squeezeValue)/(2*standardDeviation) * 100, 70)
upperLimit=meanValue+standardDeviation
lowerHigh=meanValue-standardDeviation
upperHigh=meanValue + 2*standardDeviation
lowerLimit=meanValue - 2*standardDeviation
colorbetween(upperLimit,upperHigh,r,g,b,30)
colorbetween(lowerHigh,lowerLimit,r,g,b,30)
//-----------------------------------------------------//
return squeezeValue as "ATR"coloured(r,g,b)style(line,2),squeezeValueMA as "MovingAverageLine"coloured(ra,ga,ba)style(line,3)