Announcement

Collapse
No announcement yet.

2007 Nov: Short-Term Volume and Price Oscillator, by Sylvain Vervoort

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

  • 2007 Nov: Short-Term Volume and Price Oscillator, by Sylvain Vervoort

    File Name: SVAPO.efs

    Description:
    This study is based on the November 2007 article, Short-Term Volume and Price Oscillator, by Sylvain Vervoort.

    Formula Parameters:
    SVAPO Period: 8
    Minimum %o price change: 1
    Standard Deviation High: 1.5
    Standard Deviation Low: 1.3
    Standard Deviation Period: 100
    Color: green
    Thickness: 2

    Notes:
    The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.


    Download File:
    SVAPO.efs



    EFS Code:
    PHP Code:
    /***************************************
    Provided By : 
        eSignal (Copyright © eSignal), a division of Interactive Data 
        Corporation. 2007. 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:  Short-Term Volume And Price Oscillator
                  by Sylvain Vervoort

    Version 1.0  9/6/2007

    Notes:
    * Study requires version 8.0 or later.


    Formula Parameters:                     Default:
    SVAPO Period                            8
    Minimum %o price change                 1
    Standard Deviation High                 1.5
    Standard Deviation Low                  1.3
    Standard Deviation Period               100
    Color                                   green
    Thickness                               2
    ***************************************/

    function preMain() {
        
    setStudyTitle("Short-Term Vol And Price Osc ");
        
    setShowTitleParameters(false);
        
    setCursorLabelName("DevH"0);
        
    setCursorLabelName("SVAPO"1);
        
    setCursorLabelName("DevL"2);
        
    setDefaultBarStyle(PS_DASHDOT0);
        
    setDefaultBarStyle(PS_DASHDOT2);
      
        var 
    fp1 = new FunctionParameter("nPeriod"FunctionParameter.NUMBER);
            
    fp1.setName("SVAPO Period");
            
    fp1.setLowerLimit(3);
            
    fp1.setUpperLimit(20);
            
    fp1.setDefault(8);
        var 
    fp2 = new FunctionParameter("nCutoff"FunctionParameter.NUMBER);
            
    fp2.setName("Minimum %o price change");
            
    fp2.setLowerLimit(1);
            
    fp2.setUpperLimit(10);
            
    fp2.setDefault(1);
        var 
    fp3 = new FunctionParameter("nDevH"FunctionParameter.NUMBER);
            
    fp3.setName("Standard Deviation High");
            
    fp3.setLowerLimit(0.1);
            
    fp3.setUpperLimit(5);
            
    fp3.setDefault(1.5);
        var 
    fp4 = new FunctionParameter("nDevL"FunctionParameter.NUMBER);
            
    fp4.setName("Standard Deviation Low");
            
    fp4.setLowerLimit(0.1);
            
    fp4.setUpperLimit(5);
            
    fp4.setDefault(1.3);
        var 
    fp5 = new FunctionParameter("nStdevPeriod"FunctionParameter.NUMBER);
            
    fp5.setName("Standard Deviation Period");
            
    fp5.setLowerLimit(1);
            
    fp5.setUpperLimit(200);
            
    fp5.setDefault(100);
        var 
    fp30 = new FunctionParameter("cColor"FunctionParameter.COLOR);
            
    fp30.setName("Color");
            
    fp30.setDefault(Color.green);
        var 
    fp40 = new FunctionParameter("nThick"FunctionParameter.NUMBER);
            
    fp40.setName("Thickness");
            
    fp40.setLowerLimit(1);
            
    fp40.setDefault(2);
    }

    // Global Variables
    var bVersion  null;    // Version flag
    var bInit     false;   // Initialization flag

    // globals variables
    var xHaOpen     null;
    var 
    xHaClose    null;
    var 
    xHaTema     null;
    var 
    xVolLRSlope null;
    var 
    xVtr        null;
    var 
    xSvapoSum   null;
    var 
    xSvapo      null;
    var 
    xStdev      null;


    function 
    main(nPeriodnCutoffnDevHnDevLnStdevPeriodcColornThick) {
        if (
    bVersion == nullbVersion verify();
        if (
    bVersion == false) return;    

        
    //Initialization
        
    if (bInit == false) {
            
    setDefaultBarFgColor(cColor0);
            
    setDefaultBarThickness(nThick1);
            
    addBand(0PS_DASHDOT1cColor"zero");
            
    xHaOpen     efsInternal("calcHaOpen");
            
    xHaClose    efsInternal("calcHaClose"xHaOpen);
            
    xHaTema     efsInternal("calcTEMA", (nPeriod/1.6), xHaClose);
            
    xVolLRSlope efsInternal("calcLinRegSlope"nPeriodvolume());
            
    xVtr        efsInternal("calcTEMA"nPeriodxVolLRSlope);
            
    xVolAvg     sma((nPeriod*5), volume());
            
    xVc         efsInternal("calcVc"xVolAvg);
            
    xSvapoSum   efsInternal("calcSvapoSum"nPeriodnCutoff
                            
    xHaTemaxVtrxVolAvgxVc );
            
    xSvapo      efsInternal("calcTEMA"nPeriodxSvapoSum);
            
    xStdev      efsInternal("calcStDev"nStdevPeriodxSvapo);
            
            
    bInit true;
        }

        var 
    nSvapo xSvapo.getValue(0);
        var 
    nStdev xStdev.getValue(0);
        if (
    nSvapo == null || nStdev == null) return;
        
        var 
    nStDevH nDevH nStdev;
        var 
    nStDevL = -nDevL nStdev;
        
        return new Array( 
    nStDevHnSvaponStDevL );
    }


    // HaOpen globals
    var nHaOpen   null;
    var 
    nHaOpen_1 null;

    function 
    calcHaOpen() {
        if (
    nHaOpen_1 == null && open(-1) != null) {
            
    nHaOpen_1 open(-1);
        } else if (
    nHaOpen != null) {
            
    nHaOpen_1 nHaOpen;
        }
        if (
    nHaOpen_1 == null) return;
        
        var 
    nC_1 sma(1ohlc4(), -1);
        if (
    nC_1 == null) return;
        
        
    nHaOpen = (nC_1 nHaOpen_1) / 2;
        
        return 
    nHaOpen;
    }


    function 
    calcHaClose(xHaO) {
        var 
    n4 sma(1ohlc4(), 0);
        var 
    nHaO xHaO.getValue(0);
        if (
    n4 == null || nHaO == null) return;

        var 
    nHaCl = (n4 nHaO +
            
    Math.max(n4high(0), nHaO) +
            
    Math.min(n4low(0), nHaO )  ) / 4;
        
        return 
    nHaCl;
    }


    // TEMA globals
    var xAvg1 null;
    var 
    xAvg2 null;
    var 
    xAvg3 null;
    var 
    bInit2 false;

    function 
    calcTEMA(nLength,xSource){

        if(
    bInit2 == false){
            
    xAvg1 ema(nLength,xSource);
            
    xAvg2 ema(nLength,xAvg1);
            
    xAvg3 ema(nLength,xAvg2);
            
    bInit2 true;
        }
        
        var 
    nAvg1 xAvg1.getValue(0);
        var 
    nAvg2 xAvg2.getValue(0);
        var 
    nAvg3 xAvg3.getValue(0);
        if (
    nAvg1 == null || nAvg2 == null || nAvg3 == null) return;

        var 
    nTEMA = (3*nAvg1)-(3*nAvg2)+nAvg3;
        
        return 
    nTEMA;
    }


    function 
    calcLinRegSlopenLRlenxSource) {
        
    // y = Ax + B;
        // A = SUM( (x-xAVG)*(y-yAVG) ) / SUM( (x-xAVG)^2 )
        // A = slope
        // B = yAVG - (A*xAVG);  // y-intercept

        
    if (xSource.getValue(-nLRlen) == null || 
            
    xSource.getValue(0) == 0) return;

        var 
    xSum 0;
        var 
    ySum 0;
        var 
    0;
        for (
    0nLRleni++) {
            
    xSum += i;
            
    ySum += xSource.getValue(-i);
        }
        var 
    xAvg xSum/nLRlen;
        var 
    yAvg ySum/nLRlen;
        var 
    aSum1 0;
        var 
    aSum2 0;
        
    0;
        for (
    0nLRleni++) {
            
    aSum1 += (i-xAvg) * (xSource.getValue(-i)-yAvg); 
            
    aSum2 += (i-xAvg)*(i-xAvg);
        }
        var 
    = -(aSum1 aSum2);  // slope
        //var B = yAvg - (A*xAvg);  // y-intercept
        
        
    return A;
    }


    function 
    calcVcxAvg ) {
        var 
    nVolAvg xAvg.getValue(-1);
        if (
    nVolAvg == null) return;
        
        var 
    nVmax nVolAvg 2;
        var 
    nVc   volume(0);
        if (
    nVc >= nVmaxnVc nVmax;
        
        return 
    nVc;
    }



    function 
    calcSvapoSum(nPeriodnCutoffxHaCxvtrxVAvgxvc ) {

        
    nCutoff /= 100;
        var 
    nSvapoSum null;
        var 
    nSum    0;
        var 
    i       0;
        var 
    nVave   xVAvg.getValue(0);    
        if (
    nVave == null || xvtr.getValue( -(nPeriod+2) ) == null) return;
        
        for (
    0nPeriodi++) {
            var 
    b1 false;
            var 
    b2 false;
            var 
    nHaC    xHaC.getValue(-i);
            var 
    nHaC_1  xHaC.getValue(-(i+1));
            var 
    nVc     xvc.getValue(-i);
            var 
    nVtr    xvtr.getValue(-i);
            var 
    nVtr_1  xvtr.getValue(-(i+1));
            var 
    nVtr_2  xvtr.getValue(-(i+2));
            
            
    b1 = (nHaC > (nHaC_1*(1+nCutoff/1000)));
            
    b2 = (nVtr >= nVtr_1) || (nVtr_1 >= nVtr_2);
            if (
    b1 == true && b2 == true ) {
                
    nSum += nVc;
            } else {
                
    b1 = (nHaC < (nHaC_1*(1-nCutoff/1000)));
                
    b2 = (nVtr nVtr_1) || (nVtr_1 nVtr_2);
                if (
    b1 == true && b2 == true ) {
                    
    nSum -= nVc;
                }
            }
        }
        
        
    nSvapoSum nSum / (nVave+1);
        
        return 
    nSvapoSum;
    }


    function 
    calcStDev(nLengthxSource) {    
        var 
    sumX 0;
        var 
    sumX2 0;
        
        if (
    xSource.getValue(-nLength) == null) return;
        
        for (
    0nLengthi++) {
            var 
    nVal xSource.getValue(-i);
            
    sumX += nVal;
            
    sumX2 += (nVal nVal);
        }
        var 
    meanX = (sumX/nLength);
        var 
    stdev Math.sqrt((sumX2/nLength) - (meanX*meanX));

        return 
    stdev;
    }


    function 
    verify() {
        var 
    false;
        if (
    getBuildNumber() < 779) {
            
    drawTextAbsolute(535"This study requires version 8.0 or later."
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"error");
            
    drawTextAbsolute(520"Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp"
                
    Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
                
    null13"upgrade");
            return 
    b;
        } else {
            
    true;
        }
        
        return 
    b;

    Jason K.
    Project Manager
    eSignal - an Interactive Data company

    EFS KnowledgeBase
    JavaScript for EFS Video Series
    EFS Beginner Tutorial Series
    EFS Glossary
    Custom EFS Development Policy

    New User Orientation
Working...
X