//@Name:Av.NAV between... //@Description:Returns the average NAV or average NAV discount between two dates or over a set period //@Returns:Number //@Env:Production //@Width:60 var endDate = getShare("UKI:UKX").getPrice().date; var startDate = new Date(endDate-31536000000); var period = 0; var outputType = 0; var useLatest = false; function init(status) { if (status == Loading || status == Editing) { startDate = new Date(dateNumGetYear(storage.getAt(0)),dateNumGetMonth(storage.getAt(0)),dateNumGetDay(storage.getAt(0))); endDate = new Date(dateNumGetYear(storage.getAt(1)),dateNumGetMonth(storage.getAt(1)),dateNumGetDay(storage.getAt(1))); outputType = storage.getAt(2); period = storage.getAt(3); useLatest = storage.getAt(4); } if (status == Adding || status == Editing) { dlg = new Dialog("Set Dates...", 200, 180); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",55,-1,80,-1,["Average NAV","Average Discount"],"Return","",outputType); dlg.addGroupBox(8,21,110,60,"Start date"); dlg.addDatePicker("DP1",35,32,-1,-1, "", "", startDate); dlg.addIntEdit("INT1",35,60,-1,-1,"Period","trad. days",period,0,1000); dlg.addGroupBox(8,85,110,55,"End date"); dlg.addDatePicker("DP2",35,96,-1,-1, "", "", endDate); dlg.addTickBox("TB1",35,120,80,-1,"Use latest date",useLatest); dlg.addText(10,145,160,24,"If the period is set, the script will look back over that number of trading days. If it's left as 0 the script will use the date instead.") if (dlg.show()==Dialog.Cancel) return false; outputType = dlg.getValue("DL1"); startDate = dlg.getValue("DP1"); endDate = dlg.getValue("DP2"); period = dlg.getValue("INT1"); useLatest = dlg.getValue("TB1"); storage.setAt(0, dateNum(startDate)); storage.setAt(1, dateNum(endDate)); storage.setAt(2, outputType); storage.setAt(3, period); storage.setAt(4, useLatest); } if (outputType) { if (!period) { if (useLatest) setTitle("Average Discount "+dateToString(startDate)); else setTitle("Average Discount "+dateToString(startDate)+" to "+dateToString(endDate)); } else { if (useLatest) setTitle("Average Discount ("+period+")"); else setTitle("Average Discount "+dateToString(endDate)+" ("+period+")"); } } else { if (!period) { if (useLatest) setTitle("Average NAV "+dateToString(startDate)); else setTitle("Average NAV "+dateToString(startDate)+" to "+dateToString(endDate)); } else { if (useLatest) setTitle("Average NAV ("+period+")"); else setTitle("Average NAV "+dateToString(endDate)+" ("+period+")"); } } } function getVal(share) { try { var assShares = share.getAssocShares(); } catch(e) { return; } var epic = share.getEPIC()+"-NAV"; var NAV; for (var i=0;iperiod) data.splice(0,data.length-period) } } else { if (useLatest) var data = share.getPriceArrayDates(startDate); else var data = share.getPriceArrayDates(startDate, endDate); } var sum = 0; for (var i=0;i