HistoricalVolatility.efs

ICE Data Services -


HistoricalVolatility.efs  EFSLibrary - Discussion Board
  

File Name: HistoricalVolatility.efs


Description:
Calculates the historical volatility for the Daily, Weekly or Monthly intervals.


Formula Parameters:
Number of Periods: 20

Notes:
Study requires a Daily, Weekly or Monthly interval.

Download File:
HistoricalVolatility.efs




EFS Code:

/*********************************Provided By:      eSignal (Copyright ) eSignal), a division of Interactive Data     Corporation. 2007. All rights reserved. This sample eSignal     Formula Script (EFS) is for educational purposes only and may be     modified and saved under a new file name.  eSignal is not responsible    for the functionality once modified.  eSignal reserves the right     to modify and overwrite this EFS file with each new release.    Description:  Historical VolatilityVersion:  1.0   7/2/2007Notes:    * Study requires a Daily, Weekly or Monthly interval.Parameters:                             Default:Number of Periods                       20**********************************/function preMain() {    setStudyTitle("Historical Volatility");    setCursorLabelName("HV ", 0);        var fp1 = new FunctionParameter("nPeriods", FunctionParameter.NUMBER);        fp1.setName("Number of Periods");        fp1.setLowerLimit(1);        fp1.setDefault(20);}var bInit = false;var nTP = null;     // Trading Periods per yearvar xHV = null;     // Historical Volatility Series objectfunction main(nPeriods) {    // interval check    if (isDWM() == false) {        drawTextRelative(20, 20, "This study requires a D, W or M interval.",             Color.red, Color.black, Text.RELATIVETOLEFT|Text.RELATIVETOBOTTOM|Text.BOLD,            null, 14, "inv_error");        return;    }        if (bInit == false) {        var nInv = getInterval();        if (nInv == "D") nTP = 262;        if (nInv == "W") nTP = 52;        if (nInv == "M") nTP = 12;        xHV = efsInternal("calcHV", nPeriods, nTP);        bInit = true;    }        var nHV = xHV.getValue(0);    if (nHV == null) return;        return nHV;}function calcHV(_nPeriods, _nTP) {    if (close(-(_nPeriods+1)) == null) return;        var HV = null;    var nSSD = 0;    var nSum = 0;    var nAvg = 0;        for (var i = 0; i < _nPeriods; i++) {        nSum += Math.log(close(-i) / close(-(i+1)));    }    nAvg = nSum / _nPeriods;        for (var j = 0; j < _nPeriods; j++) {        nSSD += Math.pow( (Math.log(close(-j) / close(-(j+1))) - nAvg) , 2);    }        HV = Math.sqrt( (nSSD / (_nPeriods-1) ) ) * Math.sqrt(_nTP);        return (HV*100);}