Jan. 2, 2020 

This article refers to the first trading strategy displayed and cloneable on this Quantopian website forum. The strategy makes a ranked selection of 20 stocks based on some fundamental data and equally rebalances its portfolio weights on a monthly basis. It uses a SPY 140-day return to determine its trend and will switch to bonds as downside protection.

Some stock trading strategies have built-in structures by design. In many cases, the way they are made to trade might dictate their outcome. A periodically rebalancing strategy can have its total outcome estimated even before running a simulation.

For instance, the strategy cited above, rebalances every month a 20-stock portfolio over a 200-month period (16.7 years) with an expected turnover rate of 70% to 80%. We should expect the number of trades (n) to be within the following range: E[n] = 20 ∙ 200 ∙ 0.70 = 2,800 <= n <= 3,200 = 20 ∙ 200 ∙ 0.80.

Should you increase the number of stocks to 100, the expected number of trades would now range between: E[n] = 100 ∙ 200 ∙ 0.70 = 14,000 <= n <= 16,000 = 100 ∙ 200 ∙ 0.80.

The above estimate does not say anything about how the trades will unfold, only that, most probably, n trades might be executed for whatever reason dictated by the rebalancing procedure. That it be a simple monthly rebalance or an optimized one.

By determining how many stocks will be traded (j = 20 or j = 100), we are fixing part of the strategy's long-term expectancy and trading behavior. And, at the same time, fixing part of the outcome of the payoff matrix since (n) is an integral part of the solution: F(t) = F0 + Σn (H ∙ ΔP) = F0 + n ∙ x_bar.

The bet size of the strategy will vary according to: F(t) / j = u(t) viewed here as a trading unit function or a fixed fraction of equity. It has already been set that: F(t) = F0 + n ∙ x_bar. Therefore, the bet sizing will be dependent on the evolution of the trading strategy itself: F(t) / j = (F0 + nt ∙ x_bart) / j.

In the above equation, we have F0, the initial capital, and j, the number of stocks to be traded. We can have a plausible estimate for the number of trades (n) as shown above. What is left is getting a ballpark figure for (x_bar), the average net profit per trade.

Getting an estimate for (E[x_bar]) could give us an expected long-term outcome range for the trading strategy without even having done a single simulation.

Say you have, F0 = $10,000,000 with, on average, a 4% return on its trading unit. The profit would be: F(t) / j ∙ 0.04. We could rewrite it as: F(t) = F0 + n ∙ u(t) ∙ 0.04. The bet sizing function is proportional to the rate of growth of the portfolio, leading to: F(t) = F0 + n ∙ F0/j ∙ (1+g(t))t ∙ 0.04. Putting in some numbers: F0 + 2,800 ∙ F0/j ∙ (1 + 0.05)16.7 ∙ 0.04 <= F(t) <= F0 + 3,200 ∙ F0/j ∙ (1 + 0.05)16.7 ∙ 0.04. The expected outcome would be in the range: $136,487,999 <= F(t)<= $154,557,713. Putting it in terms of long-term expected CAGR, it would give: 16.94% <= CAGR <= 17.82%. This is about what we got in the following chart where the number of stocks was gradually increased from 5 to 240.

Backtest Summary:

Backtest Summary

(click to enlarge)

It is worthwhile noting that we have nothing on the trading strategy itself except the rebalancing structure we have giving it. And yet, without knowing what the future might be, which stocks will be traded, when and in what quantities, we can provide a reasonable estimate of what the trading strategy will do over the long term.

Jumping to 100 stocks, using the same estimate function, we would get: 15.10% <= CAGR <= 15.94% based on the reduced growth expectations which are in line with the results in the above chart.

The reduced expectations are due to the mathematical structure of the trading strategy and the reduced average performance as we added lower-ranked stocks to the list. One source of average profit reduction is related to the number of trades taken and the other to the added stocks with lower expectancy than what was already there.

This dynamic changed as we increased the number of stocks to be traded. On one hand, we need to increase the number of stocks in the portfolio in order to increase diversification, minimize market impact, scale to higher levels and also minimize the effect that any one stock might adversely impact the overall portfolio.

The numbers used for the 100-stock case were: F0 + 14,000 ∙ F0/j ∙ (1 + 0.04)16.7 ∙ 0.04 <= F(t) <= F0 + 16,000 ∙ F0/j ∙ (1 + 0.04)16.7 ∙ 0.04 which resulted in: $117,806,462 <= F(t) <= $133,207,385. And in terms of long-term expected CAGR, as given above: 15.10% <= CAGR <= 15.94% which again is close to what is presented in the above table for the 100-stock portfolio.

This gives the ability to make long-term future range projections of what a stock rebalancing strategy could do. Thereby, providing objectives and long-term targets. Not because you know the future, but because you know the structure of your trading strategy and how it will behave going forward. It will do as it did in its simulation and that is; rebalance every month.

You still will not know the future with any certainty, but the rebalancing with be done on the same premises as when tested over past data. Stock prices, going forward, will continue to fluctuate, that we like it or not. And that is what the rebalancing is trying to capture, at least, a part of it.

There is a need for some economic reason as to why this rebalancing can work to one's advantage. In this case study, the stock selection process and the periodic rebalancing were at the heart of it.

We might not know what is coming our way or how our portfolios will do in the very near term, nonetheless, we can make long-term projections as to where we are going and have a reasonable approximation.


Jan. 2, 2020, © Guy R. Fleury. All rights reserved.