File Name: NVI_Peterson.efs

Description:
Negative Volume Index

Formula Parameters:
EMA_Len : 255

Notes:
The theory behind the indexes is as follows: On days of increasing
volume, you can expect prices to increase, and on days of decreasing
volume, you can expect prices to decrease. This goes with the idea of
the market being in-gear and out-of-gear. Both PVI and NVI work in similar
fashions: Both are a running cumulative of values, which means you either
keep adding or subtracting price rate of change each day to the previous day`s
sum. In the case of PVI, if today`s volume is less than yesterday`s, don`t add
anything; if today`s volume is greater, then add today`s price rate of change.
For NVI, add today`s price rate of change only if today`s volume is less than
yesterday`s.


Download File:
NVI_Peterson.efs



EFS Code:
PHP Code:
/*********************************
Provided By:  
    eSignal (Copyright c eSignal), a division of Interactive Data 
    Corporation. 2009. 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:        
    Negative Volume Index
    
Version:            2.0  05/28/2009
 
Formula Parameters:                     Default:
    EMA_Len                             255
    
Notes:
    The theory behind the indexes is as follows: On days of increasing 
    volume, you can expect prices to increase, and on days of decreasing 
    volume, you can expect prices to decrease. This goes with the idea of 
    the market being in-gear and out-of-gear. Both PVI and NVI work in similar 
    fashions: Both are a running cumulative of values, which means you either 
    keep adding or subtracting price rate of change each day to the previous day`s 
    sum. In the case of PVI, if today`s volume is less than yesterday`s, don`t add 
    anything; if today`s volume is greater, then add today`s price rate of change. 
    For NVI, add today`s price rate of change only if today`s volume is less than 
    yesterday`s. 
**********************************/
var fpArray = new Array();
var 
bInit false;

function 
preMain(){
    
setStudyTitle("Negative Volume Index");
    
setCursorLabelName("NVI",0);
    
setDefaultBarFgColor(Color.red,0);
    
setCursorLabelName("EMA",1);
    
setDefaultBarFgColor(Color.blue,1);
    var 
0;
    
fpArray[x] = new FunctionParameter("EMA_Len"FunctionParameter.NUMBER);
    
with(fpArray[x++]) {
        
setLowerLimit(1);
        
setDefault(255);
    }    
}

var 
xNVI null;
var 
xNVI_EMA null;

function 
main(EMA_Len) {
var 
nBarState getBarState();
var 
nNVI 0;
var 
nEMA 0;
    if (
nBarState == BARSTATE_ALLBARS) {
        if(
EMA_Len == nullEMA_Len 255;
    }
    if (
bInit == false) {
        
xNVI efsInternal("Calc_NVI");
        
xNVI_EMA ema(EMA_LenxNVI);
        
bInit true;
    }
    
nNVI xNVI.getValue(0);
    
nEMA xNVI_EMA.getValue(0);
    if (
nEMA == null) return;
    return new Array(
nNVInEMA);
}

var 
bSecondInit false;
var 
xROC null;
var 
xVolume null;

function 
Calc_NVI() {
var 
nRes 0;
var 
nRef ref(-1);
    if (
bSecondInit == false) {
        
xROC roc(1);
        
xVolume volume();
        
bSecondInit true;
    }
    if (
xROC.getValue(-1) == null) return;
    if(
xVolume.getValue(0) < xVolume.getValue(-1)) {
        
nRes nRef xROC.getValue(0);    
    } else {
        
nRes nRef;
    }    
    return 
nRes;