PINE LIBRARY

VolatilityIndicators

Updated
Library "VolatilityIndicators"
This is a library of Volatility Indicators.
It aims to facilitate the grouping of this category of indicators, and also offer the customized supply of
the parameters and sources, not being restricted to just the closing price.

thanks and credits:
1. Dynamic Zones: Leo Zamansky, Ph.D., and David Stendahl
2. Deviation: Karl Pearson (code by TradingView)
3. Variance: Ronald Fisher (code by TradingView)
4. Z-score: Veronique Valcu (code by HPotter)
5. Standard deviation: Ronald Fisher (code by TradingView)
6. ATR (Average True Range): J. Welles Wilder (code by TradingView)
7. ATRP (Average True Range Percent): millerrh
8. Historical Volatility: HPotter
9. Min-Max Scale Normalization: gorx1
10. Mean Normalization: gorx1
11. Standardization: gorx1
12. Scaling to unit length: gorx1
13. LS Volatility Index: Alexandre Wolwacz (Stormer), Fabrício Lorenz, Fábio Figueiredo (Vlad) (code by me)
14. Bollinger Bands: John Bollinger (code by TradingView)
15. Bollinger Bands %: John Bollinger (code by TradingView)
16. Bollinger Bands Width: John Bollinger (code by TradingView)

dev(source, length, anotherSource)
  Deviation. Measure the difference between a source in relation to another source
  Parameters:
    source (float)
    length (simple int): (int) Sequential period to calculate the deviation
    anotherSource (float): (float) Source to compare
  Returns: (float) Bollinger Bands Width

variance(src, mean, length, biased, degreesOfFreedom)
  Variance. A statistical measurement of the spread between numbers in a data set. More specifically,
variance measures how far each number in the set is from the mean (average), and thus from every other number in the set.
Variance is often depicted by this symbol: σ2. It is used by both analysts and traders to determine volatility and market security.
  Parameters:
    src (float): (float) Source to calculate variance
    mean (float): (float) Mean (Moving average)
    length (simple int): (int) The sequential period to calcule the variance (number of values in data set)
    biased (simple bool): (bool) Defines the type of standard deviation. If true, uses biased sample variance (n),
    degreesOfFreedom (simple int): (int) Degrees of freedom. The number of values in the final calculation of a statistic that are free to vary.
Default value is n-1, where n here is length. Only applies when biased parameter is defined as true.
  Returns: (float) Standard deviation

stDev(src, length, mean, biased, degreesOfFreedom)
  Measure the Standard deviation from a source in relation to it's moving average.
In this implementation, you pass the average as a parameter, allowing a more personalized calculation.
  Parameters:
    src (float): (float) Source to calculate standard deviation
    length (simple int): (int) The sequential period to calcule the standard deviation
    mean (float): (float) Moving average.
    biased (simple bool): (bool) Defines the type of standard deviation. If true, uses biased sample variance (n),
else uses unbiased sample variance (n-1 or another value, as long as it is in the range between 1 and n-1), where n=length.
    degreesOfFreedom (simple int): (int) Degrees of freedom. The number of values in the final calculation of a statistic that are free to vary.
Default value is n-1, where n here is length.
  Returns: (float) Standard deviation

zscore(src, mean, length, biased, degreesOfFreedom)
  Z-Score. A z-score is a statistical measurement that indicates how many standard deviations a data point is from
the mean of a data set. It is also known as a standard score. The formula for calculating a z-score is (x - μ) / σ,
where x is the individual data point, μ is the mean of the data set, and σ is the standard deviation of the data set.
Z-scores are useful in identifying outliers or extreme values in a data set. A positive z-score indicates that the
data point is above the mean, while a negative z-score indicates that the data point is below the mean. A z-score of
0 indicates that the data point is equal to the mean.
Z-scores are often used in hypothesis testing and determining confidence intervals. They can also be used to compare
data sets with different units or scales, as the z-score standardizes the data. Overall, z-scores provide a way to
measure the relative position of a data point in a data
  Parameters:
    src (float): (float) Source to calculate z-score
    mean (float): (float) Moving average.
    length (simple int): (int) The sequential period to calcule the standard deviation
    biased (simple bool): (bool) Defines the type of standard deviation. If true, uses biased sample variance (n),
else uses unbiased sample variance (n-1 or another value, as long as it is in the range between 1 and n-1), where n=length.
    degreesOfFreedom (simple int): (int) Degrees of freedom. The number of values in the final calculation of a statistic that are free to vary.
Default value is n-1, where n here is length.
  Returns: (float) Z-score

atr(source, length)
  ATR: Average True Range. Customized version with source parameter.
  Parameters:
    source (float): (float) Source
    length (simple int): (int) Length (number of bars back)
  Returns: (float) ATR

atrp(length, sourceP)
  ATRP (Average True Range Percent)
  Parameters:
    length (simple int): (int) Length (number of bars back) for ATR
    sourceP (float): (float) Source for calculating percentage relativity
  Returns: (float) ATRP

atrp(source, length, sourceP)
  ATRP (Average True Range Percent). Customized version with source parameter.
  Parameters:
    source (float): (float) Source for ATR
    length (simple int): (int) Length (number of bars back) for ATR
    sourceP (float): (float) Source for calculating percentage relativity
  Returns: (float) ATRP

historicalVolatility(lengthATR, lengthHist)
  Historical Volatility
  Parameters:
    lengthATR (simple int): (int) Length (number of bars back) for ATR
    lengthHist (simple int): (int) Length (number of bars back) for Historical Volatility
  Returns: (float) Historical Volatility

historicalVolatility(source, lengthATR, lengthHist)
  Historical Volatility
  Parameters:
    source (float): (float) Source for ATR
    lengthATR (simple int): (int) Length (number of bars back) for ATR
    lengthHist (simple int): (int) Length (number of bars back) for Historical Volatility
  Returns: (float) Historical Volatility

minMaxNormalization(src, numbars)
  Min-Max Scale Normalization. Maximum and minimum values are taken from the sequential range of
numbars bars back, where numbars is a number defined by the user.
  Parameters:
    src (float): (float) Source to normalize
    numbars (simple int): (int) Numbers of sequential bars back to seek for lowest and hightest values.
  Returns: (float) Normalized value

minMaxNormalization(src, numbars, minimumLimit, maximumLimit)
  Min-Max Scale Normalization. Maximum and minimum values are taken from the sequential range of
numbars bars back, where numbars is a number defined by the user.
In this implementation, the user explicitly provides the desired minimum (min) and maximum (max) values for the scale,
rather than using the minimum and maximum values from the data.
  Parameters:
    src (float): (float) Source to normalize
    numbars (simple int): (int) Numbers of sequential bars back to seek for lowest and hightest values.
    minimumLimit (simple float): (float) Minimum value to scale
    maximumLimit (simple float): (float) Maximum value to scale
  Returns: (float) Normalized value

meanNormalization(src, numbars, mean)
  Mean Normalization
  Parameters:
    src (float): (float) Source to normalize
    numbars (simple int): (int) Numbers of sequential bars back to seek for lowest and hightest values.
    mean (float): (float) Mean of source
  Returns: (float) Normalized value

standardization(src, mean, stDev)
  Standardization (Z-score Normalization). How "outside the mean" values relate to the standard deviation (ratio between first and second)
  Parameters:
    src (float): (float) Source to normalize
    mean (float): (float) Mean of source
    stDev (float): (float) Standard Deviation
  Returns: (float) Normalized value

scalingToUnitLength(src, numbars)
  Scaling to unit length
  Parameters:
    src (float): (float) Source to normalize
    numbars (simple int): (int) Numbers of sequential bars back to seek for lowest and hightest values.
  Returns: (float) Normalized value

lsVolatilityIndex(movingAverage, sourceHvol, lengthATR, lengthHist, lenNormal, lowerLimit, upperLimit)
  LS Volatility Index. Measures the volatility of price in relation to an average.
  Parameters:
    movingAverage (float): (float) A moving average
    sourceHvol (float): (float) Source for calculating the historical volatility
    lengthATR (simple int): (float) Length for calculating the ATR (Average True Range)
    lengthHist (simple int): (float) Length for calculating the historical volatility
    lenNormal (simple int): (float) Length for normalization
    lowerLimit (simple int)
    upperLimit (simple int)
  Returns: (float) LS Volatility Index

lsVolatilityIndex(sourcePrice, movingAverage, sourceHvol, lengthATR, lengthHist, lenNormal, lowerLimit, upperLimit)
  LS Volatility Index. Measures the volatility of price in relation to an average.
  Parameters:
    sourcePrice (float): (float) Source for measure the distance
    movingAverage (float): (float) A moving average
    sourceHvol (float): (float) Source for calculating the historical volatility
    lengthATR (simple int): (float) Length for calculating the ATR (Average True Range)
    lengthHist (simple int): (float) Length for calculating the historical volatility
    lenNormal (simple int)
    lowerLimit (simple int)
    upperLimit (simple int)
  Returns: (float) LS Volatility Index

bollingerBands(src, length, mult, basis)
  Bollinger Bands. A Bollinger Band is a technical analysis tool defined by a set of lines plotted
two standard deviations (positively and negatively) away from a simple moving average (SMA) of the security's price,
but can be adjusted to user preferences. In this version you can pass a customized basis (moving average), not only SMA.
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) The time period to be used in calculating the standard deviation
    mult (simple float): (float) Multiplier used in standard deviation. Basically, the upper/lower bands are standard deviation multiplied by this.
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float) A tuple of Bollinger Bands, where index 1=basis; 2=basis+dev; 3=basis-dev; and dev=multiplier*stdev

bollingerBands(src, length, aMult, basis)
  Bollinger Bands. A Bollinger Band is a technical analysis tool defined by a set of lines plotted
two standard deviations (positively and negatively) away from a simple moving average (SMA) of the security's price,
but can be adjusted to user preferences. In this version you can pass a customized basis (moving average), not only SMA.
Also, various multipliers can be passed, thus getting more bands (instead of just 2).
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) The time period to be used in calculating the standard deviation
    aMult (float[]): (float[]) An array of multiplies used in standard deviation. Basically, the upper/lower bands are standard deviation multiplied by this.
This array of multipliers permit the use of various bands, not only 2.
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float[]) An array of Bollinger Bands, where:
index 1=basis; 2=basis+dev1; 3=basis-dev1; 4=basis+dev2, 5=basis-dev2, 6=basis+dev2, 7=basis-dev2, Nup=basis+devN, Nlow=basis-devN
and dev1, dev2, devN are ```multiplier N * stdev```

bollingerBandsB(src, length, mult, basis)
  Bollinger Bands %B - or Percent Bandwidth (%B).
Quantify or display where price (or another source) is in relation to the bands.
%B can be useful in identifying trends and trading signals.
Calculation:
%B = (Current Price - Lower Band) / (Upper Band - Lower Band)
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) The time period to be used in calculating the standard deviation
    mult (simple float): (float) Multiplier used in standard deviation
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float) Bollinger Bands %B

bollingerBandsB(src, length, aMult, basis)
  Bollinger Bands %B - or Percent Bandwidth (%B).
Quantify or display where price (or another source) is in relation to the bands.
%B can be useful in identifying trends and trading signals.
Calculation
%B = (Current Price - Lower Band) / (Upper Band - Lower Band)
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) The time period to be used in calculating the standard deviation
    aMult (float[]): (float[]) Array of multiplier used in standard deviation. Basically, the upper/lower bands are standard deviation multiplied by this.
This array of multipliers permit the use of various bands, not only 2.
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float[]) An array of Bollinger Bands %B. The number of results in this array is equal the numbers of multipliers passed via parameter.

bollingerBandsW(src, length, mult, basis)
  Bollinger Bands Width. Serve as a way to quantitatively measure the width between the Upper and Lower Bands
Calculation:
Bollinger Bands Width = (Upper Band - Lower Band) / Middle Band
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) Sequential period to calculate the standard deviation
    mult (simple float): (float) Multiplier used in standard deviation
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float) Bollinger Bands Width

bollingerBandsW(src, length, aMult, basis)
  Bollinger Bands Width. Serve as a way to quantitatively measure the width between the Upper and Lower Bands
Calculation
Bollinger Bands Width = (Upper Band - Lower Band) / Middle Band
  Parameters:
    src (float): (float) Source to calculate standard deviation used in Bollinger Bands
    length (simple int): (int) Sequential period to calculate the standard deviation
    aMult (float[]): (float[]) Array of multiplier used in standard deviation. Basically, the upper/lower bands are standard deviation multiplied by this.
This array of multipliers permit the use of various bands, not only 2.
    basis (float): (float) Basis of Bollinger Bands (a moving average)
  Returns: (float[]) An array of Bollinger Bands Width. The number of results in this array is equal the numbers of multipliers passed via parameter.

dinamicZone(source, sampleLength, pcntAbove, pcntBelow)
  Get Dynamic Zones
  Parameters:
    source (float): (float) Source
    sampleLength (simple int): (int) Sample Length
    pcntAbove (simple float): (float) Calculates the top of the dynamic zone, considering that the maximum values are above x% of the sample
    pcntBelow (simple float): (float) Calculates the bottom of the dynamic zone, considering that the minimum values are below x% of the sample
  Returns: [float, float, float] A tuple with 3 series of values: (1) Upper Line of Dynamic Zone;
(2) Lower Line of Dynamic Zone; (3) Center of Dynamic Zone (x = 50%)

Examples:

snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
snapshot
Release Notes
v2
[Minor fixes]:
- Renamed "Dinamic Zones" to "Dynamic Zones";
- Added examples on main chart.
Release Notes
v3
Added Standard Error
Release Notes
v4

Added:
1. Keltner Channels.
2. Keltner Channels B% (or Percent Bandwidth): same as Bollinger Bands %B, but instead of Bollinger Bands, the logic of Keltner Channels is used to obtain the Percent Bandwidth (%B).
3. Keltner Channels W (Keltner Channels Width): same as Bollinger Bands Width, but instead of Bollinger Bands, the logic of Keltner Channels is used to obtain the Width.
4. Moving Average Envelopes.
5. Donchian Channels.

Examples:
Keltner Channels
snapshot

Keltner Channels with custom source
snapshot

Keltner Channels with multiple bands
snapshot

Keltner Channels %B - or Percent Bandwidth (%B)
snapshot
snapshot
With normalization
snapshot

Keltner Channels %B with multiple bands
snapshot

Keltner Channels Width
snapshot

Keltner Channels Width with multiple bands
snapshot

Moving Average Envelopes
snapshot

Moving Average Envelopes with multiple bands
snapshot

Donchian Channels with custom source for high and low
snapshot

Donchian Channels with multiple bands
snapshot
Release Notes
v5
Minor fix in ta.highest/ta.lowest to function with hl2 sources.
Release Notes
v6

Fixed functions without export keyword.
Release Notes
v7

snapshot
snapshot

- Added t-score function. A t-score is a statistical measurement that indicates how many standard errors a data point is from
the mean of a data set. It is also known as a standard score. When to use t-score instead of z-score? When the sample size is small (n < 30).

- Now there are two ways to calculate historical volatility: Accumulated ATR Version and Returns version. Both forms of volatility calculation have their specific utilities and applications. Therefore, it is worthwhile to have both approaches available, and one should not necessarily replace the other. Each method has its advantages and may be more appropriate in different contexts.

The first approach, using the accumulated ATR, can be useful when you want to take into account the implied volatility of prices over time, reflecting broader price movements and higher impact events. It can be especially relevant in scenarios where unexpected events can drastically affect prices.

The second approach, using the standard deviation of returns, is more common and traditionally used to measure historical volatility. It considers the variability of prices relative to their average, providing a more general measure of market volatility.

Therefore, both forms of calculation have their merits and can be useful depending on the context and specific analysis needs. Having both options available gives users flexibility in choosing the most appropriate volatility measure for the situation at hand.

- The LS Volatility Index indicator has been updated to use one of these two strands.

- Minor fix in descriptions.
Release Notes
v8

Improvements to LS Volatility Index parameters.
Release Notes
v9

Added:
getPriceAtZscore(zscore, standardDeviation, mean)
  Price at Z-Score. Calculate the price at a given z-score, standard deviation and mean.
  Parameters:
    zscore (float): (float) Z-score
    standardDeviation (float): (float) Standard deviation
    mean (float): (float) Moving average.
  Returns: (float) Price at Z-score
ATRbollinger_bandsdynamiczoneslsvolatilityindexnormalizationStandard Deviation (Volatility)techindicatorvolatilityindicatorvolatiltyzscore

Pine library

In true TradingView spirit, the author has published this Pine code as an open-source library so that other Pine programmers from our community can reuse it. Cheers to the author! You may use this library privately or in other open-source publications, but reuse of this code in a publication is governed by House rules.


To contribute to my work:
⚡Bitcoin Lightning: forwardocean64@walletofsatoshi.com
🟠Bitcoin: bc1qv0j28wjsg6l8fdkphkmgfz4f55xpph893q0pdh
🔵PayPal: paypal.com/donate/?hosted_button_id=D9KRKY5HMSL9S
Also on:

Disclaimer