//@LibraryID:752,4 //@Name:Fundamental Performance //@Description:Finds shares where a chosen fundamental has increased/decreased or is above/below a given threshold for a given number of years. //@Returns:Number //@Width:60 //@Env:Production //modified by: Paul Hall, ShareScope Support. 18/12/20 - added forecast tickbox var res = 0 var resList = ["Profit","Turnover","EPS","Dividend","Norm.PreTax","FRS3 pre-tax","FRS3 post-tax","Tax","Book Value","Tang. Book Value", "Cash","Cash Flow","Capex","R&D","Depreciation","ROCE","ROE","Quick Ratio","Current Ratio","Operating Margin","Interest Cover", "Interest paid","Net borrowing","Net Current Assets","Net gearing","Cash %","Gross gearing","Gross gear.<5yrs","Gross gear.<1yrs"] var upDown = 0; var perc = 5; var year0 = 3; var year1 = 4; var includeFc = 0; function init(status) { if (status == Loading || status == Editing) { res = storage.getAt(0); upDown = storage.getAt(1); perc = storage.getAt(2); year0 = storage.getAt(3); year1 = storage.getAt(4); includeFc = storage.getAt(5); } if (status == Adding || status == Editing) { dlg = new Dialog("Setup...", 230, 90); dlg.addOkButton(); dlg.addCancelButton(); dlg.addDropList("DL1",8,-1,80,-1,resList,"","",res); dlg.addDropList("DL2",8,26,80,-1,["Increased by %","Decreased by %","Increased by","Decreased by","Above","Below"],"","",upDown); dlg.addNumEdit("NUM1",95,26,-1,-1,"","per year",perc,0,1000); dlg.addIntEdit("INT1",20,44,-1,-1,"for","",year0,1,20); dlg.addIntEdit("INT2",88,44,-1,-1,"of the last","years",year1,1,20); dlg.addText(8,70,180,20,"Note: positive changes between negative values will not be counted as an increase (ie: from -12m to -9m profit)"); dlg.addTickBox("TICK1",8,58,120,-1,"Include forecasts",includeFc); if (dlg.show()==Dialog.Cancel) return false; res = dlg.getValue("DL1"); upDown = dlg.getValue("DL2"); perc = dlg.getValue("NUM1"); year0 = dlg.getValue("INT1"); year1 = dlg.getValue("INT2"); includeFc = dlg.getValue("TICK1"); storage.setAt(0, res); storage.setAt(1, upDown); storage.setAt(2, perc); storage.setAt(3, year0); storage.setAt(4, year1); storage.setAt(5, includeFc); } if (upDown==0) var partText = " incr. by "+perc+"% "; if (upDown==1) var partText = " decr. by "+perc+"% "; if (upDown==2) var partText = " incr. by "+perc+" "; if (upDown==3) var partText = " decr. by "+perc+" "; if (upDown==4) var partText = " above "+perc+" "; if (upDown==5) var partText = " below "+perc+" "; if(includeFc==1) { setTitle(resList[res]+partText+year0+"of"+year1+" yrs (fc)"); } else { setTitle(resList[res]+partText+year0+"of"+year1+" yrs"); } } function getVal(share) { var result1; var result2; var diff; var totRes = 0; //print(share.getName()); if(includeFc==1) { for (var i=0;i=perc) || ((upDown==1 || upDown==3)&& diff<=-perc) || (upDown==4 && result1>=perc) || (upDown==5 && result1<=perc)) totRes++; if (totRes>=year0) return 1; } } else { for (var i=0;i=perc) || ((upDown==1 || upDown==3)&& diff<=-perc) || (upDown==4 && result1>=perc) || (upDown==5 && result1<=perc)) totRes++; if (totRes>=year0) return 1; } } } function getFund(share,fund,y) { switch (fund) { case 0: return share.getResult(y, Result.Profit); case 1: return share.getResult(y, Result.Turnover); case 2: return share.getResult(y, Result.EPS); case 3: return share.getResult(y, Result.Dividend); case 4: return share.getResult(y, Result.NormPreTax); case 5: return share.getResult(y, Result.FRS3PreTax); case 6: return share.getResult(y, Result.FRS3PostTax); case 7: return share.getResult(y, Result.Tax); case 8: return share.getResult(y, Result.BookValue); case 9: return share.getResult(y, Result.TangibleBookValue); case 10: return share.getResult(y, Result.Cash); case 11: return share.getResult(y, Result.CashFlow); case 12: return share.getResult(y, Result.Capex); case 13: return share.getResult(y, Result.RD); case 14: return share.getResult(y, Result.Depreciation); case 15: return share.getResult(y, Result.ROCE); case 16: return share.getResult(y, Result.ROE); case 17: return share.getResult(y, Result.QuickRatio); case 18: return share.getResult(y, Result.CurrentRatio); case 19: return share.getResult(y, Result.OperatingMargin); case 20: return share.getResult(y, Result.InterestCover); case 21: return share.getResult(y, Result.InterestPaid); case 22: return share.getResult(y, Result.NetBorrowing); case 23: return share.getResult(y, Result.NetCurrentAssets); case 24: return share.getResult(y, Result.NetGearing); case 25: return share.getResult(y, Result.CashPercent); case 26: return share.getResult(y, Result.GrossGearing); case 27: return share.getResult(y, Result.GrossGearing1); case 28: return share.getResult(y, Result.GrossGearing5); } }