Announcement

Collapse
No announcement yet.

BidAskRatio.efs

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

  • BidAskRatio.efs

    File Name: BidAskRatio.efs

    Description:
    Analyzes Bid/Ask tick or volume data by calculating various ratios selected by the user through the Edit Studies options.

    Formula Parameters:
    Analysis: Cumulative [Bar, Cumulative]
    Study Output: Ask/Bid [Ask/Bid, Ask/Total, Bid/Total, Ask-Bid]
    Source: Volume [Tick, Volume]
    Trade Volume Filter: 0 (Exlcudes trades below specified filter)
    Positive Color: blue
    Negative Color: red
    Thickness: 2
    Plot Type: Line [Line, Histogram]

    Notes:
    This study may only collect and display data in real time only. It will collect and display data after the study has completely loaded. A reload of the study will start the analysis over because Bid/Ask data in not exposed to EFS for historical bars.


    Download File:
    BidAskRatio.efs



    EFS Code:
    PHP Code:
    /*********************************
    Provided By : eSignal (c) Copyright 2004
    Description: Bid/Ask Ratio

    Version 2.0

    Notes
    *** 2.0 - 11/26/2004 ***
        - Added Trade Volume Filter.  Trade Volume less than the Filter
          number will be excluded when Srouce is set to Volume.
        - 5/27/05 - Fix for Trade Volume Filter.  Wasn't properly 
          reseting the total at new bar.

    Formula Parameters:                 Defaults:
    Analysis                            Cumulative
        [Bar, Cumulative]
    Study Output                        Ask/Bid
        [Ask/Bid, Ask/Total, Bid/Total, Ask-Bid]
    Source                              Volume
        [Tick, Volume]
    Trade Volume Filter                 0
    Positive Color                      blue
    Negative Color                      red
    Thickness                           2
    Plot Type                           Line
        [Line, Histogram]
    *********************************/

    function preMain() {
        
    setStudyTitle("Bid\/Ask Ratio ");
        
    setCursorLabelName("Ask/Bid"0);
        
    setDefaultBarThickness(20);
        
    setShowTitleParameters(false);
        
        
    addBand(1PS_SOLID1Color.black"even");
        
        var 
    fp0 = new FunctionParameter("sType"FunctionParameter.STRING);
            
    fp0.setName("Analysis");
            
    fp0.addOption("Bar");
            
    fp0.addOption("Cumulative");
            
    fp0.setDefault("Cumulative");
        var 
    fp1 = new FunctionParameter("sOutput"FunctionParameter.STRING);
            
    fp1.setName("Study Output");
            
    fp1.addOption("Ask/Bid");
            
    fp1.addOption("Ask/Total");
            
    fp1.addOption("Bid/Total");
            
    fp1.addOption("Ask-Bid");
            
    fp1.setDefault("Ask/Bid");
        var 
    fp2 = new FunctionParameter("sSource"FunctionParameter.STRING);
            
    fp2.setName("Source");
            
    fp2.addOption("Tick");
            
    fp2.addOption("Volume");
            
    fp2.setDefault("Volume");
        var 
    fp2a = new FunctionParameter("nFilter"FunctionParameter.NUMBER);
            
    fp2a.setName("Trade Volume Filter");
            
    fp2a.setLowerLimit(0);
            
    fp2a.setDefault(0);
        var 
    fp3 = new FunctionParameter("cPos"FunctionParameter.COLOR);
            
    fp3.setName("Positive Color");
            
    fp3.setDefault(Color.blue);
        var 
    fp4 = new FunctionParameter("cNeg"FunctionParameter.COLOR);
            
    fp4.setName("Negative Color");
            
    fp4.setDefault(Color.red);
        var 
    fp5 = new FunctionParameter("nThickness"FunctionParameter.NUMBER);
            
    fp5.setName("Thickness");
            
    fp5.setDefault(2);
        var 
    fp6 = new FunctionParameter("sPlotType"FunctionParameter.STRING);
            
    fp6.setName("Plot Type");
            
    fp6.addOption("Line");
            
    fp6.addOption("Histogram");
            
    fp6.setDefault("Line");
    }

    var 
    nAsk null;
    var 
    nBid null;
    var 
    nRet 1;
    var 
    aReturn = new Array(1); // return array;

    // Volume
    var nBidVol 0;
    //var nInsideVol = 0;
    var nAskVol 0;
    var 
    nTotalVol 0;
    var 
    vVol null;
    var 
    bPrimed false;

    // Tick
    var nBidTick 0;
    //var nInsideTick = 0;
    var nAskTick 0;
    var 
    nTotalTick 0;

    var 
    bEdit true;

    function 
    main(sTypesOutputsSourcenFiltercPoscNegnThicknesssPlotType) {
        if (
    bEdit == true) {
            
    setStudyTitle("BidAskRatio:   " sOutput ": " sSource " (" sType ")");
            
    setDefaultBarThickness(nThickness0);
            
    setCursorLabelName(sOutput0);
            if (
    sPlotType == "Histogram"setPlotType(PLOTTYPE_HISTOGRAM0);
            if (
    sOutput == "Ask-Bid") {
                
    addBand(0PS_SOLID1Color.black"even");
                
    nRet 0;
            }
            
    bEdit false;
        }

        if (
    getCurrentBarIndex() < 0) return nRet;
        
        var 
    nState getBarState();

        if (
    sSource == "Volume") {
            if (
    nState == BARSTATE_NEWBAR) {
                
    vVol 0;
                if (
    sType == "Bar" || getDay(0) != getDay(-1)) {
                    
    nBidVol 0;
                    
    //nInsideVol = 0;
                    
    nAskVol 0;
                    
    vVol 0;
                    
    nTotalVol 0;
                    
    aReturn[0] = 0;
                }
            }
            
            var 
    vPrevVol 0;
            if (
    vVol != && bPrimed == truevPrevVol vVol;
            
            var 
    nTempAsk getMostRecentAsk();
            var 
    nTempBid getMostRecentBid();
            if (
    nTempAsk != null && nTempAsk != 0nAsk nTempAsk;
            if (
    nTempBid != null && nTempBid != 0nBid nTempBid;
            var 
    vClose close();
            
    vVol volume();
            
            var 
    vTradeVol vVol vPrevVol;
            if (
    vTradeVol nFilter) return aReturn;
            
            if (
    bPrimed == false && vVol != null) {
                
    bPrimed true;
                return;
            } else {
                
    nTotalVol += vTradeVol;
                if (
    vClose <= nBid) {
                    
    nBidVol += vTradeVol;
                } else if (
    vClose >= nAsk) {
                    
    nAskVol += vTradeVol;
                } 
    /*else {
                    nInsideVol += vTradeVol;
                }*/
            
    }
        } else if (
    sSource == "Tick") {
            if (
    nState == BARSTATE_NEWBAR) {
                if (
    sType == "Bar" || getDay(0) != getDay(-1)) {
                    
    nBidTick 0;
                    
    //nInsideTick = 0;
                    
    nAskTick 0;
                    
    nTotalTick 0;                
                    
    aReturn[0] = 0;
                }
            }
            
            var 
    nTempAsk getMostRecentAsk();
            var 
    nTempBid getMostRecentBid();
            if (
    nTempAsk != null && nTempAsk != 0nAsk nTempAsk;
            if (
    nTempBid != null && nTempBid != 0nBid nTempBid;
            var 
    vClose close();
            
            
    nTotalTick++;
            if (
    vClose <= nBid) {
                
    nBidTick++;
            } else if (
    vClose >= nAsk) {
                
    nAskTick++;
            } 
    /*else {
                nInsideTick++;
            }*/        
        
    }
        
        
        
    // Return Data
        
    var nReturn 1;
        switch (
    sSource) {
            case 
    "Volume" :
                switch (
    sOutput) {
                    case 
    "Ask/Bid" :
                        if (
    nBidVol == 0nReturn 1;
                        else 
    nReturn = (nAskVol/nBidVol);
                        break;
                    case 
    "Ask/Total" :
                        if (
    nTotalVol == 0nReturn 1;
                        else 
    nReturn = (nAskVol/nTotalVol);
                        break;
                    case 
    "Bid/Total" :
                        if (
    nTotalVol == 0nReturn 1;
                        else 
    nReturn = (nBidVol/nTotalVol);
                        break;
                    case 
    "Ask-Bid" :
                        
    nReturn = (nAskVol-nBidVol);
                        break;
                    default : 
    nReturn 1;
                }
                break;
            case 
    "Tick" :
                switch (
    sOutput) {
                    case 
    "Ask/Bid" :
                        if (
    nBidTick == 0nReturn 1;
                        else 
    nReturn = (nAskTick/nBidTick);
                        break;
                    case 
    "Ask/Total" :
                        if (
    nTotalTick == 0nReturn 1;
                        else 
    nReturn = (nAskTick/nTotalTick);
                        break;
                    case 
    "Bid/Total" :
                        if (
    nTotalTick == 0nReturn 1;
                        else 
    nReturn = (nBidTick/nTotalTick);
                        break;
                    case 
    "Ask-Bid" :
                        
    nReturn = (nAskTick-nBidTick);
                        break;
                    default : 
    nReturn 1;
                }
                break;
            default: 
    nReturn 1;
        }
        
        if (
    nReturn >= 1setBarFgColor(cPos0);
        else 
    setBarFgColor(cNeg0);

        
    aReturn[0] = nReturn;
        return 
    nReturn;

    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