Idea for a screen

On wealth track, Savita Subramanian mentioned an idea for a screen that has worked through out history.

It is simply buying the second quintile of stocks in terms of dividend yield, an looking for a good payout ratio.

I imagine it could be improved on, but but as a first cut it has worked forever. The 1 quintile contains stocks that may cut their dividend.

2 Likes

Savita Subramanian mentioned an idea for a screen that has worked through out history.
. . I imagine it could be improved on, but as a first cut it has worked forever.

I made a first pass of this in GTR1. If I did this correctly which I’m not all that confident in, this doesn’t work very well. As a monthly hold trading cost make it useless. Going all the way to a one year hold it does a little better than the S&P.
From 1997: CAGR 7.4 SAWR 5.32 compared to the S&P CAGR 8.6 SAWR 5.0
http://gtr1.net/2013/?!!QlpoMTFBWSZTWTpy8ZYAAJPfgCAAIgd!2B8A…

RAM

7 Likes

ratio(dps12m.s,aprc) is incorrect. A bug if you will. (Never use different data sources in an equation.)

I use:
Yield: max(0,pref(ratio(dpsind.s,sprc),ratio(cdv.a,aprc)))
MktCap: linear(0.000001,product(aprc,sho.a))

Payout ratio is EPS/DPS:
EPS: pref(epsdc12mq1d.s,epscon12mq1d.s,epsfx12mq1d.c)

Payout: pref(ratio(dps12mq1d.s,epsdc12mq1d.s),ratio(dps12mq1d.s,epscon12mq1d.s),ratio(dvpsp12mq1d.c,epsfx12mq1d.c))

A dividend payout ratio of 30-50% is considered healthy, while anything over 50% could be unsustainable. {YieldPayout2022a} final sort picks the bottom 10 payout ratio. {YieldPayout2022b}looks for a payout ratio below 50%. Neither of these versions beats the market.

Screen             CAGR  SAWR  GSD  MDD  Sharpe  depth
SP1500EqualWeight   12     9   22   -60   0.52   1500
SP500EqualWeight    11     8   20   -60   0.54    500
SP500MktCapWeight   11     6   18   -54   0.54    500
YieldPayout2022a    12     5   34   -75   0.45     10
YieldPayout2022b    11     8   21   -57   0.53    302

https://gtr1.net/2013/?~YieldPayout2022a:h21f0.4::styp.a:et1…
https://gtr1.net/2013/?~YieldPayout2022b:h21f0.4::styp.a:et1…

5 Likes

To keep track of useful gtr1 field definitions, I use a spreadsheet with 3 columns. My current list of fields is:

  type     group   code
  field    BBYld   BuybackYield: linear(1,1,-1,ratio(SharesQ1,SharesQ5))
  field    BBYld   ShareholderYield: linear(1,Yield,1,BuybackYield)
  field    BBYld   SharesQ1: pref(shraq1.s,cshoq1d.c)
  field    BBYld   SharesQ5: pref(shraq5.s,cshoq5d.c)
  field    BBYld   Yield: max(0,pref(ratio(dpsind.s,sprc),ratio(cdv.a,aprc)))
  step     BBYld   SharesQ1 > 0
  step     BBYld   SharesQ5 > 0
  field     Beta   BETA: if(dspo>800,beta(1,159,5),1)
  field     Beta   BETA: if(dspo>800,beta(1,38,21),1)
  field     Cash   Cash: pref(plus(max(0,cashq1.s),max(0,stinvq1.s)),max(0,cheq1.c))
  field     Cash   CashLessDebt: minus(Cash,Debt)
  field     Cash   CurrentBalance: minus(pref(caq1.s,actq1.c),pref(clq1.s,lctq1.c))
  field     Cash   Debt: pref(plus(max(0,ltdebtq1.s),max(0,stdebtq1.s)),plus(max(0,dlttq1.c),max(0,dlcq1.c)))
  field     Cash   NetDebt: linear(1,max(0,ltdebtq1.s),1,max(0,stdebtq1.s),-1,max(0,cashq1.s),-1,max(0,stinvq1.s))
 option   command  list:*.*
 option   command  list:gto* list:indr.k list:rank.z list:ril.w list:tco12mq1d.s list:tcoq1.s list:sprc list:csoq1d.s
  field     Debt   NetDebt: pref(NetDebts,NetDebtc)
  field     Debt   NetDebtc: linear(1,max(0,dlttq1.c),1,max(0,dlcq1.c),-1,max(0,cheq1.c))
  field     Debt   NetDebts: linear(1,max(0,ltdebtq1.s),1,max(0,stdebtq1.s),-1,max(0,cashq1.s),-1,max(0,stinvq1.s))
  field     EBIT   EBIT: pref(linear(1,gopinc12m.s,1,if(int12m.s=null,0,int12m.s),1,if(uninc12m.s=null,0,uninc12m.s)),EBITold)
  field     EBIT   EBITold: linear(1,gopinc12m.s,1,if(int12m.s=null,0,int12m.s))
  field     EBIT   EBITtoEV: ratio(EBIT,EV)
  field   EBITDA   EBITDA: pref(linear(1,gopinc12m.s,1,if(int12m.s=null,0,int12m.s),1,if(uninc12m.s=null,0,uninc12m.s),1,if(dep12m.s=null,0,dep12m.s)),EBITDAold)
  field   EBITDA   EBITDAold: linear(1,gopinc12m.s,1,if(int12m.s=null,0,int12m.s))
  field   EBITDA   EBITDAtoEV: ratio(EBITDA,EV)
  field     Fin    CO:  pref(tco12mq1d.s,tco12mq1d.c)
  field     Fin    ERN: pref(epsdc12mq1d.s,epscon12mq1d.s,epsfx12mq1d.c)
  field     Fin    EV: linear(1,product(sprc,csoq1d.s),1,max(0,prefq1.s),1,max(0,ltdebtq1.s),1,max(0,stdebtq1.s),-1,max(0,cashq1.s),-1,max(0,stinvq1.s))
  field     Fin    FCF:  pref(product(fcfps12mq1d.s,shraq1.s),product(fcfps12mq1d.c,cshprq1d.c))
  field     Fin    FCFPS:  pref(fcfps12mq1d.s,fcfps12mq1d.c)
  field     Fin    LTD: pref(ltdebtq1.s,dlttq1.c)
  field   Growth   COG: pref(ratio(tco12mq1d.s,tco12mq21d.s),ratio(tco12mq1d.c,tco12mq21d.c))
  field   Growth   EG: linear(100,EGm,-1,100)
  field   Growth   EG5ls: linear(100,Yield,1,pref(epsdcg5ls.s,epscg5f.s,EG))
  field   Growth   EGm: pref(ratio(epsdc12mq1d.s,epsdc12mq21d.s),ratio(epscon12mq1d.s,epscon12mq21d.s),ratio(epsfx12mq1d.c,epsfx12mq21d.c))
  field   Growth   SG: pref(ratio(sales12mq1d.s,sales12mq21d.s),ratio(sale12mq1d.c,sale12mq21d.c))
  field   Growth   SG: pref(ratio(salesq1.s,salesq5.s),ratio(sale3mq1d.c,sale3mq5d.c))
  field   import   lf-1lp-1h1  EY: importf(0,EY,-1)
  field     Ind    IndGroup: pref(trbc7.s,incd.s,fincd49.a)
  field     Ind    Sector: pref(trbc2.s,sector.s,fincd12.a)
  field     Ind    Software: pref(if(trbc7.s=5720101!5720102!5720103,1,0),if(incd.s=1018!1036,1,0),if(fincd49.a=36,1,0))
  field     Liq    MktCap: linear(0.000001,product(aprc,sho.a))
  step      Liq    adv(1,63) top 50%
  step      Liq    dspo(1) >= 252
  step      Liq    pref(if(country.s=1,1,0),if(styp.a=12!30!31!42!72,0,1)) = 1
  step      Liq    styp.a = 10!11!12!18!30!31!48
universe  MIbase   [https://gtr1.net/2013/?~MIpostsBase:h21f0.4::styp.a:et10!11!...](https://gtr1.net/2013/?~MIpostsBase:h21f0.4::styp.a:et10!11!12!18!30!31!48:dspo%281%29al253:adv%281,63%29gt0:adv%281,63%29tp50)
  field     Mo     Toast: plus(trp(1,63),trp(1,126),trp(1,252))
  step      Mo     PH52c: ratio(gprc(1),hgprc(1,252))
  step      Mo     PH52cLagged: ratio(gprc(3),hgprc(3,252))
  step      Mo     PH52i: ratio(gprc(1),ghigh(1,252))
  field     Mult   PB: pref(ratio(product(sprc,shraq1.s),equityq1.s),ratio(product(cshprq1d.c,cprc),ceqq1.c))
  field     Mult   PCF: pref(ratio(sprc,cfps12mq1d.s),ratio(cprc,cfps12mq1d.c))
  field     Mult   PE: pref(ratio(sprc,epsdc12mq1d.s),ratio(sprc,epscon12mq1d.s),ratio(cprc,epsfx12mq1d.c))
  field     Mult   PFCF:  pref(ratio(sprc,fcfps12mq1d.s),ratio(cprc,fcfps12mq1d.c))
  field     Mult   PS: pref(ratio(product(sprc,shraq1.s),sales12m.s),ratio(product(cprc,cshoq1d.c),sale12mq1d.c))
  step      Mult   PE3y: pref(peaeps3y.s,ratio(cprc,linear(0.34,epsfx12mq1d.c,0.33,epsfx12mq5d.c,0.33,epsfx12mq9d.c)))
  field     Oper   RD: pref(rd12m.s,linear(1,xrdq1.c,1,xrdq2.c,1,xrdq3.c,1,xrdq4.c)) DOES NOT WORK
  field    Owner   PIH: pref(shrinst.s,adv(1,63))
  field   payout   EPS: pref(epsdc12mq1d.s,epscon12mq1d.s,epsfx12mq1d.c)
  field   payout   Payout: pref(ratio(dps12mq1d.s,epsdc12mq1d.s),ratio(dps12mq1d.s,epscon12mq1d.s),ratio(dvpsp12mq1d.c,epsfx12mq1d.c))
  step    payout   EPS > 0
  field     Pct    pctMktCap: pcntla(MktCap,1,step6)
  field     Pct    pctMktCap: rank(MktCap,IndGroup,step6)
  field     Pct    ToastInd: tpcut(Toast,IndGroup,step5,50)
  field    Ratio   Assets: pref(assetsq1.s,atq1.c)
  field    Ratio   AssetTO: pref(ratio(sales12mq1d.s,assetsq1.s),ratio(sale12mq1d.c,atq1.c))
  field    Ratio   OperMargin: pref(ratio(gopinc12m.s,sales12m.s),ratio(product(cshprq1d.c,oeps12q1.c),sale12mq1d.c))
  field    Ratio   ROA: pref(ratio(netinc12mq1d.s,assetsq1.s),ratio(ni12mq1d.c,atq1.c))
  field   rgeary   Q1End: pref(if(salesq1.s=null,0,perendq1.s),if(saleq1.c=null,0,ordq1.c))
  step    rgeary   linear(1,Q1End,-252,1,1,dsio(1),-1,ord(1)) >= 0
  step    rgeary   minus(ord(1),Q1End) <= 252
  step    rgeary   Q1End > 0
  step    rgeary   styp.a != 14!15!16!17!23!44!45!73!74!75
  field     ROE    Equity: pref(equityq1.s,ceqq1.c)
  field     ROE    NetInc: pref(netinc12mq1d.s,ni12mq1d.c)
  field     ROE    ROE: if(Equity>0,ratio(NetInc,Equity),NetInc)
  step      ROE    Equity > 0
  field     SGPS   SalesGrowth1: ratio(SalesY1,SalesY2)
  field     SGPS   SalesGrowth5: ratio(SalesY1,SalesY6)
  field     SGPS   SalesPerShareGrowth1: ratio(SalesGrowth1,SharesGrowth1)
  field     SGPS   SalesPerShareGrowth5: ratio(SalesGrowth5,SharesGrowth5)
  field     SGPS   SalesY1: pref(salesy1.s,sale12mq1d.c)
  field     SGPS   SalesY2: pref(salesy2.s,sale12mq5d.c)
  field     SGPS   SalesY6: pref(salesy6.s,sale12mq21d.c)
  field     SGPS   SharesGrowth1: ratio(SharesY1,SharesY2)
  field     SGPS   SharesGrowth5: ratio(SharesY1,SharesY6)
  field     SGPS   SharesY1: pref(shray1.s,cshoq1d.c)
  field     SGPS   SharesY2: pref(shray2.s,cshoq5d.c)
  field     SGPS   SharesY6: pref(shray6.s,cshoq21d.c)
  step      SGPS   SalesPerShareGrowth1 > 1.05
  step      SGPS   SalesPerShareGrowth5 > 1.25
  step      SGPS   SalesY1 > 0
  step      SGPS   SalesY2 > 0
  step      SGPS   SalesY6 > 0
  step      SGPS   SharesY1 > 0
  step      SGPS   SharesY2 > 0
  step      SGPS   SharesY6 > 0
universe    VL     [http://gtr1.net/2013/?~VL:f0.4::styp.a:et0!10!11!12!18!30!31...](http://gtr1.net/2013/?~VL:f0.4::styp.a:et0!10!11!12!18!30!31!48:dspo%281%29al1265:MktCap:tn1700:MktCap:product%28aprc,sho.a%29)
  field   volume   VolRat: ratio(agv(1,10),agv(1,63))
  field   volume   VolRat: ratio(agv(1,10),agv(1,63))
  field   volume   Voom: product(VolRat,trp(1,126))
  field   volume   Voomd: ratio(Voom,adv(1,63))
  field   volume   Voomp: ratio(Voom,aprc))
  field   volume   Vorp: ratio(VolRat,aprc)
  field   volume   Vvvvv: product(VolRat,trp(1,20))
  field    Yield   BP: pref(ratio(equityq1.s,product(sprc,shraq1.s)),ratio(ceqq1.c,product(cshprq1d.c,cprc)))
  field    Yield   CFP: pref(ratio(cfps12mq1d.s,sprc),ratio(cfps12mq1d.c,cprc))
  field    Yield   COP: pref(ratio(tco12mq1d.s,product(sprc,csoq1d.s)),ratio(tco12mq1d.c,product(cprc,cshoq1d.c)))
  field    Yield   Div: pref(dpsind.s,cdv.a)
  field    Yield   EY: pref(ratio(epsdc12mq1d.s,sprc),ratio(epscon12mq1d.s,sprc),ratio(epsfx12mq1d.c,cprc))
  field    Yield   EY2: pref(ratio(epsdc12mq5d.s,sprc),ratio(epscon12mq5d.s,sprc),ratio(epsfx12mq5d.c,cprc))
  field    Yield   EY3: pref(ratio(epsdc12mq9d.s,sprc),ratio(epscon12mq9d.s,sprc),ratio(epsfx12mq9d.c,cprc))
  field    Yield   EY3y: linear(0.34,EY,0.33,EY2,0.33,EY3)
  field    Yield   EYEG: if(EG>0,product(EY,EG5ls),-999999)
  field    Yield   FCFP:  pref(ratio(fcfps12mq1d.s,sprc),ratio(fcfps12mq1d.c,cprc))
  field    Yield   OperYield: pref(ratio(gopinc12m.s,product(sprc,csoq1d.s)),ratio(oeps12q1.c,cprc))
  field    Yield   SP: pref(ratio(sales12mq1d.s,product(shraq1.s,sprc)),ratio(sale12mq1d.c,product(cshprq1d.c,cprc)))
  field    Yield   TotalDiv: pref(product(dpsind.s,csoq1d.s),product(cdv.a,cso.a))
  field    Yield   Yield: max(0,pref(ratio(dpsind.s,sprc),ratio(cdv.a,aprc)))
  step     Yield   CurrentEY:  pref(ratio(cepsd.s,sprc),ratio(epsfx12mq1d.c,cprc))
18 Likes

Never use different data sources in an equation.
I obviously have more GTR1 speak to learn, I defer to your expertise and appreciate you correcting my attempt.

And especially thanks for your compilation of useful gtr field definitions. This would be a nice additional appendix for GTR1 for Dummies.

RAM

5 Likes

There are a few different price fields:
use aprc with .a fields
use sprc with .s fields
use cprc with .c fields
use gprc with ghigh.

2 Likes