Announcement

Collapse
No announcement yet.

Relative Volatility Index (RVI)

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Relative Volatility Index (RVI)

    File Name: RVI.efs

    Description:
    Relative Volatility Index (RVI)

    Formula Parameters:
    Period : 10
    UpperBand : 80
    LowerBand : 20


    Notes:
    The RVI is a modified form of the relative strength index (RSI).
    The original RSI calculation separates one-day net changes into
    positive closes and negative closes, then smoothes the data and
    normalizes the ratio on a scale of zero to 100 as the basis for the
    formula. The RVI uses the same basic formula but substitutes the
    10-day standard deviation of the closing prices for either the up
    close or the down close. The goal is to create an indicator that
    measures the general direction of volatility. The volatility is
    being measured by the 10-days standard deviation of the closing prices.


    Download File:
    RVI.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:        
        Relative Volatility Index 
        
    Version:            1.0  05/21/2009
         
    Formula Parameters:                     Default:
        Period                              10
        UpperBand                           80
        LowerBand                           20
        
    Notes:
        The RVI is a modified form of the relative strength index (RSI). 
        The original RSI calculation separates one-day net changes into 
        positive closes and negative closes, then smoothes the data and 
        normalizes the ratio on a scale of zero to 100 as the basis for the 
        formula. The RVI uses the same basic formula but substitutes the 
        10-day standard deviation of the closing prices for either the up 
        close or the down close. The goal is to create an indicator that 
        measures the general direction of volatility. The volatility is 
        being measured by the 10-days standard deviation of the closing prices. 
    **********************************/
    var fpArray = new Array();
    var 
    bInit false;

    function 
    preMain() {
        
    setStudyTitle("Relative Volitility Index");
        
    setCursorLabelName("RVI",0);
        
    setDefaultBarFgColor(Color.red,0);
        
    setStudyMin(-1);
        
    setStudyMax(101);
        var 
    0;
        
    fpArray[x] = new FunctionParameter("Period"FunctionParameter.NUMBER);
        
    with(fpArray[x++]) {
            
    setLowerLimit(1);
            
    setDefault(10);
        }    
        
    fpArray[x] = new FunctionParameter("UpperBand"FunctionParameter.NUMBER);
        
    with(fpArray[x++]) {
            
    setName("Upper Band");
            
    setLowerLimit(1);
            
    setDefault(80);
        }    
        
    fpArray[x] = new FunctionParameter("LowerBand"FunctionParameter.NUMBER);
        
    with(fpArray[x++]) {
            
    setName("Lower Band");
            
    setLowerLimit(1);
            
    setDefault(20);
        }    
    }

    var 
    xRVI null;

    function 
    main(PeriodUpperBandLowerBand) {
    var 
    nBarState getBarState();
    var 
    nRVI 0;
        if (
    nBarState == BARSTATE_ALLBARS) {
            if(
    Period == nullPeriod 10;
        }    
        if (
    bInit == false) {
            
    addBand(LowerBandPS_SOLID1Color.red"Lower Band");
            
    addBand(UpperBandPS_SOLID1Color.green"Upper Band");
            
    xRVI efsInternal("Calc_RVI"Period);
            
    bInit true;
        }
        
    nRVI xRVI.getValue(0);
        if (
    nRVI == null) return;
        return 
    nRVI;
    }

    var 
    bSecondInit false;
    var 
    xStdDev null;
    var 
    xClose null;
    var 
    nU1 0;
    var 
    nD1 0;
    var 
    nU 0;
    var 
    nD 0;

    function 
    Calc_RVI(nPeriod) {
    var 
    nRes 0;
    var 
    0;
    var 
    0;
        if (
    bSecondInit == false) {
            
    xClose close();
            
    xStdDev efsInternal("Calc_StdDev"nPeriodsma(nPeriod), xClose);
            
    bSecondInit true;
        }
        if (
    xStdDev.getValue(0) == null) return;
        if (
    getBarState() == BARSTATE_NEWBAR){
            
    nU1 nU;
            
    nD1 nD;
        }
        if(
    xClose.getValue(0) > xClose.getValue(-1)) {
            
    xStdDev.getValue(0);
            
    0;
        } else {
            
    xStdDev.getValue(0);
            
    0;
        }
        
    nU = (13 nU1 u) / 14;
        
    nD = (13 nD1 d) / 14;
        
    nRes 100 nU / (nU nD);
        return 
    nRes;
    }

    function 
    Calc_StdDev(nPeriodxMAxClose) {
    var 
    StdDev 0;
    var 
    SumSqr 0;
    var 
    counter 0;
        if(
    xMA.getValue(0) == null) return;
        for(
    counter 0counter nPeriodcounter++)
            
    SumSqr += Math.pow((xClose.getValue(-counter) - xMA.getValue(0)), 2);
        
    StdDev Math.sqrt(SumSqr nPeriod);
        return 
    StdDev;

Working...
X