//@Name:Average Price between two dates //@Description:Displays the average price between two specified dates. //@Returns:Number //@Env:Production //@Width:70 var startDate = new Date(2012,0,1); var endDate = getShare("UKI:UKX").getPrice().date; 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))); } if (status == Adding || status == Editing) { do{ dlg = new Dialog("Set Dates...", 180, 85); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDatePicker("DP1",50,5,-1,-1, "Start date", "", startDate); dlg.addDatePicker("DP2",50,39,-1,-1, "End date", "", endDate); if (startDate>endDate) dlg.addText(5,70,150,10,"The Start date must be before the End date."); if (dlg.show()==Dialog.Cancel) return false; startDate = dlg.getValue("DP1"); endDate = dlg.getValue("DP2"); }while (startDate>=endDate); storage.setAt(0, dateNum(startDate)); storage.setAt(1, dateNum(endDate)); } setTitle("Avg Price from: "+dateToString(startDate)+" to "+dateToString(endDate)); } function getVal(share) { var baseData = share.getPriceArray(); if(baseData == undefined) return; var startIndex; var endIndex; var maRes; for (var i=baseData.length-1;i>=0;i--) { if (baseData[i].date<=endDate && !endIndex) endIndex = baseData.length-i; if (baseData[i].date<=startDate && !startIndex) startIndex = baseData.length-i; if (startIndex && endIndex) break; } if (!startIndex || !endIndex || startIndex-endIndex==0) return; var maCalc = new MA(startIndex-endIndex); for (var i=baseData.length-startIndex;i