The S&P 500 index attempts to be reflective of the various sectors in the U.S. economy. Thus a portfolio with sector weights similar to the S&P 500 should also be reflective of the US economy. This post demonstrates how to approximately mimic the sector weights of the S&P 500 in a portfolio with fewer stocks.
Stock market analysis fueled by Portfolio123.
Maintaining the S&P 500 weights within a stock portfolio is a popular strategy among hedge funds and larger private investors. Doing so means that the portfolio's performance will be similar to that of the S&P 500 while still providing the opportunity for out-performance. It also means that shorting the S&P 500 makes for a good hedge without the fear of a mismatch i.e. both the portfolio and hedge going in the wrong direction at the same time.
This post is going to use eleven custom series and twenty two custom formulas. Before starting into this strategy, I recommend creating a separate folder for your custom series and also for the custom formulas (described later). Start by going to Custom Series from the TOOLS pull-down menu.
Then create a New Custom Series Category as shown below.
Give the new category an appropriate name such as SP500 Sectors. This is the directory where the eleven custom series, one per sector, will be saved.
Now create the first custom series, this one for the Consumer Discretionary sector.
In this example, the custom series has been given the name wDiscr for (weight Discretionary).
Select the S&P 500 Index from the Universe pull-down menu. Then enter the following formula in the rule text box:
100 * UnivSum("Sector = Discretionary", "MktCap") / UnivSum("TRUE", "MktCap")
Migrate to the CHART tab, select Weekly as the Rebalance Frequency, set the time period to the maximum that your Portfolio123 membership will support, and click on UPDATE. When the chart has been drawn and is similar to that shown below, then click on Save.
Once saved then replicate this custom series ten more times, for each of the ten remaining sectors. The formula in the RULES tab has to change each time. For example, when creating the custom series for the Energy sector, the formula in the Rule text box would be:
100 * UnivSum("Secto r= Energy", "MktCap")/UnivSum("TRUE", "MktCap")
Make sure that you select the S&P 500 Index for the Universe, and generate/save the chart with weekly rebalance.
When finished all eleven custom series then the directory of custom series SP500 Sectors should look something like that shown below.
Next, twenty two custom formulas will be generated. The purpose of these formulas are to make the simulation rules easier to manage. You may be able to get away without them. Select Custom Formulas from the TOOLS pull-down menu.
Create two categories.
The two categories, Sector Selection and Sector Weight, are shown below. When you are finished, you will have eleven formula under each of the two categories.
Under the Sector Select category, create eleven custom formulas, one for each sector, with formulas similar to that shown below.
Note: you may have already created some of these custom formulas in a different post. If so, the move them to this newly created category.
Under the Sector Weight category, create eleven custom formulas, one for each sector, with formulas similar to that shown below. The names called up in GetSeries (i.e. wDiscr) should be identical to the names of the custom series that were created previously in this post.
Once the twenty two custom formulas have been created then it is time to create a simulation. The general simulation setup and position sizing for this demonstration are shown below. The approximate number of positions is set for 200 with a maximum weight deviation of 10%. You can set the number of positions much lower, but with lower numbers the weight resolution will be lees, and below 20 positions, this technique becomes impractical. Note that whatever number of positions you select, you will end up with about 10% less in number (see below for explanation).
There are two Buy rules. The first rule gets the maximum sector weight for the stock being processed. This is done by determining the sector that the stock being processed is from, then calling up the weight from the corresponding custom series created earlier. The rule is:
SetVar(@Weight, Eval($Discr, $wDiscr, Eval($Tech, $wTech, Eval($Indust, $wInd, Eval($Mater, $wMat, Eval($Ener, $wEner, Eval($Stap, $wStap, Eval($Health, $wHeal, Eval($Util, $wUtil, Eval($Finan, $wFin, Eval($Real, $wReal, $wTel))))))))))) | TRUE
The second rule sets the maximum sector weight during the buy process.
SecWeight <= @Weight * 0.9
The weight retrieved from the custom series MUST be multiplied by 0.9 (or thereabouts) or you won't get a reasonable approximation for the S&P 500 index sector weights. The reason traces back to the simulation position settings. The maximum weight deviation of 10% will be applied and all the weights will be scaled up by 10%. If the weights are not reduced by 10% in the Buy rule to compensate, then some sector weights will be too high by 10% and some sector weights will be squeezed and be much too low.
Set the end date for the simulation to be September 30, 2016. The sector allocation will be compared to an independent source for that specific date.
The simulation has the following sector allocation as of Sept. 30, 2016.
Below is a side-by-side comparison against a third party source.