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:
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:
PHP 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 Volatility
Version: 1.0 7/2/2007
Notes:
* 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 year
var xHV = null; // Historical Volatility Series object
function 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);
}