File Name: VIDYA.efs
Description:
Indicator - VIDYA (StdDev)
Formula Parameters:
Length: 21
Price: Close
Alpha: 0.02
Notes:
This indicator plots volatility adjusted length exponential MA based
on standard deviation of prices as a measure of volatility. It is dynamic,
not static indicator: a variable-length moving average, which adapts to the
volatility in question by exponentially smoothing data based on standard deviation.
Download File:
VIDYA.efs
EFS Code:
Description:
Indicator - VIDYA (StdDev)
Formula Parameters:
Length: 21
Price: Close
Alpha: 0.02
Notes:
This indicator plots volatility adjusted length exponential MA based
on standard deviation of prices as a measure of volatility. It is dynamic,
not static indicator: a variable-length moving average, which adapts to the
volatility in question by exponentially smoothing data based on standard deviation.
Download File:
VIDYA.efs
EFS Code:
PHP Code:
/*********************************
Provided By:
eSignal (Copyright c eSignal), a division of Interactive Data
Corporation. 2008. 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:
Indicator - VIDYA (StdDev)
Version: 1.0 09/26/2008
Notes:
This indicator plots volatility adjusted length exponential MA based
on standard deviation of prices as a measure of volatility. It is dynamic,
not static indicator: a variable-length moving average, which adapts to the
volatility in question by exponentially smoothing data based on standard deviation.
Formula Parameters: Default:
Length 21
Price Close
Alpha 0.02
**********************************/
var fpArray = new Array();
var bInit = false;
function preMain()
{
setPriceStudy(true);
setStudyTitle("VIDYA (StdDev)");
setCursorLabelName("VIDYA");
var x=0;
fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
with(fpArray[x++]){
setLowerLimit(1);
setDefault(20);
}
fpArray[x] = new FunctionParameter("Price", FunctionParameter.STRING);
with(fpArray[x++]){
setName("Price Data To Use");
addOption("open");
addOption("high");
addOption("low");
addOption("close");
addOption("hl2");
addOption("hlc3");
addOption("ohlc4");
setDefault("close");
}
fpArray[x] = new FunctionParameter("Alpha", FunctionParameter.NUMBER);
with(fpArray[x++]){
setLowerLimit(0.01);
setDefault(0.2);
}
}
var xMyPrice = null;
var xStdDev = null;
var xStdDevAvg = null;
function main(Alpha, Price, Length) {
var nState = getBarState();
var nRef = ref(-1);
var nStdDevVidya = 0;
var nStdDev = 0;
var nStdDevAvg = 0;
var nPrice = 0;
var nResult = 0;
var nBarCount = getCurrentBarCount();
if (nState == BARSTATE_ALLBARS) {
if (Alpha == null) Alpha = 0.2;
if (Price == null) Price = "close";
if (Length == null) Length = 20;
}
if ( bInit == false ) {
xMyPrice = eval(Price)();
xStdDev = efsInternal("StdDev", xMyPrice, Length);
xStdDevAvg = sma(Length, xStdDev);
bInit = true;
}
if (nRef == null) nRef = 1;
nStdDev = xStdDev.getValue(0);
nStdDevAvg = xStdDevAvg.getValue(0);
nPrice = xMyPrice.getValue(0);
if(nBarCount>Length)
nStdDevVidya = (Alpha * (nStdDev / nStdDevAvg) * nPrice) +
((1 - (Alpha * (nStdDev / nStdDevAvg))) * nRef);
else if (nBarCount==Length) nStdDevVidya = nPrice;
else return;
return nStdDevVidya;
}
function StdDev(DataArray ,Period) {
var sum = 0;
var avg = 0;
var res = 0;
if (getCurrentBarCount() < Period) return DataArray.getValue(0);
for (var barsBack = Period-1; barsBack >= 0; barsBack--) {
sum += DataArray.getValue(barsBack*(-1));
}
avg = sum / Period;
sum = 0;
for (var barsBack = Period - 1; barsBack >= 0; barsBack--) {
sum += (DataArray.getValue(barsBack*(-1))-avg)*(DataArray.getValue(barsBack*(-1))-avg);
}
res = Math.sqrt(sum / Period);
return res;
}