Syntax
public static StdDev Series(DataSeries ds, int period, WealthLab.Indicators.StdDevCalculation calcType)
public StdDev(DataSeries ds, int period, StdDevCalculation calcType, string description)
public static double Value(int bar, DataSeries ds, int period, StdDevCalculation calcType)
Parameter Description
ds |
The source DataSeries |
period |
Indicator calculation period |
calcType |
WealthLab.Indicators.StdDevCalculation
public const WealthLab.Indicators.StdDevCalculation Population = 0
public const WealthLab.Indicators.StdDevCalculation Sample = 1
|
Description
Standard Deviation is the statistical measure of market volatility. If prices trade in a tight narrow trading range then StdDev will return a low value indicating volatility is low. Conversely if prices swing wildly up and down then StdDev returns a high value indicating volatility is high. What it does is measure how widely prices are dispersed from the average or mean price.
Interpretation
- Standard deviation rises as prices become more volatile. As price action calms, standard deviation heads lower.
- Market tops accompanied by increase volatility over short periods of time, indicate nervous and indecisive traders. Or market tops with decreasing volatility over long time frames, indicate maturing bull markets.
- Market bottoms accompanied by decreased volatility over long periods of time, indicate bored and disinterested traders. Or market bottoms with increasing volatility over relatively sort time periods, indicate panic sell off.
Remarks
- Avoid testing StdDev of a Standard Price Series (Bars.Open, Bars.Close, etc.) for an absolute value since these series can be adjusted (split) in the future, which will change their historic deviations. Instead, normalize the test by dividing both StdDev and the value (or series) by the DataSeries value.
Avoidif( StdDev.Value( bar, Close, 20 ) < 1.5 ...
Correct/* Normalized */
double C = Close[bar];
if( ( StdDev.Series( Close, 20 )[bar] / C ) < ( 1.5 / C ) )...
Calculation
You can choose between standard deviation of a sample (compatible with Excel STDEV) or of a population (compatible with Excel STDEVP) by passing the appropriate value from the 'WealthLab.Indicators.StdDevCalculation' enum.
Steps to calculate Standard Deviation for n periods
- Calculate the mean price by summating the price for n periods and divide by n.
- From each period's price subtract the mean, this gives you the deviation for each period.
- Find the sum of the squares of all deviations.
- Divide the sum of the squared deviations found in step 3 by ( n - 1 ).
- Calculate the square root of the result of the previous step.
Example
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;
namespace WealthLab.Strategies
{
public class MyStrategy : WealthScript
{
protected override void Execute()
{
// Divide Standard Deviation by Average Price to arrive at a normalized Volatility indicator
DataSeries MyVolatility = StdDev.Series( Close, 30, StdDevCalculation.Population ) / SMA.Series( Close, 30 );
MyVolatility.Description = "Normalized Volatility";
ChartPane VolPane = CreatePane( 50, true, true );
PlotSeries( VolPane, MyVolatility, Color.Purple, LineStyle.Histogram, 3 );
// Plot Std Dev Bands aka Bollinger Bands
HideVolume();
DataSeries StdDevBand = StdDev.Series( Close, 20, StdDevCalculation.Population ) * 2;
DataSeries StdH = SMA.Series( Close, 20 ) + StdDevBand;
DataSeries StdL = SMA.Series( Close, 20 ) - StdDevBand;
PlotSeriesDualFillBand( PricePane, StdH, StdL, Color.FromArgb(10,10,0,0), Color.Empty, Color.Empty, LineStyle.Solid, 1 );
}
}
}