//@Name:Peter Lynch //@Description:Growth filter for finding fast-growing small to mid-cap companies with “ten-bagger” potential. //@Returns:Number //@Width:60 //@Env:Production var maxCap = 500; //max market cap (£M) var maxPEG = 1; //max PEG var histEPSgrowth = 3; //positive historical dividend growth over last X years var minEPSgrowth = 15; //min year on year eps growth var maxEPSgrowth = 50; //max year on year eps growth var minNeffTRR = 2; //min Neff TRR value var maxDER = 0.25; //max debt to equity ratio var AOMtoOM = 5; //average operating margin over X years to be less than 50% of current OM var APEtoPE = 5; //average P/E over X years to be less than of current P/E var cond = [1,1,1,1,1,1,1]; function init(status) { if (status == Loading || status == Editing) { maxCap = storage.getAt(0); maxPEG = storage.getAt(1); minEPSgrowth = storage.getAt(2); maxEPSgrowth = storage.getAt(3); histEPSgrowth = Math.floor(storage.getAt(4)/100); AOMtoOM = Math.floor(storage.getAt(4)%100/10); APEtoPE = Math.floor(storage.getAt(4)%10); minNeffTRR = storage.getAt(5); maxDER = storage.getAt(6); var tot = storage.getAt(7); for (var i=0;i=",cond[2]); dlg.addNumEdit("NUM3",72,y+x*2,-1,-1,"","% and <=",minEPSgrowth,0.1,100); dlg.addNumEdit("NUM4",145,y+x*2,-1,-1,"","% for",maxEPSgrowth,0.1,100); dlg.addIntEdit("INT1",200,y+x*2,-1,-1,"","years (historical)",histEPSgrowth,1,9); dlg.addTickBox("TB4",8,y+x*3,55,14,"Neff TRR >=",cond[3]); dlg.addNumEdit("NUM5",65,y+x*3,-1,-1,"","",minNeffTRR,0.1,50); dlg.addTickBox("TB5",8,y+x*4,72,14,"Debt to equity <=",cond[4]); dlg.addNumEdit("NUM6",82,y+x*4,-1,-1,"","",maxDER,0.1,50); dlg.addTickBox("TB6",8,y+x*5,130,14,"Operating margin at least double its",cond[5]); dlg.addIntEdit("INT2",140,y+x*5,-1,-1,"","year average",AOMtoOM,1,9); dlg.addTickBox("TB7",8,y+x*6,62,14,"P/E less than its",cond[6]); dlg.addIntEdit("INT3",72,y+x*6,-1,-1,"","year average",APEtoPE,2,9); if (dlg.show()==Dialog.Cancel) return false; maxCap = dlg.getValue("NUM1"); maxPEG = dlg.getValue("NUM2"); minEPSgrowth = dlg.getValue("NUM3"); maxEPSgrowth = dlg.getValue("NUM4"); histEPSgrowth = dlg.getValue("INT1"); minNeffTRR = dlg.getValue("NUM5"); maxDER = dlg.getValue("NUM6"); AOMtoOM = dlg.getValue("INT2"); APEtoPE = dlg.getValue("INT3"); for (var i=0;i=0 && eps1>=0 && peg>0 && peg <= maxPEG) counter++; //check eps growth var growthCount = 0; for (var i=-histEPSgrowth+1;i<=0;i++) { var eps1 = share.getResult(i-1, Result.EPS); var eps2 = share.getResult(i, Result.EPS); if (eps1 > 0 && eps2 > 0 && eps2/eps1>=minEPSgrowth/100+1 && eps2/eps1<=maxEPSgrowth/100+1) growthCount++; } if (cond[2] && growthCount==histEPSgrowth) counter++; //check Neff TRR var neff = share.getResult(0, Result.NeffTRR); if (cond[3] && neff>=minNeffTRR) counter++; //check DER var der = share.getResult(0, Result.DebtToEquity); if (cond[4] && der<=maxDER) counter++; //check for AOM/OM ratio var av = new MA(AOMtoOM); for (var i=-AOMtoOM+1;i<=0;i++) { var om = share.getResult(i,Result.OperatingMargin); if (om==null) break; var aom = av.getNext(om); } if (cond[5] && i==1 && aom/om<=0.5) counter++; //check for APE/PE ratio var av = new MA(APEtoPE); for (var i=-APEtoPE+1;i<=0;i++) { var eps = share.getResult(i, Result.EPS); if (eps==null || eps<=0) break; var yearClose = share.getCloseOnDate(share.getResult(i, Result.Date)); var ape = av.getNext(yearClose/eps); } if (cond[6] && i==1 && share.getClose/eps