Pro Rata Volume

ICE Data Services -

PRV.efs  
EFSLibrary - Discussion Board  

File Name: PRV.efs

Description:
Pro Rata Volume

Formula Parameters:

  • Line Thickness: 2
  • Color PRV: Red
  • Color Volume: Green
  • Display Cursor Labels: True

Notes:
The balance of power indicator measures the strength of the bulls vs. bears by assessing the ability of each to push price to an extreme level.

Download File:
PRV.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:        
    Pro Rata Volume

Version:            1.0  10/06/2008

Notes:
    The balance of power indicator measures the strength of the bulls 
    vs. bears by assessing the ability of each to push price to an
    extreme level.
    
Formula Parameters:                     Default:
    Line Thickness                          2
    Color PRV                             Red
    Color Volume                          Green
    Display Cursor Labels                 True
**********************************/

var fpArray = new Array();
var bInit = false;

function preMain() {

    setPriceStudy(false);
    setShowCursorLabel(false);
    setShowTitleParameters( false );
    
    setStudyTitle("Pro Rata Volume");
    setCursorLabelName("Volume", 0);    

    setDefaultBarFgColor(Color.red, 0);
    setPlotType(PLOTTYPE_HISTOGRAM, 0); 
    setDefaultBarThickness(2, 0);

   
    askForInput();
    var x=0;
    fpArray[x] = new FunctionParameter("LineColor1", FunctionParameter.COLOR);
    with(fpArray[x++]){
        setName("Color PRV");
        setDefault(Color.red);
    }    

    fpArray[x] = new FunctionParameter("LineColor2", FunctionParameter.COLOR);
    with(fpArray[x++]){
        setName("Color Volume");
        setDefault(Color.green);
    }    


    fpArray[x] = new FunctionParameter("ViewValue", FunctionParameter.BOOLEAN);
    with(fpArray[x++]){
        setName("Display Cursor Labels");
        setDefault(true);
    }    
    

    fpArray[x] = new FunctionParameter("Thickness", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setName("Line Thickness");
        setLowerLimit(1);		
        setDefault(2);
    }
}

var nHour = 0;
var nMinute = 0;
var nSecond = 0;



function main(Thickness, LineColor1, LineColor2, ViewValue) {
var nState = getBarState();
var nEndTime = 0;
var nVolume = 0;
var vInt = (getInterval() * 60);
var PercentComplete = 0;

    if ( bInit == false ) { 
        setDefaultBarFgColor(LineColor1, 0);
        setDefaultBarThickness(Thickness, 0);
        setShowCursorLabel(ViewValue);        
        bInit = true; 
    } 


    if (!isIntraday()) {
        setStudyTitle("Sorry. This script run only intraday charts.");
        return;
    } else {
        if (getCurrentBarCount() == getNumBars()) {
            setStudyTitle("Pro Rata Volume");

            Timer();
            nEndTime = (nHour * 3600) + (nMinute * 60) + nSecond;  
            PercentComplete =  (1 - ((nEndTime * 100 / vInt) * 0.01));
            
            if (PercentComplete < 0.02)
                nVolume = volume(0)
            else
                nVolume = Math.floor(volume(0) / PercentComplete);  
      
            if (nVolume < volume(0)) nVolume = volume(0);
        } else {
            nVolume = volume(0);
        }
    }

    drawLineRelative( 0, 0, 0, nVolume, PS_SOLID, Thickness, LineColor2, 105 ); 
    drawLineRelative( 0, 0, 0, volume(0), PS_SOLID, Thickness, LineColor1, 106 ); 
	


    return volume(0); 
}

var vTimeStamp = null;
var vInt = null;

function Timer() {
    if (!isIntraday() || getCurrentBarIndex() < -1) return;
    var nState = getBarState();
    var vClockTime = new Date()*1;
    
    if (vInt == null) vInt = (getInterval()*60000);  // convert to milliseconds
    if (nState == BARSTATE_NEWBAR) {
        vTimeStamp = getValue("Time")*1 + vInt;
    }

    var vTimeLeft = (vTimeStamp - vClockTime);
    if (vTimeLeft < 0) return;

    var vHr = 0;
    var vMin = 0;
    var vSec = 0;
    
    if (vInt > 3600000) {
        vHr = Math.floor(vTimeLeft/3600000);
        vTimeLeft -= (vHr*3600000);
    }
    if (vInt > 60000) {
        vMin = Math.floor(vTimeLeft/60000);
        vTimeLeft -= (vMin*60000);
    }
    vSec = Math.floor(vTimeLeft/1000);
    
    vTimeLeft = (" " + vHr + ":" + vMin + ":" + vSec + " ");

    nHour = vHr;
    nMinute = vMin;
    nSecond = vSec;

    return;
}