//@Name:All Time High/Low count //@Description:Counts how many times a share has breached its all time high/low since a chosen date. //@Returns:Number //@Width:75 var type = 0; var typeList = ["Highest High","Lowest Low","Highest Close","Lowest Close"] var lookback = new Date(2016,11,31); function init(status) { if (status == Loading || status == Editing) { type = storage.getAt(0); lookback = new Date(dateNumGetYear(storage.getAt(1)),dateNumGetMonth(storage.getAt(1)),dateNumGetDay(storage.getAt(1))); } if (status == Adding || status == Editing) { dlg = new Dialog("Settings...", 170, 55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,80,-1,typeList,"","",type); dlg.addDatePicker("DP1",8,-1,-1,-1, "", "", lookback); if (dlg.show()==Dialog.Cancel) return false; type = dlg.getValue("DL1"); lookback = dlg.getValue("DP1"); storage.setAt(0, type); storage.setAt(1, dateNum(lookback)); } setTitle("All-time "+typeList[type]+" count since "+dateToString(lookback)) } function getVal(share) { var data = share.getPriceArray(); var hl = null; var count=0; for (var i=0;i=lookback) count++ } if (type==1 && (hl==null || hl>data[i].low)) { hl=data[i].low if (data[i].date>=lookback) count++ } if (type==2 && (hl==null || hl=lookback) count++ } if (type==3 && (hl==null || hl>data[i].close)) { hl=data[i].close if (data[i].date>=lookback) count++ } } return count; } function dateToString(date) { var day = String(date.getDate()); var dateStr = (day.length==1) ? ('0'+day) : day; dateStr += '-'; var month = String(1+date.getMonth()); dateStr += (month.length==1) ? ('0'+month) : month; dateStr += '-'; var year = String(date.getFullYear()); dateStr += (year[2]+year[3]); return dateStr; }