// ShareMaestro Export Script // load("ShareMaestro.ss"); ShareMaestro.ExportData(); var ShareMaestro = {}; ShareMaestro.ExportData = function() { var portNames = getPortfolioNames(); var dlg = new Dialog("Export to ShareMaestro", 200,60); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("portname", -1,-1,-1,-1, portNames, "Portfolio:"); dlg.addTextEdit("filename", -1,-1,-1,-1, "Ouput File:", "", "ShareMaestro.csv"); if (dlg.show() == Dialog.Cancel) return; var portName = portNames[dlg.getValue("portname")]; var fileName = dlg.getValue("filename"); this.sectorYieldCache = {}; // parameters for beta calculation this.betaIndex = getShare("UKI:UKX"); this.betaPeriod = 250; // trading days - roughly 1 year var shares = getPortfolio(portName); var f = new File(fileName, File.WriteMode); this.OutputSummaryData(f); for (var i=0; i 4 divs per year) return divTotal; } } ShareMaestro.GetSectorYield = function(sectorName) { if (!this.sectorYieldCache[sectorName]) { // sector div yield calculation // we cache the result in hash for later lookups on the same sector var ftseAllShare = getList(List.FTSEAllShare); var sectorList = []; var totalCap = 0; for (var i = 0; i < ftseAllShare.length; i++) { var item = ftseAllShare[i]; if (item.getSector() == sectorName) sectorList.push(item); } var sectorYield = 0; for (var i = 0; i < sectorList.length; i++) { var itemDiv = this.GetFTSECalcDiv(sectorList[i]); if (!itemDiv) itemDiv = 0; var itemClose = sectorList[i].getClose(); var itemCap = sectorList[i].getCap(); totalCap += itemCap; sectorYield += (itemDiv/itemClose*100)*itemCap; } sectorYield /= totalCap; this.sectorYieldCache[sectorName] = sectorYield; } return this.sectorYieldCache[sectorName]; } ShareMaestro.Beta = function(share, index, period) { // both data-sets need to end on the same day if (share.getPrice().dateNum != index.getPrice().dateNum) return undefined; var shareC = share.getCloseArray(period+1); // adjust the period for the data we've actually got period = shareC.length-1; if (period < 20) return undefined; var indexC = index.getCloseArray(period+1); // calculate the deltas var X = []; var Y = []; for (var i=0; i