Marc Chaikin Power Gauge computed on P123?

This is a follow-up from this thread (https://www.portfolio123.com/mvnforum/viewthread_thread,12149_lastpage,yes#lastpost) but sufficiently different to deserve its own
NB: Thank you Jim for your support.

Let me share a bit more on my “business case” and see if the workaround I can think of is right. Another way to ask the question is: how is the Marc Chaikin Power Gauge computed on P123?
Specifically how are the bottom xx% stocks selected while avoiding NAs and without using a bunch of screens but using custom series? (see below for more details)
Yuval and other advanced users → thoughts welcomed.

In this post, assume that I am keen to see how the top 20% stocks of the Russell3000 as per the P123 Core value ranking are fairing vs the bottom 20%.
From other work I did, I expect to see that if this P123 value ranking is working well now (top - bottom > 0) it is likely to continue for some months or years and should therefore be used. One can use any ranking i.e. Greenblatt etc

In other words I am trying to do something similar to the Power Gauge and what Marc has done here → https://actiquant.com/2019/01/08/value-investing-always-works-even-when-the-value-factor-falters/

But I want to automate it using custom series and not a bunch of manual screens. It is possible using similar sort of steps to what I have shown in prior posts e.g. here → https://www.portfolio123.com/mvnforum/viewthread_thread,11468#70637

To achieve this, I need to replicate the P123 core value ranking system in a custom universe to pick the top and bottom 20% stocks in the Russell 3000.

Now, look carefully above the table in Marc’s post → it states “NA neutral”. Indeed, one needs to put them in the middle otherwise when using Frank the “bottom 20% stocks” will actually be a micmac of NA stocks and low value stocks.

Here is the actual custom universe finding the top 20% of the Russell 3000 per P123 Core ranking system → https://www.portfolio123.com/app/universe/summary/244410?st=0&mt=7

How do I find the bottom 20% and avoid the NAs when doing so?
Am I right in thinking I just invert the order of the ranking constituents but not the ordering of the sub-nodes nor the one of the main node?
E.g. to get the least “value stocks” in terms of earnings:
// Earnings
setvar(@Rk1,frank(“PEExclXorTTM”, #industry,#desc))
setvar(@Rk2, frank(“CurFYEPSMean / Price”, #all,#asc)) // Forward Earnings Yield
setvar(@Rk3, frank(“OpIncBDeprTTM / EV”, #all,#asc)) // EBITDA / EV
setvar(@Earnings,frank(“avg(0.25*@rk1, 0.35*@rk2, 0.40*@rk3)”,#all,#desc))
//

Note that the frank in @Earnings stays the same as when looking for the top value stocks (#desc) but all others are switched #desc <-> #asc

Thank you,

Jerome

I think I’m not understanding something, Jerome.

I open up Core: Value and save it with Percentile NAs Neutral. I click on the Performance tab, make the universe the PRussell 3000, and specify 5 buckets. Under “chart type” I specify Performance and “Save Log.” I run it and I get the top 20% and bottom 20% charted. I can download the actual month-by-month or week-by-week results for each of the five buckets and I can also view the log to see 30 of the stocks that were in each bucket at every point.

But I think you want something more, or something else, and I can’t figure out exactly what.

Hi Yuval,

Thank you. I understand what you are explaining but I indeed want something different.

Imagine, I want to build a sim where the ranking system automatically adjusts to the current market regime (e.g. growth or value, small or large caps, low beta vs high beta etc). Automatically means that I do not want to have to manually do every week what you suggest.

The only way I know how to do what I want is to build a ranking system that uses conditional nodes along with eval() statements and these eval() statements will call custom series that will state whether the market is currently favoring growth or value, small or large caps etc.
So I need to be able to build custom series e.g:

  1. Perf of the P123 core value say over the last 12 months [top 20% - bottom 20%]?
  2. Perf of the P123 core growth say over the last 12 months [Top 20% - bottom 20%]?
  3. Perf of [Small - Big] over the last 12 months [smallest 20% - largest 20%]?
  • etc

To take example 3 (Small minus Big) and build on a prior thread:

  • The Small series is here → https://www.portfolio123.com/app/series/summary/11895?st=1&mt=8

  • The Big series is here → https://www.portfolio123.com/app/series/summary/11896?st=3&mt=8

  • Then I create the formula ‘$Top_Bottom_R3K_MktCap_12m’ defined as the difference between the 12m% return of each series:
    ((close(0,getseries(“%Rtn Smallest 20% R3k Mktcap”)) - close(252,getseries(“%Rtn Smallest 20% R3k Mktcap”))) / close(252,getseries(“%Rtn Smallest 20% R3k Mktcap”))) - ((close(0,getseries(“%Rtn Largest 20% R3K Mktcap”)) - close(252,getseries(“%Rtn Largest 20% R3K Mktcap”))) / close(252,getseries(“%Rtn Largest 20% R3K Mktcap”)))

  • Then I plot this formula as a custom series → https://www.portfolio123.com/app/series/summary/11897?st=3&mt=8

  • I can now call this latest custom series from a ranking system (or really from a lot of other places) to favor smaller or larger caps in line with the general “mood music” of the market on this topic.

I want to do the same with, say, P123 core value. So I need to start with two custom universes listing the top 20% and the bottom 20% stocks per the P123 core value. Using P123 core value is just a convenient shortcut to selecting top/bottom value stocks. I could use Greenblatt or another value selection system.

For this to work, I need to make sure I really have the bottom 20% per P123 core value (and not a bunch of N/As). Hence my prior question.

Is the question clearer?

To provide more background even if this is slightly different as I am comparing here value vs growth (cap-weighted) and not top-bottom Value or top-bottom Growth. The point is that I use custom series to make decisions in a sim.

I attach a screenshot of a custom series using IWF vs IWD that aims to understand if the market is in Growth mode or in Value mode.

You will see that:

  1. It passes the smell test over the last 20 years e.g. since early 2017 → growth mode.
  2. When in a certain mode, it is persistent i.e. it stays in it for months or -often- years. Therefore one can go with the assumption that “once in either value or growth, it is likely to continue in this same mode”

As a result, I also attach a screenshot of the matching strategy that -based on the output of the custom series- is invested in IWF when the market is estimated to be in Growth mode and in IWD when in Value mode. This strategy is always invested, no hedge, no nothing. It can therefore be compared to IWB = Russell 1000 ETF. You can see it does better, particularly for the little effort required i.e. only 20 “swaps” between IWD / IWF over 20 years (excluding rebalance to stay at 100%). Basically something that anyone can easily do manually and still beat the market. You can also add other bells and whistles to make it more appealing but this is not the point of this post.

Hence I find it interesting and value-added to replicated this with other known factors (small vs large, low Beta vs high-Beta, etc). And in particular, I would like to replicate this with ranking systems used to select stocks…


IWFvs IWD.pdf (224 KB)


Investing either in IWD or IWF.pdf (131 KB)

Now I understand. The solution is exactly as you surmised. Take your universe (https://www.portfolio123.com/app/universe/summary/244410). In every line that begins with “SetVar(@Rk”, overwrite every #desc with #asc and every #asc with #desc. Now you’ll have the 600 lowest-ranking stocks with no N/As.

N/As are put at the bottom of every rank, but the rank can be done either descending or ascending, and either way the N/As will be last.

To see how this works, open a screen and use as your universe the Dow Jones Industrials. Take two rules: FRank(“PEExclXorTTM”,#all,#desc) > 50 and showvar(@PE,PEExclXorTTM). Run the screen and look at the P/Es. Then change #desc to #asc and look at the P/Es. Now switch the first rule off and run the screen. You’ll see three stocks that you didn’t see in either of the previous screens: RTX, DOW, and BA. N/As are always ranked last.

Once again, I may be missing some nuance here, and if so, I apologize. But I think the universe you defined is an excellent synthetic way to come up with the most undervalued stocks and reversing the #desc and #asc will enable you to come up with the most overvalued stocks. Creating an aggregate series with those two universes should give you what you need.

Thank you Yuval.