Historical volatility

Discussion in 'Options' started by yigal, Dec 21, 2008.

  1. yigal


    I would like to ask exactly what it means when a currency cross has a historical volatility of, say, 10%. I understand that the 10% is the volatility expressed in annual terms, and that it represents a one standard deviation move. Also, I understand that one standard deviation represents two thirds (approximately) of all occurences, but - but then my question is - what does that mean exactly?

    Will it mean that Currency cross X, at the beginning of the year is trading at 100, will, in two thirds of the cases, stay between 90 and 110? Or will it, in two thirds of the cases, stay between 95 and 105? Or none of the above?

    This is basically my doubt.
  2. Your first answer is correct. It's probable that in 2 out of 3 cases, in a one year period, your stock would trade b/t 90 and 110.
  3. dmo


    Right - this is precisely correct for a normal distribution. If the OP is interested in the precise answer for options, he'll need to take into account the fact that option pricing is based on a lognormal distribution, which factors in the fact that the underlying can go up to infinity but can only go down to zero.

    So the actual range implied will be from a little higher than 90 to a little higher than 110.

    Does anyone perchance know how to calculate those exact numbers? I'm sure there's an easy way to do it in Excel, I just don't know what it is.
  4. This is written in wealth-script (Pascal-like), but should be easy to convert to C or put in Excel. This comes from McMillan's Option's as a Strategic Investment. 3rd edition, p-463.
    function LogVol(xdays, currentBar: integer):float;
    //This function calculates the log-normal historical volatility of the stock
    //  for the number of days in xdays.
    var AvgOfLns, SumOfAvgs: float;
    var count, i, endloop: integer;
    var Pratio: array[0..500] of float;
    var LNratio: array[0..500] of float;
    var Avgarray: array[0..500] of float;
    count := currentBar;
    AvgOfLns := 0.0;
    SumOfAvgs := 0.0;
    endloop := xdays - 1;
    for i := 0 to endloop do   //Get ratio of Closes
      Pratio[i] := PriceClose(count)/PriceClose(count - 1);
      count := count - 1;
    for i := 0 to endloop do   //Take the LN and get average
      LNratio[i] := LN(Pratio[i]);
      AvgOfLns := AvgOfLns + LN(Pratio[i]);
      AvgOfLns := AvgOfLns/xdays;
    for i := 0 to endloop do   //Square difference and get average
      Avgarray[i] := Sqr(LNratio[i] - AvgOfLns);
      SumOfAvgs := SumOfAvgs + Sqr(LNratio[i] - AvgOfLns);
                       //Result is normalized to 1 year and expressed as a percent
      Result := Sqrt(SumOfAvgs/(xdays-1)) * Sqrt(250.0) * 100.0;
    end; //End LogVol function
  5. dmo


    Wow Wayne, thanks for taking the trouble to post all that. I'm surprised it's so complicated - I would've thought some simple Excel function would do it. Apparently not.