Derivation of Historical Volatility -- lognormal price distribution, yes... BUT ...

Discussion in 'Technical Analysis' started by fatrat, Dec 14, 2005.

  1. fatrat


    I'm reading the book "Professional Stock Trading", and he does some calculations for the historical volatility that I don't fully understand. He says the calculation is based on some math for the Black-Scholes model, which I have yet to review.

    But, the way it works is this:

    AcmeVolatility = StdDev( log( Close/Close[1] ), Length ) * SquareRoot( TimeFactor );

    I don't understand why the quantity is multiplied by the SquareRoot of the time factor. Can someone point me to some mathematical texts that explain fully why Historical Volatility is derived this way?
  2. I haven't read the book, but my guess is that the timefactor is there to normalize the volatility to a standard timeframe, which is usuallly annual.
  3. MTE


    Volatility is usually expressed as annual percentage, i.e. standard deviation, and to annualize standard deviation you need to multiply it by the square root of time.

    So if you calculate standard deviation over the past 20 days then you need to multiply that number by the sqrt(252/20).
  4. fatrat


    Pardon my statistics ignorance -- Check my reasoning here. I haven't had a reason to use statistics since college, so I'm trying to make sense of it all:

    Analagously, you're saying this would be like looking at a to-scale model airplane and then trying to deduce the dimensions of a real plane by multiplying it by the scale factor? Only, in the case of HV's derivation, we're "scaling" by a time frame to make guesses about the volatility over the period of 1 trading year?

    The standard deviation over n number of days gives you, well, "a measure of spread" for n number of days. Then we want to "normalize" that volatility as if we were looking at it over the period of 1 year of trading days.

    Definition of standard deviation, or square root of sample variance:

    sqrt( (1 / n) * sigma[1 to n]( (x_i - x_avg )^2 ) )

    [From here on out, assume the sigma refers to a summation from 1 to n]

    Then you're multiplying it out by sqrt( timeframe / n ), so you have:

    sqrt( (1 / n ) * sigma( (x_i - x_avg) ^2 ) * 252 / n )


    sqrt( (1 / n^2) * sigma ( x_i - x_avg )^2 ) * 252 )

    To make things make more sense, let's look at the effect on the variance:

    1/n * sigma[ (x_i - x_avg)^2 ] * 252/n

    Re-arranging it, you could move the constants inside the summation:

    sigma[ (1/n) * (x_i - x_avg)^2 * 252 / n ]

    So the effect on the variance is essentially to take each squared term "distance from the mean" and just flat out scale it by the number of "periods" of n days in a given trading year?

    In effect, you're just adjusting the "dispersion" of the terms as if they occurred over a year?

    And if you accept the lognormal distribution of stock prices, you have to use a multiplier based on the logarithms of the closing prices for each bar of data.

    I can accept this, now that I've gone over it. But some confirmation of my understanding here would be nice.
  5. cakulev


    log normal means when you do log transformation on a given data, the resulting data is normal.
    So instead of sigma( x_i - x_avg ) you'll have sigma(log(x_i) - log(x_avg)) = sigma(log(x_i/x_avg))
  6. MTE


    In other words, the standard deviation increases proportionately to the square root of time.:)
  7. GTG


    You are correct. The reason for expressing the historical volatility as an annual volatility is so that it can be plugged into the standard form of the Black-Scholes Equation. This makes the units work out correctly. Otherwise, just use whatever time frame is most convenient for your purposes.