VIDYA (StdDev)

ICE Data Services -

VIDYA.efs                                                                                                                                     EFSLibrary - Discussion Board

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:

/*********************************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/2008Notes: 
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;
}