//@LibraryID:871,1 //@Name:New High/Low on Date //@Description:Returns 1 if a share reached a new high or low over a specified period ona specified date //@Returns:Text //@Width:60 //@Env:Production //Author: Phil Tolhurst, ShareScript Support // 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. var period = 253; var outputList = ["Highest High","Lowest Low","Highest Close","Lowest Close"]; var output = 0; var dataList = ["days","weeks","months"]; var dataType = 0; var nhlDate = dateNum(new Date()); var returnType = 0; var returnList = [" the value","1"]; var xFactor; function init(status) { if (status == Loading || status == Editing) { period = storage.getAt(0); output = storage.getAt(1); dataType = storage.getAt(2); nhlDate = storage.getAt(3); returnType = storage.getAt(4); } if (status == Adding || status == Editing) { var tempDate = new Date(dateNumGetYear(nhlDate),dateNumGetMonth(nhlDate),dateNumGetDay(nhlDate)); dlg = new Dialog("Column Settings", 400, 55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("VAL5",50,5,55,-1,returnList,"Return ","if the share has ",returnType); dlg.addIntEdit("VAL1",220,23,-1, -1, "the previous","", period, 1, 5000); dlg.addDropList("VAL2",190,5,95,-1,outputList,"made a ", "",output); dlg.addDropList("VAL3",253,22,45,-1,dataList,"", "",dataType); dlg.addDatePicker("VAL4",50,22,-1,-1, "On", "Looking back over ",tempDate); if (dlg.show()==Dialog.Cancel) return false; period= dlg.getValue("VAL1"); output= dlg.getValue("VAL2"); dataType= dlg.getValue("VAL3"); tempDate=dlg.getValue("VAL4"); returnType = dlg.getValue("VAL5"); nhlDate = dateNum(tempDate.getFullYear(),tempDate.getMonth(),tempDate.getDate()); storage.setAt(0, period); storage.setAt(1, output); storage.setAt(2, dataType); storage.setAt(3, nhlDate); storage.setAt(4, returnType); } var tempDate = new Date(dateNumGetYear(nhlDate),dateNumGetMonth(nhlDate),dateNumGetDay(nhlDate)); setTitle(outputList[output]+" on "+tempDate.getDate()+"/"+(tempDate.getMonth()+1)+"/"+tempDate.getFullYear()+" ("+period+" "+dataList[dataType]+")"); if (dataType==0) { var baseData = getShare("UKI:UKX").getPriceArray(); } if (dataType==1) { var baseData = getShare("UKI:UKX").getWeeklyBarArray(); } if (dataType==2) { var baseData = getShare("UKI:UKX").getMonthlyBarArray(); } for (var a = baseData.length-1;a>=0;a--) { if (baseData[a].dateNum<=nhlDate) break; } xFactor = baseData.length-a } function getVal(share) { if (dataType==0) { var data = share.getPriceArray(); } if (dataType==1) { var data = share.getWeeklyBarArray(); } if (dataType==2) { var data = share.getMonthlyBarArray(); } var startPoint = data.length-xFactor; if(startPoint<1) return; if (output == 0) var testValue=data[startPoint].high; else if (output == 1) var testValue=data[startPoint].low; else var testValue =data[startPoint].close; var fail = 0; for (var i=startPoint-1;(startPoint>period+1?i>=startPoint-period:i>=0);i--) { if (output == 0) { if (data[i].high>testValue) { fail = 1; break; } else continue } else if (output == 1) { if (data[i].lowtestValue) { fail = 1; break; } else continue } else { if (data[i].close