//@Name:Spread % //@Description:Returns the share's bid/offer spread as an indicator. As this indicator can take a while to calculate for large cap shares, the number of days for which this is calculated is fixed between 1 and 30. //@Type:Intraday // Care has been taken in preparing this code but it is provided without guarantee. // You are welcome to modify and extend it. Please add your name as a modifier if you distribute it. //Coded by: Richard Chiesa, ShareScript Support var cache = {} var lineCol = Colour.Red; var lineStyle = Pen.Solid; var lineWidth = 0; var daysLoaded = 3; function init(status) { if (status == Loading || status == Editing) { daysLoaded = storage.getAt(0); lineCol = storage.getAt(1); lineStyle = storage.getAt(2); lineWidth = storage.getAt(3); } if (status == Adding || status == Editing) { var dlg = new Dialog("Settings...",160,55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("INT1",25,-1,-1,-1,"Load","days of data",daysLoaded,1,30); dlg.addColLinePicker("LN1",8,-1,-1,-1,"","",lineCol,lineStyle,lineWidth); if (dlg.show()==Dialog.Cancel) return false; daysLoaded = dlg.getValue("INT1"); lineCol = dlg.getValue("LN1").colour; lineStyle = dlg.getValue("LN1").pen; lineWidth = dlg.getValue("LN1").width; storage.setAt(0, daysLoaded); storage.setAt(1, lineCol); storage.setAt(2, lineStyle); storage.setAt(3, lineWidth); } setTitle("Spread %"); setSeriesLineStyle(0, lineStyle, lineWidth); setSeriesColour(0, lineCol); } function getGraph(share, data) { if (data.length<2) { output.length = data.length return output; } var shareIdStr = share.getShareScopeID()+":"+share.getShareNum(); var barSize = data[data.length-1].timeNum - data[data.length-2].timeNum; var startDateNum = data[0].dateNum; var startTimeNum = data[0].timeNum; if (!cache[shareIdStr] || cache[shareIdStr][2] != startDateNum || cache[shareIdStr][3] != startTimeNum || cache[shareIdStr][4] != barSize) { cache[shareIdStr] = []; var startFromI=0; var startFromJ=0; } else { var startFromI = cache[shareIdStr][0].length var startFromJ = cache[shareIdStr][1]; } var output = new Array(); if (data.length<2) { output.length = data.length return output; } var bidOffer = []; for (var i=daysLoaded-1;i>=0;i--) bidOffer = bidOffer.concat(share.getIBidOfferArray(i)); for (var i=0;i0) output[i] = output[i-1]; } cache[shareIdStr] = [] cache[shareIdStr][0] = []; cache[shareIdStr][1] = bidOffer.length-1; cache[shareIdStr][2] = startDateNum cache[shareIdStr][3] = startTimeNum cache[shareIdStr][4] = barSize for (i=0;i