BidAskAnalysis.efs

ICE Data Services -


BidAskAnalysis.efs  EFSLibrary - Discussion Board
  

File Name: BidAskAnalysis.efs


Description:
This study is set up to analyze Bid Ask data in a variety of ways, which can be configured by the user through the Edit Studies option. The study can be used to analyze tick or volume data for each bar or on a cumulative basis. The displayed results can also be viewed as the raw outputs or on a relative percentage basis to the total.


Formula Parameters:
Analysis: Bar [Bar, Cumulative]
Study Output: Raw Data [Relative Percent, Raw Data]
Source: Volume [Tick, Volume]
Trade Volume Filter: 0
Ask Color: green
Inside Color: black
Bid Color: red
Total Color: lime
Ask Thickness: 8
Inside Thickness: 6
Bid Thickness: 4
Display Ask: Yes [Yes, No]
Display Inside: Yes [Yes, No]
Display Bid: Yes [Yes, No]
Display Total: Yes [Yes, No]

Notes:
This study only processes real time data. Historical Bid/Ask information is not currently exposed for historical processing in EFS. The study will collect and display its results going forward in time from bar zero after it has been applied to the Advanced chart.
Some other possible combinations include:
Raw Data: Volume (Cumulative)
Raw Data: Tick (Bar)
Raw Data: Tick (Cumulative)
Relative Percent: Volume (Bar)
Relative Percent: Volume (Cumulative)
Relative Percent: Tick (Bar)
Relative Percent: Tick (Cumulative)

Version 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.

Download File:
BidAskAnalysis.efs




EFS Code:






/*****************************************************************Provided By : eSignal (c) Copyright 2004Description: Bid/Ask AnalysisVersion 2.0Notes:*** 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                            Bar    [Bar, Cumulative]Study Output                        Raw Data    [Relative Percent, Raw Data]Source                              Volume    [Tick, Volume]Trade Volume Filter                 0Ask Color                           greenInside Color                        blackBid Color                           redTotal Color                         limeAsk Thickness                       8Inside Thickness                    6Bid Thickness                       4Display Ask                         Yes    [Yes, No]Display Inside                      Yes    [Yes, No]Display Bid                         Yes    [Yes, No]Display Total                       Yes    [Yes, No]*****************************************************************/function preMain() {    setStudyTitle("Bid\/Ask Analysis ");    setCursorLabelName("Total", 0);    setCursorLabelName("Ask %", 1);    setCursorLabelName("Inside %", 2);    setCursorLabelName("Bid %", 3);    setDefaultBarFgColor(Color.lime, 0);    setDefaultBarFgColor(Color.green, 1);    setDefaultBarFgColor(Color.black, 2);    setDefaultBarFgColor(Color.red, 3);    setDefaultBarThickness(8, 0);    setDefaultBarThickness(8, 1);    setDefaultBarThickness(6, 2);    setDefaultBarThickness(4, 3);    setPlotType(PLOTTYPE_HISTOGRAM, 0);    setPlotType(PLOTTYPE_HISTOGRAM, 1);    setPlotType(PLOTTYPE_HISTOGRAM, 2);    setPlotType(PLOTTYPE_HISTOGRAM, 3);    setShowTitleParameters(false);    setStudyMin(0);        var fp0 = new FunctionParameter("sType", FunctionParameter.STRING);        fp0.setName("Analysis");        fp0.addOption("Bar");        fp0.addOption("Cumulative");        fp0.setDefault("Bar");    var fp1 = new FunctionParameter("sOutput", FunctionParameter.STRING);        fp1.setName("Study Output");        fp1.addOption("Relative Percent");        fp1.addOption("Raw Data");        fp1.setDefault("Raw Data");    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("cAsk", FunctionParameter.COLOR);        fp3.setName("Ask Color");        fp3.setDefault(Color.green);    var fp4 = new FunctionParameter("cInside", FunctionParameter.COLOR);        fp4.setName("Inside Color");        fp4.setDefault(Color.black);    var fp5 = new FunctionParameter("cBid", FunctionParameter.COLOR);        fp5.setName("Bid Color");        fp5.setDefault(Color.red);    var fp6 = new FunctionParameter("cTotal", FunctionParameter.COLOR);        fp6.setName("Total Color");        fp6.setDefault(Color.lime);    var fp7 = new FunctionParameter("nAskThickness", FunctionParameter.NUMBER);        fp7.setName("Ask Thickness");        fp7.setDefault(8);    var fp8 = new FunctionParameter("nInsideThickness", FunctionParameter.NUMBER);        fp8.setName("Inside Thickness");        fp8.setDefault(6);    var fp9 = new FunctionParameter("nBidThickness", FunctionParameter.NUMBER);        fp9.setName("Bid Thickness");        fp9.setDefault(4);    var fp10 = new FunctionParameter("sAskDisplay", FunctionParameter.STRING);        fp10.setName("Display Ask");        fp10.addOption("Yes");        fp10.addOption("No");        fp10.setDefault("Yes");    var fp11 = new FunctionParameter("sInsideDisplay", FunctionParameter.STRING);        fp11.setName("Display Inside");        fp11.addOption("Yes");        fp11.addOption("No");        fp11.setDefault("Yes");    var fp12 = new FunctionParameter("sBidDisplay", FunctionParameter.STRING);        fp12.setName("Display Bid");        fp12.addOption("Yes");        fp12.addOption("No");        fp12.setDefault("Yes");    var fp13 = new FunctionParameter("sTotalDisplay", FunctionParameter.STRING);        fp13.setName("Display Total");        fp13.addOption("Yes");        fp13.addOption("No");        fp13.setDefault("Yes");}var nAsk = null;var nBid = null;var nMax = 0;var aReturn = new Array(4); // return array;// Volumevar nBidVol = 0;var nInsideVol = 0;var nAskVol = 0;var nTotalVol = 0;var vVol = null;var bPrimed = false;// Tickvar nBidTick = 0;var nInsideTick = 0;var nAskTick = 0;var nTotalTick = 0;var bEdit = true;function main(sType, sOutput, sSource, nFilter, cAsk, cInside, cBid,         nAskThickness, nInsideThickness, nBidThickness,        sAskDisplay, sInsideDisplay, sBidDisplay, sTotalDisplay) {    if (getCurrentBarIndex() < 0) return;    if (bEdit == true) {        setStudyTitle("Bid\/Ask " + sOutput + ": " + sSource + " (" + sType + ")");        setDefaultBarFgColor(cAsk, 1);        setDefaultBarFgColor(cInside, 2);        setDefaultBarFgColor(cBid, 3);        setDefaultBarThickness(nAskThickness, 1);        setDefaultBarThickness(nInsideThickness, 2);        setDefaultBarThickness(nBidThickness, 3);        setDefaultBarThickness(Math.max(nAskThickness, nInsideThickness, nBidThickness), 0);        if (sOutput == "Raw Data") {            setCursorLabelName("Ask Total", 1);            setCursorLabelName("Inside Total", 2);            setCursorLabelName("Bid Total", 3);            removeBand("0");            removeBand("25");            removeBand("50");            removeBand("75");            removeBand("100");            nMax = 0;        } else {    // Percent            setCursorLabelName("Ask %", 1);            setCursorLabelName("Inside %", 2);            setCursorLabelName("Bid %", 3);            addBand(0, PS_SOLID, 1, Color.black, "0");            addBand(25, PS_SOLID, 1, Color.black, "25");            addBand(50, PS_SOLID, 1, Color.black, "50");            addBand(75, PS_SOLID, 1, Color.black, "75");            addBand(100, PS_SOLID, 1, Color.black, "100");            setStudyMax(115);        }        bEdit = false;    }        var nState = getBarState();    if (nState == BARSTATE_NEWBAR && getDay(0) != getDay(-1)) nMax = 0;    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;                aReturn[1] = 0;                aReturn[2] = 0;                aReturn[3] = 0;            }        }                var vPrevVol = 0;        if (vVol != 0 && bPrimed == true) vPrevVol = vVol;                var nTempAsk = getMostRecentAsk();        var nTempBid = getMostRecentBid();        if (nTempAsk != null && nTempAsk != 0) nAsk = nTempAsk;        if (nTempBid != null && nTempBid != 0) nBid = 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;                aReturn[1] = 0;                aReturn[2] = 0;                aReturn[3] = 0;            }        }                var nTempAsk = getMostRecentAsk();        var nTempBid = getMostRecentBid();        if (nTempAsk != null && nTempAsk != 0) nAsk = nTempAsk;        if (nTempBid != null && nTempBid != 0) nBid = nTempBid;        var vClose = close();                nTotalTick++;        if (vClose <= nBid) {            nBidTick++;        } else if (vClose >= nAsk) {            nAskTick++;        } else {            nInsideTick++;        }            }        // Return Data    var nDtotal;    var nDask;    var nDinside;    var nDbid;    if (sSource == "Volume") {        if (sOutput == "Relative Percent") {            nDtotal = 100; if (sTotalDisplay == "No") nDtotal = nDtotal+"";            nDask = (nAskVol/nTotalVol)*100; if (sAskDisplay == "No") nDask = nDask.toFixed(4);            nDinside = (nInsideVol/nTotalVol)*100; if (sInsideDisplay == "No") nDinside = nDinside.toFixed(4);            nDbid = (nBidVol/nTotalVol)*100; if (sBidDisplay == "No") nDbid = nDbid.toFixed(4);            //return new Array(100, (nAskVol/nTotalVol)*100, (nInsideVol/nTotalVol)*100, (nBidVol/nTotalVol)*100);        } else if (sOutput == "Raw Data") {            nMax = Math.max(nMax, nTotalVol);            setStudyMax(nMax);            nDtotal = nTotalVol; if (sTotalDisplay == "No") nDtotal = nDtotal+"";            nDask = nAskVol; if (sAskDisplay == "No") nDask = nDask.toFixed(4);            nDinside = nInsideVol; if (sInsideDisplay == "No") nDinside = nDinside.toFixed(4);            nDbid = nBidVol; if (sBidDisplay == "No") nDbid = nDbid.toFixed(4);            //return new Array(nTotalVol, nAskVol, nInsideVol, nBidVol);        }    } else if (sSource == "Tick") {        if (sOutput == "Relative Percent") {            nDtotal = 100; if (sTotalDisplay == "No") nDtotal = nDtotal+"";            nDask = (nAskTick/nTotalTick)*100; if (sAskDisplay == "No") nDask = nDask.toFixed(4);            nDinside = (nInsideTick/nTotalTick)*100; if (sInsideDisplay == "No") nDinside = nDinside.toFixed(4);            nDbid = (nBidTick/nTotalTick)*100; if (sBidDisplay == "No") nDbid = nDbid.toFixed(4);            //return new Array(100, (nAskTick/nTotalTick)*100, (nInsideTick/nTotalTick)*100, (nBidTick/nTotalTick)*100);        } else if (sOutput == "Raw Data") {            nMax = Math.max(nMax, nTotalTick);            setStudyMax(nMax);            nDtotal = nTotalTick; if (sTotalDisplay == "No") nDtotal = nDtotal+"";            nDask = nAskTick; if (sAskDisplay == "No") nDask = nDask.toFixed(4);            nDinside = nInsideTick; if (sInsideDisplay == "No") nDinside = nDinside.toFixed(4);            nDbid = nBidTick; if (sBidDisplay == "No") nDbid = nDbid.toFixed(4);            //return new Array(nTotalTick, nAskTick, nInsideTick, nBidTick);        }    }        aReturn[0] = nDtotal;    aReturn[1] = nDask;    aReturn[2] = nDinside;    aReturn[3] = nDbid;    return new Array(nDtotal, nDask, nDinside, nDbid);}