ConnorHistVolatility.efs

ICE Data Services -

ConnorHistVolatility.efs  

File Name: ConnorHistVolatility.efs

Description:
Larry Connor's Historical Volatility

Formula Parameters:

  • nLength1: Default is 6
  • nLength2: Default is 100

Notes:
NA

Download File:
ConnorHistVolatility.efs



EFS Code:

/****************************************************************************************************
Copyright © eSignal, a division of Interactive Data Corporation. 2003. All rights reserved. 
This sample eSignal Formula Script (EFS) may be modified and saved under a new 
filename; however, eSignal is no longer responsible for the functionality once modified.
eSignal reserves the right to modify and overwrite this EFS file with each new release.
*****************************************************************************************************/


function preMain() {
    setStudyTitle("Historical Volatility");
    setCursorLabelName("HV ", 0);
    setCursorLabelName(" ", 1);
    setDefaultBarFgColor(Color.blue, 0);
    setDefaultBarFgColor(Color.black, 1);
}

function STDV(length) {
    var sumX = 0;
    var sumX2 = 0;
    for (i = 0; i < length; ++i) {
        sumX += aLog[i];
        sumX2 += (aLog[i] * aLog[i])
    }
    var meanX = (sumX/length);
    var stdev = Math.sqrt((sumX2/length) - (meanX*meanX));

    return stdev;
}

var aLog = null;

function main(nLength1, nLength2) {
    if (nLength1 == null || nLength1 < 3)
        nLength1 = 6;
    if (nLength2 == null)
        nLength2 = 100;

    var c = close();
    if (c == null)
        return;
    
    if (aLog == null && close(-nLength2-1) != null) {
        aLog = new Array(nLength2);
        for (i = 0; i < nLength2; ++i) {
            aLog[i] = Math.log(close(-i)/close(-i-1));
        }
    }

    if (aLog[nLength2-1] == null)
        return;

    if (getBarState() == BARSTATE_NEWBAR) {
        aLog.pop()
        aLog.unshift(Math.log(c/close(-1)));
    } else {
        aLog[0] = Math.log(c/close(-1));
    }
    
    var stdv1 = STDV(nLength1);
    var stdv2 = STDV(nLength2);
    
    var HV = (stdv1 * Math.sqrt(256) * 100) / (stdv2 * Math.sqrt(256) * 100);
    
    if (HV < .5) {
        //setPriceBarColor(Color.cyan);
        setBarBgColor(Color.red);
    } else {
        setBarBgColor(Color.white);
    }
    
    return new Array(HV, .5);
}