Syntax
public HV(DataSeries source, int period, int span, string description)
public static HV Series(DataSeries source, int period, int span)
Parameter Description
source |
Price series |
period |
How many bars HV shall use. The real number of periods that HV will use is Period - 1, because if for example you use 20 price bars, there are 19 periods in between and 19 returns. |
span |
Used to convert the HV to a different time scale. If the Chart has weekly bars and annualized historical volatility is required, use 52 for Span because there are 52 weeks in a year. |
Description
Returns the Historical Volatility of the selected Price Series. Historical Volatility is the standard deviation of the logarithm of the price ratio, i.e.
HV = Standard Deviation (ln(Price[bar] / Price[bar-1]))
Interpretation
A sharp increase in HV will alert you to unusual volatility in the markets. This is often an ideal time to monitor the market for entry in the opposite direction of the panic.
Calculation
HV = Sqrt( SSD / ( Period - 1 ) ) * Sqrt( Span )
where,
SSD = Sum( LOGSi - ALOGS ) over Period bars
LOGSi = Logarithm of Price - Previous Price
ALOGS = Sum( Logarithms of Price Change over Span ) / Span
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()
{
DataSeries Average = (High+Low)/2;
DataSeries HV1 = HV.Series( Average, 20, 262 ); HV1.Description = "HV of Average Price";
double stop = 0; double profit = 0;
for(int bar = 262; bar < Bars.Count; bar++)
{
if (!IsLastPositionActive)
{
if( HV1bar > 100 )
if( ROC.Series( Close, 30 )bar > 0 )
ShortAtMarket( bar+1 ); else
BuyAtMarket( bar+1 );
}
else
{
Position p = LastPosition;
stop = (p.PositionType == PositionType.Long) ? p.EntryPrice * 0.6 : profit = p.EntryPrice * 1.4;
profit = (p.PositionType == PositionType.Long) ? p.EntryPrice * 1.15 : profit = p.EntryPrice * 0.85;
if( !ExitAtStop( bar, p, stop ) )
ExitAtLimit( bar, p, profit );
}
}
ChartPane HVPane = CreatePane( 35, true, true );
PlotSeries( HVPane, HV1, Color.Teal, WealthLab.LineStyle.Solid, 2);
}
}
}