Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
The Capital Asset Pricing Model Revisited

The CAPM (Capital Asset Pricing Model) has been around since the 60's and is often found as a justification for the notion of the portfolio's efficient frontier. The following article starts to question that argumentation. You see CAPM models showing a few securities and find them not only compelling but also reasonable as if a matter of fact it should not be any other way.

However, when you dig deeper you find scenarios where the thing might not hold water.

The attached notebook is based on the first part of Lecture 30 on the Capital Asset Pricing Model by Beha Abasi, Maxwell Margenot, and Delaney Granizo-Mackenzie.

52 responses

The attached notebook is an extension to the one presented above. It explores the impact of 3 equations representing stochastic stock price series generated from normalized distributions.

The interesting part is the last equation and should prove to be the most important.

I was preparing a follow-up to the last notebook, but then, from simulation to simulation, it grew and grew. So much so, that it is now a 160-page book: Beyond the Efficient Frontier. And there is much wisdom in it.

The main conclusion is that the efficient frontier might be a self-imposed limit since one could easily jump over it as the following chart shows:

Note that in the process the whole efficient frontier was raised higher. There are 20,000 portfolios composed of 300 stocks each in that vertical blue strip above the efficient frontier. That is 6,000,000 prices series that were generated using the random function in the notebook and passed to its optimizer. It is a sufficiently large sample to be statistically significant to represent what was going on.

Observe that all 20,000 portfolios are clustered together saying that they all achieved about the same level of risk, and that you could have picked about any one of them and have a descent performance level.

It took a while to get there, but nonetheless, it ties in quite well with my previous work.

Instead of decomposing price series to see what they are made off, to then design trading strategies based on what was found, I simply reconstructed price series from scratch using stochastic equations.

The core program has not changed, courtesy of the original authors. I simply repurposed the code to make it a scenario builder. It gave the ability to reconstruct millions of portfolios composed of randomly generated stock prices.

Evidently, you could also generate the following, (figure 8.3) from the book::

It draws quite a different conclusion. It says that without some upside bias, whatever its origin, the expected outcome is ZERO. All 20,000 portfolios landed in that small dot in zero land. In fact saying: no edge, no candy. It was totally expected since that was exactly the answer the optimizer had to give, which it did.

There is much to learn from the elaboration of all the tests performed. What you will find in the book is a coherent structured ecosystem where everything is turned into equations. And an equal sign is a powerful statement even in a randomly generated trading environment.

Hope you will find it more than interesting. It could change your perception of things, even if you already know all that will be presented. Its long-term perspective might help change your own perception on how to win the game. It is an innovative approach anchored in simplicity and common sense.

Finally, my book is out: Beyond the Efficient Frontier

The most basic principle for a stock portfolio to consider is not its trading methods, but its expected survival over the long term.

Whatever the strategy, if it is not made to last and blows up in your face, then it is not “good”, and should not be pursued. That should sound like evident. Then, why plan for trading strategies that only look a few days to a few months ahead? Shouldn't you plan for the long term and know how to get there?

Whatever the type of distribution stock prices have, they will show some mean value and variance. That it be Paretian with fat tails, or normal as Gaussian, there is a point on these bell-shaped curves where we say: >0, and <0. That point is usually close to a 50/50 proposition making it close to a coin flip. On such a contraption, whatever the betting system, the expected value is zero. You can win the game, but the only factor that would be related to your gains would be entirely due to luck of the draw, nothing else.

When you look at stock prices from up close, what you see is also almost random with close to 50/50 odds. There is not much of an “edge” available, even if, over the long term, the market is more like a 52/48 to 54/46 coin flipper.

At the right edge of a price chart, this long-term edge is clearly not visible. And yet, we have to make that “guess” anyway since seeking a profit will require as a minimum: \(\Delta p > 0\).

In my book, chart prices are reconstructed from a simple stochastic representation using: \(p_j(t) = \mu_j dt + \sigma_j dW_j\) representing a randomly generated price series to which is added some long-term drift.

Such a chart could look like the following:

The price chart was randomly generated using: \(np.random.randn(nassets, nobs)\), therefore, that part is 50/50. There is nothing to be gained from it. Its expectancy is zero.

The applied drift was set at 0.0002, that is \(0.0002 \cdot \sigma\), a fraction of the normal standard deviation which was set to 1.0 by the above line of code. That resulted in the top line on the chart which includes the drift.

You could have viewed millions of such charts, they would all be built on the same principles and if you removed the long-term drift, you would be back with the Wiener process with no predictability available whatsoever.

The program's optimizer could detect that small long-term upward drift and react accordingly. If you designed millions and millions of such portfolios, they would ALL prove profitable. Not by chance, but by construction and due to the long-term drift.

A 0.0002 drift is equivalent to a 2 cent move on a \(\$\)100 stock. It is why at the start of the above chart it is not perceptible. That is an upside of 10 cents a week on this \(\$\)100 stock, or \(\$\)5.04 a year. Yet, the optimizer could detect that with ease and made the millions of portfolios profitable.

Since we do know that the US stock market has had a long-term drift of about 10\(\%\) over the last 200+ years, we might assume that it could maintain a positive stance over the long term going forward. The equivalent of Mr. Buffett's bet on America.

Now, say you have factors that correlate to the price movement and could have some predictive powers. Meaning that after a bet, you consistently get \(\Delta \bar p > 0\) for the majority of your bets indicating and expressing the predictive powers of those factors.

A simple question: how much of those factors are simply catching the underlying drift? It did not disappear because you changed your looking glasses and now view this trend as composed of factors. And if your factors do not predict more than the drift itself, are they any good?

Some trading decisions are made outside a trading strategy's program and then implemented in code. Some have more impact than others.

For instance, one such decision is the number of stocks to be traded.

Usually, we just set a number (10, 50, 100, 200+) or whatever. But, this number can have a tremendous impact on overall performance and how a portfolio will behave in general.

As you increase the number of stocks in your portfolio, you are reducing the impact it can have on the whole. You are reducing the portfolio weights.

This has for side effect of reducing overall portfolio volatility and the size of portfolio bets. The easiest way to reduce volatility, therefore, without doing anything special, would be to increase the number of stocks to be traded.

Since volatility is tied to risk, this would reduce overall portfolio risk. A simple number that you do not even let your program decide since you will impose it in code right from the start and might even treat it as a constant.

Another view of the same number is the resulting weights themselves. For example, in my book, I have the following chart (figure 6.10):

Random Weights

It is the notebook result of having 5,000 portfolios with 5 stocks each and a 0.0002 reading for both the drift and alpha. A long-term upward trend of about 4 cents per day on a \(\$\)100 stock, equivalent to about a 10\(\%\) per year average return (market's secular trend).

However, should you change one line of code, keeping everything else the same and under the same conditions, the picture will change. Instead of leaving the portfolio weights being determined at random like in the notebook, you switch to a constant weight using: \(k = np.ones(n)\) (in the portfolio generation module). This replacing the line \(k = np.random.rand(n)\).

This gave you the following picture:

Equal Weights

Instead of having weights randomly set, the weights were all made equal. This should be considered as a dramatic impact. The 5,000 randomly generated portfolios all behaved the same and landed on the same spot on the chart. It meant that your choice of picking the best performer out of the 5,000 was not even a bet since whatever your choice (yellow dot), it would have been the same result as any other.

This is something else to think about when you design your trading strategies. Some numbers have more impact than others even if they are not controlled by the program, but more like part of some procedure, policy or trading methodology.

Those two charts use the same optimizer in the same fashion, only the weighing is different. One is randomly weighted while the other uses fixed-weights. Yet, they say quite a different story.

On the first chart, you took your chances, the yellow dot could have been any one of the blue dots. Literally, you had 1 chance in 5,000 to get the best performing portfolio. While in the second chart, you had an assurance of selecting the best since you did not have other alternatives. All this just for considering portfolio weights as either fix or random.

What’s the argument? To choose fixed weights over random weights? I don’t know that anyone in their right minds would ever choose random weights? Shouldn’t the baseline for any “improved” weighing scheme be fixed weights? That fixed weights are always better than random, if you have a predictive model (or even if you’re just long the market), I thought was already a given.

@Joakim, the argumentation on this is a bit more complex, yet simple, and sublime.

At its heart is the stock allocation problem. How much should we put on each stock in a portfolio at any one time?

We know that all stocks are not created equal. So, why should we treat them as such?

The answer would be: only if we do not know what is coming our way. Then, equal weights might sound like a reasonable course of action, or is it, or why not? It sure is easy to set up!

However, if we try to make predictive strategies, then, these weights should proportionally follow these predictions in order to optimize performance. The higher the predictive edge, the higher the allocation, the higher the bet size, the higher the relative portfolio weights. Resulting in the highest weights on the highest performers and the lowest weights on the nonperformers. Thereby, maximizing performance. So, equal weights, technically bad, a cop out.

If we do not know how predictive our “predictions” are, then, again, it might be reasonable to fall back on the equal weight scenario. But, by doing so, we are admitting indirectly that there might be no predictive power in the methodology used.

It would explain why one would revert back to equal weights which might not be the best solution since again all stocks would be treated with equal opportunities. Treating AAPL and BB on the same footing might not be a reasonable bet going forward since BB might not even survive. On the same basis, comparing AMZN, WMT, JCP, and SHLD some 10 years ago, where should you have put your bets then and in what proportions relative to a portfolio of 50, 100 or more stocks?

The important consideration here is that the program offers the optimizer only two types of return matrices, either with random or equal weights. In both cases, the sum of weights equal 1 (\(\sum \omega_j = 1\)), meaning total allocation, and that is more important than it seems. We only have to look at the two charts to see there can be quite a difference in behavior between equal and random weights.

Which one is better is a totally different question?

All stocks are not created equal and do not behave the same. Therefore, there is no good reason to use equal weights, or maybe, random weights for that matter. Equal weights are often used as the lazy solution (the I do not know solution). Random weights are used for their luck factor, while a more organized weighting system would be on forecasted merits with reinforcements. But, as in anything else, to each his own.

If in the notebook, you set a seed, then the equal weight scenario will give the same answer every time. It would have frozen the selected set of stocks to that one in an infinite stock universe, similar to real life historical price records. If we use random weights, then the optimizer's response will be different every time for the selected portfolio (yellow dot). But, it would still generate the same average portfolio return for the average portfolio.

In reality, the question should be in simulating portfolio scenarios: do we use a seed or not? If we use one, we create a repeatable and unique stock universe out of gazillions of possible subsets. A subset of randomly generated prices series that will behave the same every time, and on which we could apply all types of trading strategies and refine them up to the point that they are highly productive.

However, that would apply to that particular seed. Changing the seed would change the selected stock subset, and all those trading strategies might fail due to a new seed or by commenting out that one line of code.

Whereas, with no seed, whatever program you might want to devise will require to directly address the issue of randomness and what to do with it.

For instance, in a no seed scenario, where return series are randomly generated, I would prefer the random weights. By simple luck of the draw, it might outperform the equal weight scenario by allocating more weight to a higher performing stock or giving a lesser weight to a lower performer. In both cases, doing better than the equal weight scenario where the higher performers will be dampened to the average while the lesser performer would be raised to average weight. In both cases, a lower performing portfolio.

The no seed scenario is closer to reality since most of the future remains an unknown. Notwithstanding, we are playing a numbers game where you can change the rules of engagement.

In my book (see previous post), a strategy's payoff matrix is given as: \(\sum_i (\mathbf{H}_a \cdot \Delta \mathbf{P}_a )= n \cdot u \cdot \overline{PT}\) which transforms the whole portfolio trading environment to just a few numbers.

It is also shown that it is sufficient to have the following to outperform the averages: \(\sum_i (\mathbf{H}_a \cdot \Delta \mathbf{P}_a = n \cdot u \cdot (1 + \mu + \alpha)^t \cdot \overline{PT}\) where the alpha is the skills you bring to the game. I can say there are many ways to achieve this. Nonetheless, it does also say that your bet size will or needs to increase with time.

This is what is displayed in the two charts in the previous post. So, why the difference?

What the last chart reveals is that the optimizer is doing its job and that you are dealing with normalized price series with a zero expectancy. On the random weights, the optimizer always had adjustments to make which were translated into all those portfolios spread all over the place (the first chart). This not due to the randomness of the price series, but due to the randomness of the weights which would still average out to the same value as the equal weights.

By making the weights equal, the optimizer had nothing left to optimize. And all it could find was the same \( \mu\) and \( \alpha\) for each of the stocks, thereby confirming that the random-like component has a zero expectancy, which it has. This is major. It demonstrates that the equation is right. The last equation is stating that you can have a rising CAGR if you can provide some alpha! Such a statement is in contradiction to the law of diminishing returns. But this does not make it wrong. Some of the charts presented do corroborate those findings, the equations prevail.

It was not discussed how we should organize these portfolio weights since the subject was not even explored. And, one does not have to be out of their mind to use random weights either, it is what the original notebook used, and it was acceptable for the point they wanted to make.

Furthermore, in the no seed scenarios, random weights become, more often than not, a better and more desirable alternative since often being more productive profit wise, and with lower volatility.

From Quantopian's Lecture 32, we have the following equation:

$$R_{a,t} = a_t + b_{a,F_1}F_1 + b_{a, F_2}F_2 + \dots + b_{a, F_K}F_K$$

It breaks down the return stream into weighted factors. As you add factors, the equation gets closer and closer to the realized return stream (as an increasing R-squared would indicate). It would look somewhat like the following time series which was randomly generated to simulate price movements.

Random Price Model With Multiple Factors

What the chart says is that as you increase the number of factors, the equations represent more and more the average underlying price movement. Even if the price series was randomly generated, we do get smooth lines representing the average. As we increase the number of factors, the R-squared value is increasing as it should.

Whatever was prior to that chart, or after it for that matter, had no relevance since the chart was randomly generated. The first 5 factors in that chart were sufficient to reach 90.85% for its coefficient of determination. It means that if you added more factors, they would have to take a fraction of what is left.

But already, as you added factors, the values changed. If you wanted to use 4 factors, you had: \(y = 49,227 \,–\, 0.0069x \,+ 7E^{-05}x^2 - 4E^{-08}x^3 + 6E^{-12}x^4 \quad \quad \) with an R-squared of 0.8886. By adding one more factor (5 factors) you got:
\(y = 43,506 + 0.0501x - 7E^{-05}x^2 + 8E^{-08}x^3 - 4E^{-11}x^4 + 6E^{-15}x^5 \) with its R-squared of 0.9085.

Just by adding a factor, going from 4 to 5, changed the \(x^2\) term from positive to negative. What was that? If your \(x^2\) factor had some relevance, should it not have at least stayed positive?

Nothing on that chart could say that there would be any continuation, either before or after. The easy demonstration would be to provide the prior 3,000 data points with their relative factors.

Random Price Model With Prior Multiple Factors

The first chart was a continuation of the above chart. It only displays a different section of the same time series.

A price time series does not generate alpha. Nonetheless, you can gain some alpha from the selection process itself by picking stock that perform better than the averages. But this could be from your expertise and knowledge, or simply by luck of the draw. As in: lucky you, you picked a good one.

But trading adds another dimension to the problem. It is like trying to predict sections of the presented curves from what is always the right edge of a chart. At any one point, could you predict the next step, or the one 10 or 100 steps ahead? That is the big question. The answer should be: certainly not in this kind of randomly generated trading environment. No matter how many factors you want to throw in the rink.

The Secular Long-Term Drift

What was demonstrated in my latest book ([Beyond the Efficient Frontier][1]) was that the market's average secular trend could be considered as sufficient to explain most of the general underlying long-term price movement in stock prices. To make the demonstration, price series were not decomposed into various factors, but simply reconstructed from scratch using an old stochastic model that has been in use for decades.

Even as a rough approximation to the real thing, it was sufficient to extract similarities between millions of simulated portfolios using randomly generated price series and portfolios that would be composed of live market data. Thus, providing some statistics on their similarities.

The stochastic equation used is simple: \(F(t) = F(0) (1 + µdt + σdW)^t\) which states that the funds put to work start at their initial value to which is applied a compounding long-term rate of return that is allowed to randomly fluctuate with time.

When you take off the stochastic part which tends to zero over the long term anyway, you can reduce the equation to: \(F(t) = F(0) (1 + r_m)^t\) which gives the long-term market CAGR. For the past 240+ years, the average US market trend (\(r_m\) ) amounted to a little less than a 10% CAGR, dividends included. That is if you participated for 30 years or more. Therefore, we should not be surprised if it became the long-term expectancy for fund indexers and active players alike. As if saying that achieving less should not even be an option.

To reach that conclusion, the book rebuilt tons of portfolios of randomly generated price series. Using the supplied program, millions of portfolios could be generated using a Python one-liner: return_vec = np.random.randn(n_assets, n_obs) which generated normally distributed return series for each asset for the desired number of observations which for simulation purposes were calibrated into day equivalent price movements.

Thereby, you could recreate portfolios of any size for any duration enabling the study of their characteristics and idiosyncrasies. All price time series were considered on the same level since they were constructed on the basis of percent change from period to period. A 10% move in any one stock is still a 10% move, no matter its price. Doing this normalized all price series.

Also, since no seed was used in the random number generator, all price series would be unique as if taken from an infinite stock universe and thereby making each portfolio unique with no chance of ever having a duplicate price series or portfolio. The interest would be on their averaged behavior over time, their expected outcomes.

The No Secular Trend Scenario

First, consider the scenario without a trend (µdt). You would be left with the random-like component as the only source of return: \(F(t) = F(0) (1 + σdW)^t\). We might think that the first property of such portfolios would be their unpredictability, but we already know their average expectancy, and therefore, could predict, almost surely, that it would tend to F(0). This was by construction with for consequence no expected long-term profits since the sum of the random fluctuations (σdW) tended to zero: \(F(t) = F(0) (1 + 0)^t = F(0) \).

By design, the mean of each price series would tend to zero with a standard deviation of one. This implicitly meant that the average portfolio return ( \(r_m \)) would tend to zero. There was no profit expected from such a contraption. The sum of many zeros is still zero.

How could this be accomplished in real life trading? Simple, detrend all price series, what will be left is the random-like component. A trader is dealing all the time with the right edge of a price chart, and this will force adapting their game to the circumstances. As was explained in the book, at the right edge of a price chart, the trader is facing odds close to 50/50.

This also implied that none of the conventional tools we might use to predict what is coming next could be of any use. That you did 50,000 portfolios at a time with hundreds of stocks each, it would not change the general picture. The expected outcome would still be zero. You could not even predict, better than a 50/50 proposition if it would end on the positive or negative side of zero.

There is not much you can say about randomly generated time series, especially normally distributed return series. All you have is a Gaussian distribution with zero mean and a standard deviation of one. And yes, 99.7% of all the data will fall within 3 standard deviations.

There are no seasonalities, no periodicities, no patterns, no candle formations, no cycles or regime changes, no certainties that you can rely on as repetitive or otherwise. There evidently is no fundamental data, no bellwether series, no indicator that could provide a hint of predictability. You could always try to find those patterns and factors, and at times find some, but they would be, at best, coincidental occurrences of random events with again no real predictive powers.

There is no artificial intelligence, no deep learning, no signal processing, or other processes that could uncover whatever kind of predictability from a normally distributed return series. No wavelet thing, no Fibonacci, no fractals, no golden ratios, no moon cycle or Kondratieff wave. You could not count on Elliot waves or spectral analysis either. None of it has ever been of predictive usefulness on normally distributed return series. The reason is simple, none could.

It would be sufficient to carry out a few simulations in succession, using whatever trading method you want, to show that just changing the randomly generated price matrix would be enough to have all those methods break down. Running a new simulation only requires to rerun the program. Pressing and your well-intended trading strategy, like a house of cards, would collapse.

That it be on randomly generated simulation like those performed in the book or real future market data, both are close to a continuous chain of random-like events ready to unfold. In trading, what is important is to know what to do at the right edge of a price chart.

The Long-Term Trend

It is only when you add a long-term drift to the portfolio creation process that the picture changes. Refer to the first equation: \(F(t) = F(0) (1 + µdt + σdW)^t \).

The simulations showed it was sufficient to recreate portfolios with an average long-term trend to mimic the market average ( \(r_m \)). It had predictability since what was added was just a straight line (µdt) which was given values of: µdt = 0.0001dt, or 0.0002dt . A value of 0.0001dt was equivalent to a long-term upside bias of about 2.5% average return per year.

The long-term drift appeared sufficient to explain what was out there. As if saying: this is what is available. In a way, it does make some statistical sense. A stock portfolio would be like a sample taken from the whole available market. And on randomly generated portfolios taken from an infinite stock universe, whatever selection could be viewed as a sample from this infinite universe.

You want to play for the long term, then you should expect the market average for your efforts since it is the most probable outcome. But, even if indexing is big business, you can do better than market averages simply by adding trading to your portfolio building process. Adding skills and expertise (positive alpha) to your trading strategies can lead to even higher returns: \(F(t) = F(0) (1 + µdt + αdt + σdW)^t \) since this alpha is also compounding.

The long-term trend is acquired by being fully exposed to the market, and the skills (alpha) comes from what you put in the trading procedures you design.

[1]: https://www.amazon.com/dp/B07KGMZMPS

No one seems to want to consider how much randomness there is in stock prices. The question should be why? It might be the most important question of all. Even if not, it would still be more than worthwhile to investigate how much there is. Depending on the answer, it could simply force us to remodel or at least transform our trading strategies and the way we play the game.

The problem is: how should we define randomness in stock prices in the first place?

Do we go the martingale route, even if it does not apply, or define it as a Gaussian distribution with extras? We already know that stock price distributions are not normal or I.I.D., but more like some Paretian distribution thing with fat tails. Regardless, declaring it something or whatever will not change the nature of that randomness or make it more predictable?

In stock trading, it is what you do at or from the right edge of a price chart that matters. If you are not in the market, all you can express are lost opportunities. It is following your decision to enter into a trade at a chart's right edge that your profit or loss starts to accumulate.

You might find and define stock pattern over past data, but when it goes to playing the game, you will have to declare those patterns before they occur, not after where you cannot profit from them since you will again be at the right edge of the price chart.

One thing that is almost for sure, the stock price will not remain idle over extended periods of time. You will not get: p(t) = p(0), therefore, forget about the martingale. You might cross p(0) many times, but most probably, as time increases, you will get further and further away from p(0), either on the positive or negative side. Stock prices can go up for decades just as they can drop to nothingness in a hurry. In either of those scenarios did they mean-reverse.

It goes like this: if you do not address the notion of randomness in your trading strategy, does it go away? Can it be ignored!!!

Should we see this trading game as a 50/50 I.I.D. proposition? Then, most likely, we will have to consider that what we are looking at is basically gambling with no assurance of an immediate or long-term payoff.

Gambling away does not necessarily mean you lose the game. It only says that you are gambling. And therefore, might still win the game by chance. Not as an inherently bad proposition, but more from what will be a multitude of 50/50 bets with their mathematical, statistical built-in expectations and consequences.

Any bell-shaped distribution might appear as close to a 50/50 proposition, even a Paretian distribution with fat tails. This is what we are faced with when trading, our next decision will be as if at the right edge of that price chart. As if asking the question: will it be heads or tails?

What is your risk on such a proposition? Not much. Your long-term expectancy is zero. Therefore, no win, no loss. In all logic, in a no win no loss scenario, whatever risk there might be should be considered as minimal as long as you play for a long time and that your running stake far exceeds the variance boundaries of the game. This will require making small bets in order to survive any losing streaks of any length.

The all-in scenario on every bet will nonetheless assure you to lose the game. You could invest for the long term that way but should not trade in that fashion. Full market exposure, for a trader, should be defined as using many small bets. Whatever your betting system, it is like a series of returns and could be expressed as: \(F_0 \cdot r_j(t) = F_0 \cdot \prod (1 + r_i) \) for \( i = 1, \dots, n\), and where if \(\exists r_i = -1 \) will result in: \(F_0 \cdot r_j(t) = 0\).

If there is a fee to play the game, then, in all probabilities, you have a negative proposition where you are bound to lose the longer you play. What you might get out of such a game is simple too: some form of entertainment you have paid for. It is just like a little hamster on his running wheel, just running to nowhere at whatever the speed.

That you model price movements to stochastic equations does not change the nature of the problem. The randomness does not go away.

In the last notebook, a Python one-liner: return_vec = np.random.randn(n_assets, n_obs) generated normally distributed return series with mean zero and standard deviation of one.

The optimizer used in that notebook was able to extract even low drift values. To start moving the scale, it was sufficient to add a drift with a magnitude of \(0.0001σdt\). That is 0.01% of the considered standard deviation (σ) of one. Doing so, moved the distribution's average expected mean from zero to \(0.0001σdt\). To gain a sense of its magnitude, it is like adding one cent per day to a $100 dollar stock that had an average $1.00 standard deviation. With the vast majority of its price moves (99.7%) within +/- $3.00 (+/- 3σ).

A 2-cent upward drift per day on the same $100 dollar stock looks insignificant. And yet, it was sufficient to explain the long-term upward drift on randomly generated stock prices. The added drift had for impact: \(r_j(t) = r_j{_{_0}} + (\mu_j + 0.0002 \sigma_j ) dt + \sigma_j dW_j\).

The mean (µ) was set to zero and sigma (σ) set to one by construction. While the initial rate of return at the intercept was zero at time t = 0: \( r_j{_{_0}} = 0 \). Thereby, leaving: \(r_j(t) = (0.0002 \sigma_j ) dt + \sigma_j dW_j\) which explains the stochastic equation in terms of sigma and its Wiener process. Making the \(0.0002σdt\) the most significant part since the impact over the long term from the Wiener process would tend to zero.

My latest book stresses the fact that if you could extract more than what the market has to offer, it would require that you increase the \(0.0002σdt\) part of the equation or add something to it. It would be this excess which would translate into alpha. Already, the \(0.0002σdt\) upward drift appears as if built-in. Even if you could factor it out, it would remain as if the average secular upward trend we see, on average, in stock prices.

If we raised the average long-term rate of return to \(0.0004σdt\), then we would declare the added \(0.0002σdt\) as alpha. These are not big moves. A \(0.0001σdt\) is about 2.5% per year on a $100 dollar stock. But then again, the game is compounding over time. And one thing the book does demonstrate is that a little alpha can go a long way.

What has been presented, thus far, is a major departure from the traditional way we look at stock price series. Even with all the models we design, some of the classic stuff can still be upgraded or improved upon. Such is the case with the stochastic model that has been in use for over a century.

The change in itself could be considered minor. In some cases it is, and often not that visible. Nonetheless, there is a major difference even if it all looks like similar equations.

The classic vision is based on the following equation: \(r_j(t) = r_j{_{_0}} + \mu_j dt + \sigma_j dW_j\) where you have an intercept with a linear drift and a random-like Wiener process which defines the return stream for a particular stock \(j\) (a straight regression line to which is added some random stuff as residuals having a near zero expectancy).

It could be used to approximate a portfolio's future value: \(F(t) = F_0(1+\bar r_j(t))^t\) where \(\bar r_j(t)\) would be the market's average long-term CAGR. Evidently, \(\bar r_j(t)\) would be swinging all over the place. It would depend on when, (at \(t\)), the measurement would be taken. The CAGR formula is simple: \( (F(t) \div F_0)^{1/t} – 1 = \bar r_j\). Whatever the portfolio's future value, you can get its CAGR or at least make an estimate of the return required to get there.

We could also factor it out such as: \(r_j(t) = a_{t=0} \cdot (1 + b_{a,F_1}F_1 + b_{a, F_2}F_2 + \dots + b_{a, F_K}F_K)^t\) where the sum of these weighted factors would need to correspond to the following: \(\mu_j dt + \sigma_j dW_j = b_{a,F_1}F_1 + b_{a, F_2}F_2 + \dots + b_{a, F_K}F_K\) since the return stream \(r_j(t)\) is the same.

No matter how many factors you want to extract, only the first few might have some value since you are faced with a power law. Nonetheless, most of it would correspond to the \(\mu_j dt \) part of the equation. All other factors would be trying to extract something from it and the random-like component of the stochastic equation.

Since \( \sum \sigma_j dW_j \to 0 \) over the long term, this would tend to annihilate the cumulative value of all the other factors: \( \sum (b_{a, F_2}F_2 + \dots + b_{a, F_K}F_K) \to 0\). The more factors you would consider, the less each one would contribute to the whole. It would be like trying to give more and more significance to the random-like component of the stochastic equation.

Should you predict: \(\tilde \mu_j dt \), should it really be considered a prediction? You would tend to get the market's average return \(\bar r_j dt \) just for participating in the game. The easiest way to get it is to buy a low-cost index fund and wait.

If your prediction produces less than \(\bar r_j dt \), can we still declare that a prediction? How about if the factors you extracted summed to less than \(\mu_j dt + \sigma_j dW_j\)? Are you not just extracting part of what is the same thing and that you simply defined differently?

Also, one should not consider that there is some alpha hidden in \(\bar r_j dt \). There certainly is no alpha in the random-like side of the equation and this by definition. The sum of all the factors you would like to extract cannot go beyond. As if putting a limiting barrier to what could be extracted. Is it not saying that what all those factors could extract is limited by the secular trend \(\bar r_j dt \)?

You are getting your expected CAGR \(\hat r_j dt \) simply by taking a stock sample from the market's huge population, a statistical problem. Buying SPY which in itself is a collection of stocks can only produce SPY's CAGR or something close to it since some of the weighing will change with time. But, you will not get more than what it is, no matter how you would want to factor things out.

Where is the Alpha?

It is with a “trading” trading strategy that you can generate some alpha.

Look at an alpha augmented equation, as is being proposed. It can accommodate the impact trading, investing, and portfolio management skills could have on the overall return: $$r_j(t) = r_j{_{_0}} + \mu_j dt + \alpha_j dt + \sigma_j dW_j$$ Evidently, on the condition that there were positively impacting skills to be had. This excess return stream will need to be seen in the portfolio's payoff matrix. Otherwise, how could you say you had some?

If the alpha is zero (\(\alpha_j = 0\)), the above equation reverts to the first one. The one we have been accustomed to for ages. If the alpha is negative, (\(\alpha_j < 0\)), then your actions are technically harming your portfolio by generating less than it should. Meaning that without your trading intervention it would produce more. A smoother way of saying you are the one screwing it up.

The above equation is considering skills as part of the return stream. This alpha can be positive or negative, meaning that in some cases, those skills can even be detrimental to a portfolio's well-being.

If you do a Buy \(&\) Hold, then the classic equation covers it all. However, for an active portfolio, trading happens, and as a consequence, the augmented equation is more appropriate. It will account for the trading skills applied, that they have a positive or negative impact.

Once in a while, someone writes stuff that is there to force us to reconsider the very foundations on which we are building our stock portfolios. Going as far as changing the equations which supported those theoretical frameworks for decades. And yet, nobody seems to notice due to the slow diffusion process used in the dissemination of these ideas.

Modern Portfolio Theory depends on the EMH (Efficient Market Hypothesis) and will state that the most efficient portfolio resides on the efficient frontier, and is tangential to it. It represents the optimal market portfolio. But, that is for the Buy \(&\) Holder where stock selection will need to dominate. However, for a trading portfolio, the alpha augmented equation is more appropriate and represents better the efforts put in all the trading activity. My latest book elaborates a lot on this.

MPT has been ingrained in the financial literature for decades to such an extent that practically no one even questions the foundations on which these principles were established. Not that they are not acceptable as some basic foundation, but only in the sense that you can do better. It is not a significant departure from what is there. It should be considered simply as building on everyone else's shoulders.

It might not make that much of a difference in the short term, but it will make quite a difference over the long term since the added positive alpha is compounding, as in: \(F_j(t) \cdot (1 + \bar r_j(t))^t = F_j{_{_0}} \cdot (1 + \mu_j + \alpha_j)^t\).

Is It Overfitted Or Misfitted?

The notion of overfitting and over-optimizing in automated stock trading strategies has been over-documented in the financial literature for quite some time. What I often see however are poorly designed trading strategies that should be better classified simply as misfitted and using worthless concepts or trading procedures for the job.

In a nutshell, an “automated” stock trading strategy says: this is how I see the structure of this trading environment. My program will do this and that, ..., and will win the game.

Some consider a trading program well designed if it does not crash. It most certainly is not enough! In reality, and often, we should ask the question: how could the program's developer ever design such a piece of crap? Doesn't he/she know better? Elementary tests would have revealed that there was nothing there, yet they still put it in our faces anyway. These misfitted programs can become quite expensive due to the subsequent losses they may incur.

When these misfitted programs fail, they get reclassified as training frameworks or for educational purposes only. I usually classify those as double whammy programs: you paid for them upfront, and then you pay again even more by using them.

Poorly designed trading strategies usually do not work so well going forward. Take it as a euphemism. The reason should be more than obvious. Yet, most still want to qualify them as if they did work under specific circumstances over some selected past data from which they then get their over-optimized or overfitted qualifiers.

But when you dig deeper into the code (should you be able to see the code) you can find the faults, the unsubstantiated claims and premises, the misconceptions, the blurry math and misunderstanding of what they are really doing in code. The code will work since the program has been debugged but will fail to generate the level of expected profits which were supposed to be the program's raison d'être.

It is only after such trading strategies fail to deliver according to their design that they inherit the overfitted moniker as some form of consolation, usually after much is lost.

The misfitted strategy was bad from the start (had no real foundation in reality) which is why it also did not work going forward either. All it gets as reprimand is that it somehow overdid it, as if a slight exaggeration, or that some market regime has changed. Anything, as long as the strategy itself is not to blame. As if the machine used or the market was the culprit for the program being literally worthless. How could the author of the program be responsible for that anyway?

A misfitted trading strategy is simply that: a misfitted strategy. It does not need other qualifiers, it was just badly designed. A program wants the market to do this and that, the market does not, and it is the fault of the market. Come on... do put the horse before the cart.

We use past data to give us an idea of how our programs will work. But there is no money in that. They are just simulations over past data. What counts is what those programs will do going forward, not in out of sample testing where no money is involved, but in real life under real-life conditions. That is what our programs will have to face, then design them accordingly.

A Buy & Hold strategy, for instance, would qualify as fitting the market as is. It would be in a 1:1 relationship. It would be like saying that buying SPY and holding for a long time you would get SPY's return whatever it might be. You could translate this to: \(F_0 \cdot ( 1 + r_{{SPY}} )^t\). Except that, going forward, you do not know what \( r{_{SPY}} \) will be? And it matters. However, one thing you do know, it will be close to the actual long-term market averages, giving it time.

Should you want to do better than holding SPY, you will then need to slice and dice the time series in such a way as to produce more. And it is here that a trading strategy needs to show its merits. It should be considered worthwhile only if the profits generated from trading resulted in a higher CAGR than just holding SPY. $$F_0 + \sum (H \cdot \Delta P) > F_0 \cdot ( 1 + \bar r_{_{SPY}} )^t$$Otherwise, you would appear to be losing the game by doing less than average. It will be about the same problem for any of the stocks in your portfolio.

Stock prices movements do not seem to follow strict rules that well. Another euphemism.

Trading Stocks Generate Its Own Problems – Part I

What does it take to win the stock trading game? It is not just a rhetorical question, but nonetheless, it does encapsulate a whole gambit of related questions from what is the game about to how to assure yourself you will, in fact, win the game.

First, the trading game is very very simple. You repeat the same one thing over and over again under uncertainty.

The game itself is too simple not to understand it within a few minutes. You buy some shares (\(q)\) of a selected stock: \( q ∙ p_{in} \) and resell them later at \( q ∙ p_{out} \). Your profit or loss on the trade will be: \( q ∙ \Delta p = \pm x. \) Trading implies repeatedly getting in and out of positions. And that is where the problem starts.

In a way, it is like any other business where you buy something to resell it later at a profit, that it be some merchandise, financial instrument, real estate or whatever. On any one transaction, you want it to terminate with a profit: \( \Delta p > 0 \) or \( x > 0. \) If you opt to hold the shares, you want them to appreciate over time and again show: \( \Delta p > 0. \)

The end result of trading is simple too: you just add up the outcome of all the trades taken (profits and losses) over the investment period: \( \sum^n_i x_i \) where \( i = 1, …, n \) identifies the trades by a numbered sequence as they occur.

A simple running total (your trading account liquidating balance) can keep track of where you are. It might not matter that much how you trade since in the end it will that sum: \( \sum^n_i x_i \) that will prevail, whatever that ending number may be. Therefore, why not plan for that outcome? Not by designing a trading strategy in the hope you will reach your goal \( \mathsf{E}[\sum^n_i x_i], \) but by designing one that will.

You can keep the shares you buy for as long as you want or more appropriately for as long as you can. For whatever reason, you can dispose of them at any time of your choosing, either at a profit or a loss. You can even hold until a stock goes bankrupt should you want to.

It is all your choice: which stocks you buy or sell, when you do, and in what quantity. Evidently, within the limits of your trading account. You can do all the trade decision-making yourself or let it be done by someone else: another trader, some firm, a computer program, even your own software program residing on some machine somewhere.

The trader has a few problems to solve, and they come with the job to be done. Meaning that it is because he trades that these problems will surface. In essence, the trader by his very actions is generating the problems that need to be solved.

One that is of importance is in the nature of the game played. The trader cannot just do one trade, which could last a few days, then go away and retire on his winnings. He will have to do many many trades especially if his bets are a small fraction of his ongoing equity and are of relatively short durations. Because they will be of short duration, they will bring with them other problems to be solved. If the trader wants to finish ahead, meaning win the game, then it will be required and essential that: \( \sum^n_i x_i > 0. \) A win, here and there, is not enough.

The tactical problem is that the game is played with real money. It is not a simple Monopoly game. It really involves our future and can have quite an impact that we do the job ourselves or delegate it to whatever other decision processes. What we will find out is that no matter what we choose as trading decision surrogate, it will always be our money that will be on the line. And we do not want to hear: do not pass GO, do not collect.

That you like it or not, there is some math in the game. All the trades you might do might not be the same, nonetheless, adding their respective outcomes is just an addition: \( \sum^n_i x_i, \) no matter how many trades there are or whatever their outcomes. And this is where you get into trouble. It is with the word: many.

The problem is that traders do not win all their trades. The words: certainty, assuredly, and for sure, are not part of the vocabulary. However, the words: might, could, hopefully, are sprinkled all over the place as in a probabilistic way, even when traders cannot give the odds on winning the next trade or in fact any of their trades.

The math is \( \sum^n_i x_i = (n - \lambda) ∙ \bar x_{+} + \lambda ∙ \bar x_{-}, \) where \(\lambda\) is the number of losing trades, and \( \bar x_{+} \) the average profit per winning trade, while \( \bar x_{-} \) is the average loss per losing trade. As \( (n - \lambda ) \) approaches \( \lambda, \) we can observe that the win rate is approaching 50\% which in a way is not that good for a trading system especially if \( \bar x_{+} \) is also approaching \( |\bar x_{-}| \). Since in such a case the total profit might tend to zero: \( \sum^n_i x_i \to 0. \) And, that is not a good way to build a long-term portfolio.

If you design your trading strategy to have an average profit on winning trades to be about equal to the average loss on your losing trades: \( \bar x_{+} \to |\bar x_{-}|, \) then you will only have your win rate to provide you with an edge: \( (n - \lambda) > \lambda, \) as in: \( (n - \lambda) / \lambda > 1. \)

The average profit \( \bar x_{+} \) is acting as the average profit target while \( \bar x_{-}, \) the average lose per trade, is behaving as the average stop loss for the trading strategy.

Whenever you run a software simulation of your trading strategy you will get these numbers as a consequence of all the trades taken as part of the aftergame statistical compilation, a snapshot of what your trading strategy did. Whereas, you should have programmed your strategy to work on those essential numbers to generate what you wanted. Since in the end all those strategies will show that those are the numbers that will matter, shouldn't we therefore concentrate on them first and foremost. You want to win, then design your automated trading strategy to do just that.

Trading Stocks Generate Its Own Problems – Part II

In Part I, it was shown that the following equation resumed the outcome of a trading strategy: \(\,\sum^n_i x_i = (n - \lambda) ∙ \bar x_{+} + \lambda ∙\bar x_{-},\,\) where \(\,\lambda\,\) was the number of losing trades, \(\,\bar x_{+}\,\) the average profit per winning trade, while \(\,\bar x_{-}\,\) was the average loss per losing trade. The equation says, of all the trades taken there will be \(\,\lambda\,\) losing trades with an average loss per trade of \(\,\bar x_{-}.\) The remaining trades will have an averaged positive outcome.

Each time a simulation is performed, those numbers become available for analysis and can help to statistically describe what the trading strategy has done over the period where it was applied. To know the average profit or loss per trade is simple, you take the sum of all profits and losses \(\,\sum^n_i x_i\,\) and divide it by \(\,n,\,\) the total number of trades. You know the average profit or loss \(\bar x\) will tend to some constant the more the number (\(n\)) of trades is large. A direct consequence of the Law of large numbers. You also know you will not win all the trades all the time, hence \(\,\lambda\).

Put the equation in Excel, it is not that complicated. Take some of your own simulation results. What it will show are some of the limits your trading strategy might have. Without knowing these limits, what kind of expectation could you extract from your strategy?

Following is a snapshot that could get you started. I used [Leo C's tearsheet][1] as an example since it had round_trips=True in its backtest analysis. Thanks, Leo.

Is presented a general section and an example from the cited Quantopian tearsheet. The first column increases the number of trades by a factor of 10. The win and loss rates determine the percentage of trades that finished with a profit or loss. The average win and average loss columns give the average amount won or lost per trade. The rest of the columns take the total profit \( \sum^n_i x_i \) to give the CAGR corresponding to the number of years it could have taken to get there. The yellow cells are used to build scenarios based on the equation at the top of the chart, the rest are formulas.

There Is Math To This Game

That we like it or not, there is math to this game.

The equation above prevails no matter what is the composition of your trading strategy. The above table says a lot. The more trades are performed (while keeping the same edge) and the shorter the time interval used to do the job, the better the CAGR.

Thereby saying, the number \(\,n\,\) of executed trades matters. And how long it takes to execute these trades matters too. It is like if you were in this race to terminate your \(\,n\,\) trades as fast as you possibly can.

Performance degrades very fast should you take longer to execute the same outcome as illustrated in the following chart which uses the \(\,n = 10,000\,\) line. It does say that the longer you take to execute all those trades, the lower the CAGR will be. And it degrades fast. Note that using another line will only change the scale, not the shape of the curve.

What should we take out of this? We should look at the numbers and figure out how we could improve on them no matter what our trading strategy may be. With all other things being equal, we could look at the problem from the point of view of one variable at a time. We increase the number of trades over the same time period, it improves the picture. We reduce \(\,\lambda\,\) the number of losing trades, we improve the end results. We compact those trades into shorter time intervals, that too will improve performance. We positively increase the spread (the strategy's edge) between our average win and average loss, it will also improve overall results.

These measures did not deal with the nature of the trading strategy, only its math and how it will end. The what we do to accomplish this task could be anything that shows its mark in a backtest, even if it is not related to the way we usually operate, as long as there is some logical reason for it to do what it does.

It might not even matter if you are operating of the fumes of white noise to get your performance as long as you get it and that there is some rationale that can justify your method of play. You want to game the game, go ahead, but know why you are doing it while keeping a long-term vision of the goals you want to reach. Gambling your way out based on your know-how is also admissible. Your trading account will not be able to tell the difference either way or which trading methods you used. In fact, it will not even care what you used to make the account grow. It will only tally the results one trade at a time.

If you modify your code and the number of trades is somehow reduced, the other variables in the equation will have to work harder to compensate. And if they do not, the strategy will degrade even faster. You are not in a search for some equilibrium, the real task is to maximize the outcome \( \sum^n_i x_i \) using whatever you have available and do the job as fast as you possibly can.

A simple question like: how do I increase the number of trades becomes important? You know it will have an impact if you do so, then it becomes your task to make it happen within the limitations of your trading account. A simple solution would be to do more of whatever your strategy is already doing which, on average, provided you with your positive edge.

For instance, under the same trading conditions as Leo's tearsheet, one could find ways to increase the number of trades per year. From the tearsheet charts, trading volume, exposure, number of trades are relatively constant. Therefore, and due to the size of the sample, we could use those numbers as averages to make projections on an annual basis.

Doing More

A few lines were added to the first chart as shown below:

It starts by converting to a per year basis (see "IF per year" line) where the number of trades is the average per year. Each year, the average outcome is added to its performance. We can still see the CAGR degrading over the years. This view is more realistic than the previous one since they do match what is coming out of the tearsheet. Therefore, the strategy, with no fault of its own, will see its CAGR degrade with time as if the strategy was breaking down when all that is needed would be to compensate for the deterioration.

To compensate the CAGR degradation, it appears sufficient, in this case, to increase the number of trades by 2.3\% per year. This is not a major move. It is adding over its first year 261 similar trades to its 11,353 (about 1 trade per day).

If the 2.3\% increase was sufficient to maintain the long-term CAGR, going to 5.0\% is enough to see the CAGR rise over the years. This is an expanding CAGR. The more you trade, the more you get while doing the same things as before. The trading strategy is not breaking down.

It is easy to compensate for long-term CAGR degradation. It can be done on any trading strategy. And if you wanted more, increase the number of trades even more as illustrated in the 10.0\% line.

It is all one's choice. You code your trading strategy to do what you want it to do while faced with uncertainty. Except that, you should want to organize everything in such a way that in the end, you will win no matter what.

This is far-reaching. For all those that think that all trading strategies must fail, well, think again. It is not necessarily true, except if you want it to. But, let it be said that it is your choice to compensate return degradation or not. You do not intend to do it, then be ready to accept the consequences. Your CAGR will degrade with time and to top it off by your own design. So, do not blame anything else or anybody else for the job you are not doing.

Not only can you compensate for the inherent CAGR decay seen in most trading strategies, but you can also reach the expanding CAGR level by finding more ways to increase \( \sum^n_i x_i \) and thereby compensate even more. This is covered in more detail in my book: [Building Your Stock Portfolio][2].

[1]: https://www.quantopian.com/posts/live-tearsheet-review-updated-1-dot-14-dot-19#5c3cdce2d5030e00404ea4e2
[2]: http://www.amazon.com/dp/B01MYCRVEG

To give a better perspective of the last chart presented in the previous post, here is an updated chart showing what some of the numbers imply. Of note, in the bottom panel, the column for the added average number of trades per day to achieve the last column which gives how much profits would have been generated over the 30-year interval.

For just a few added trades per day, one can change the picture considerably, profitwise. Even increase profits by 20 times.

Adding a few trades a day is not the only way to improve a strategy's outcome, but it certainly can help overall performance.

Trading Stocks Generate Its Own Problems – Part III

The stock market is not homogeneous. Therefore, why even think of treating it as such? All sectors are not equal, then why invest in each one equally? All stocks are not equal, then again, why use equal weights? At any one time, you can not predict that 50% of stocks will be going up while the other 50% will be going down and know which will do what. So, why go 50% longs and 50% shorts?

It does not make that much sense, unless, you have other motives or constraints you have to adhere to. And even under those conditions, the game remains a compounding return game, even if you want to treat otherwise.

An automated trading strategy usually means a large number of trades will be taken over some extended period of time. This tends to shorten the average trade interval considerably. As a consequence, the more all this trading will resemble gambling. Therefore, why not accept straight out that part of what we will do will be gambling and deal with it?

If your automated "quasi-gambling" trading strategy does 50,000+ trades over the course of 5 years does it not start to tell you something? At a minimum, you should be able to put some averages on the table related to the outcome of the various procedures taken by your trading strategy.

It should be evident that anyone can design crap. And, in fact, a lot do. But, YOU do not have to.

A trading system can be described using a simple expression: \( \sum^n_i x_i \), where you sum up the outcome of all the trades taken. It says: here is the total profit generated. Averaging is as easy: \(\frac{\sum^n_i x_i}{n} = \bar x\) which will give the average profit or loss per trade. In Leo's tearsheet (referenced in Part II), this number was: \(\$\)36.24 with \(n = 44,467\) trades.

The number of trades is big enough to declare it a large sample. A simple assumption would be to say: if the sample is representative of what was done and of what to expect, then you could extrapolate with some kind of confidence that your estimate might not be that far from what might be a future outcome. If that system was extended to have \(n = 100,000\) trades, we should expect for it to reach about: \(\$36.24 \cdot 100,000 = \$3,624,000\) in profits in \((47 \cdot 100,000) / 44,467 = 106\) months or 6.8 years, a little over twice as long. By then, its CAGR would have gone down from 3.9% to 3.6%. This, even when the average profit per trade remained constant. The strategy would appear as if it was breaking down.

Over time, however, the average profit per trade will actually decline. It will not remain stable or go up but decline and there are simple reasons for this. Even before designing a trading strategy, one should understand the math of the game and what is implied by all those equations. You put an equal sign on the table, that is a hard statement.

We need to go back to what makes a trading system profitable. If your trading strategy is designed in such a way as to see its CAGR decline over time, you have limited choices. Maybe compared to other trading methods it might remain acceptable due to its still positive CAGR as long as it is above a specific threshold for instance.

Part II showed that one could use a simple compensation technique (among others) not only to maintain a strategy's CAGR over time but also, most importantly, to make it rise with time. An expanding CAGR goes beyond the CAPM model. Is implied that the optimum portfolio resides outside and above the efficient frontier. It questions the very foundation of MPT which nonetheless might hold over the long term for the Buy & Holder. But simply because you are trading, you can jump over this line in the sand called the efficient frontier. Over the short term, a theory such as MPT might show itself to be like some Swiss cheese, full of holes.

The following chart has been presented before (over a year ago) and still holds.

You want to do more than the expected outcome (market portfolio), then you will have to do more. It is not by doing the same as everyone else that you will outperform them. All you will do is only get close to what they do. This means getting close the long-term market averages.

If it is what you want to do, then nobody can stop you, but also at the same time, you are not providing any kind of motivation or incentive to adopt your average CAGR when almost everybody else can already offer the same.

Trading Stocks Generate Its Own Problems – Part IV

Reducing the Trading Interval

As you reduce the average trade interval for the average trade, its potential average return is also reduced. But this can be compensated by the sheer number of trades that can be made with positive results. There are a lot more 1\% moves on a daily basis than there are 10\% moves. In the first case, you will find hundreds of them every trading day while in the second you could count them with both hands. Also, those 10+\% moves appear more as outliers and are much more difficult to predict or anticipate. Whereas, a 1% move can be had, on a daily basis, on about a quarter of the listed stocks, meaning opportunities abound.

If there are so many opportunities, then why is there no one with extraordinary results? Already, 1% a day would translate to \((1+0.01)^{252} = 1,227.4\%\) a year. Yet, you do not see any of that anywhere. Why is that so?

The most plausible reason would be related to the notion that most trade forecasters are not that good at it. And when you look at it closer, you might, in fact, find it is the most plausible excuse for non-performance. Actually, most forecasters have a hard time exceeding long-term market averages.

If you get the average or less, it is like if you were faced with randomness. All you can grab would be any kind of underlying long-term trend.

If you play a heads or tails game with a biased coin 52:48, no matter how you would play, you should expect to average out at 52:48 too. The bias would be transferred to you even if your bets were determined by a fair coin. You would expect to get less if you insisted on playing tails all the time. Could you get more than 52 by playing heads only? Yes, but by luck of the draw. No skills required. But then, you might need to know that the coin was indeed biased to the upside.

Nonetheless, in a 52:48 game, you are still expected to get it wrong 48 times out of 100, or 480 out of 1,000 or 24,000 times out of 50,000. Get the picture! In Leo's case (see tearsheet cited in Part II), the wins to losses came in at 48.98:51.02 indicating something close enough to random that you could not distinguish it from random. Could we assume that over the trading interval the bias was more like 49:51? Probably. Could it be that the method of play resulted in 49:51 even if the game was 52:48? Possible. Taking another trading interval, the results could and would be different.

When the actual signal is buried deep in the surrounding noise, there are not that many tools that will help you extract that signal, determine its magnitude, and in the case of stock prices, its direction. The distribution of price variation and thereby their percent change could be any type of distribution with a mean approaching zero but not necessarily zero. Something like an off-centered Paretian distribution with fat tails.

The problem, short-term, is that we do not know what tomorrow will bring. If your portfolio is composed of some 500 stocks that you follow on a daily basis, there is no way of knowing which of those stocks will go up or down and by how much. The most expected change is close to zero. Regardless, you want to play the game, then you should plan and play to win.

A Trading Strategy in Numbers

The end result of any trading strategy is: \( \sum^n_i x_i \). It states: add up all the profits and losses from all the trades taken over the entire trading interval. There are \(n\) numbers to add up, that's it. The average profit or loss per trade is this sum divided by \(n\): \(\frac{\sum^n_i x_i}{n} = \bar x\). It does not say how you got there, but it does say how much you made trading.

There are basic restrictions like at no time should you lose it all: \( \sum^n_i x_i < - F(t)\) where \(F(t)\) is your ongoing trading capital. The equity function would be: \( F(t) = F_0 + \sum^n_i x_i \). From it, we could express a drawdown restriction such as at all times have: \( F_0 + \sum^n_i x_i > 0.90 \cdot F(t). \,\) Thereby allowing at most a 10\% drawdown at any one time. However, doing so starts to limit what you can and cannot do. Added the fact that it might be difficult to do and bring with it other restrictions which would tend to curtail performance even more.

There should be no surprise if you increase the number of trades or increase the average profit per trade to see the outcome get larger. With an increased number of trades you have: \( \sum^{n+\kappa}_i x_i = (n + \kappa) \cdot \bar x > \sum^n_i x_i \,\) for \( \bar x > 0 \). Increasing the average profit per trade would result into: \( \,(1 + \phi) \cdot \sum^{n+\kappa}_i x_i > (n + \kappa) \cdot (1+ \phi) \cdot \bar x \,\) for \( \phi > 0 \). This has the same impact as improving the strategy's average edge per trade.

However, the real problem is that when we increase the number of trades it usually takes more time for the same trading strategy to do it. We will see a return degradation which can be expressed as a decaying function: \( \bar x \cdot e^{-\gamma t} \). The impact being a faster rate of decay for the trading strategy's CAGR (see Part II and III) resulting in: \( (n + \kappa) \cdot (1+ \phi) \cdot \bar x \cdot e^{-\gamma t} \). Even if you are adding more trades at what appears as the trading strategy's modus operandi. The strategy is still breaking down at a faster rate than anticipated.

A trading strategy could also be expressed in matrix notation as: \( \int_0^T H_a \, d P = \int_0^{n} H_a \, d P + \int_{n}^{n+\kappa} H_a \, d P \, \) where the same trading strategy \( H_a \) is applied from start to finish. Declaring \(n\) a stop time for the in-sample (IS) backtest, and \(\kappa\) the added trades viewed as part of a walk-forward or a further out-of-sample (OOS) validation period. Therefore, in matrix notation the equity curve would be: \( F(t) = F_0 + \int_0^{n} H_a \, d P + \int_{n}^{n+\kappa} H_a \, d P\).

As shown in Part III, \(\int_{n}^{n+\kappa} \mathbf{H}_a \, d\mathbf{P}\,\) will not sustain the strategy's CAGR since strategy \(\mathbf{H}_a\) was designed to produce an average number of trades per period, and that will not increase unless the strategy is changed or the market changes to accommodate this new perspective. As was proposed in the example provided in Part II, adding one trade per day was sufficient for the strategy to maintain its CAGR for over 30 years.

The question becomes: how will you capture trades to meet your objectives? What will be the underlying logic for the decision process?

Trading Stocks Generate Its Own Problems – Part V

Based on literature on designing stock trading strategies we should consider testing both an in-sample (IS) and an out-of-sample (OOS) trading interval before going live. Some even suggest another testing interval as an additional step after OOS to make sure that the trading strategy will not break down going forward.

But even that is not enough. As soon as a strategy will go live, its CAGR will start to decay. At the very least, trading strategies that are programmed to be linear will do so.

The following equation resumes the task to be done:
$$\int_0^T H_a \, dP = \int_0^{n} H_a \, dP + \int_{n}^{n+\kappa} H_a \, dP + \int_{n+\kappa}^{n+\kappa+\psi} H_a \, dP + \int_{n+\kappa+\psi}^{n+\kappa+\psi+\phi} H_a \, dP$$where the total task has been divided into four phases: IS + OOS + Paper Trading + Live Trading. It starts with the IS interval with its stopping time \(n\), is followed by the OOS interval up to \(\kappa\). From \(\kappa\) to \(\psi\) you have the paper trading phase which still does not produce any real cash in the trading account. It is only from \(n+\kappa+\psi\) that the trading strategy might go live. These are stopping times, numbers in the sequence of trades where you switch from one phase to next.

Every step of the way strategy \(H_a\) had to prove itself worthwhile. Yet, the market, at every step is evolving with periods of short uptrends and downtrends but still within a long-term upward bias.

That you base the stopping times on time intervals does not change the problem, it remains: $$\int_0^T H_a \, dP = \int_0^{t} H_a \, dP + \int_{t}^{t+\kappa} H_a \, dP + \int_{t+\kappa}^{t+\kappa+\psi} H_a \, dP + \int_{t+\kappa+\psi}^{t+\kappa+\psi+\phi} H_a \, dP$$where \(\, t, \, \kappa, \, \psi, \) and \( \phi\,\) are now time intervals.

There is only one phase that has importance, and it is the one that will be trading live (from \(\,{n+\kappa+\psi}\,\) or \(\,{t+\kappa+\psi}\,\) onward). All that precedes is just to give you the confidence needed to apply the trading strategy live. The last trading interval should be the longest trading interval, if not the one to last for a very long time. Should it break down going forward, then all that preceded it (IS, OOS, PT) was "technically" worthless and done for absolutely nothing at all. Even worse, you would have lost part if not all your initial trading capital as well.

This goes back to how do you detect and execute trades in such a manner that you fulfill your objectives when the only important part is the live trading phase?

We will ignore all the preliminary phases and concentrate on the live trading interval. \(\int_{n+\kappa+\psi}^TH_a \, dP = m \cdot \bar z.\, \) and declare \(m\) as the number of trades and \(\bar z\) as the average profit per trade. This has the same meaning as when using \( \, n \cdot \bar x \,\) in the general case.

Whatever the past, the live trading section will have its average profit per trade too. Its CAGR can be expressed as: \(\, \displaystyle{ [\frac{F_0 + m \cdot \bar z}{F_0}]^{1/t}-1} = CAGR.\, \) Or, put another way: \(\; m \cdot \bar z = F_0 \cdot ((1+CAGR)^t -1). \) The equation contains your initial stake, the achieved CAGR and time which are apparently the only things that matter. And it all translate to \(\,m \cdot \bar z.\)

Any combination of \(\,m \cdot \bar z\,\) that can satisfy the last equation is a solution to the desired CAGR. You want 20% CAGR for 20 years on $1,000,000. Then, \(\,m \cdot \bar z = \$37,337,600.\,\) We can immediately deduce that it will take more than one trade to get there, otherwise, \(\,\bar z\,\) alone will have to generate the \(\$37,337,600\) profit.

Doing 1,000,000 trades with a net average profit of \(\$37.34\) per trade could do the job. That is 198.4 trades per day. Let's use 200 trades per day for further exploration. This would make the initial bets equal to \(\$5,000\) each on which an average profit of 0.75% per trade would meet the objective. That is less than a 1% move per trade.

Any \(\,m \cdot \bar z\,\) combination meeting the objective qualifies whatever the trading strategy used to achieve them. You want to do it with one trade per month, then you will need an average return per month per trade of 15.56%. Look at the behavior of your trading strategy, determine what makes it tick and then find ways to increase not only \(\,m\,\) but \(\,\bar z\,\) as well.

Here is an old chart that illustrates this:

All points on the blue line have the same value: \( n \cdot \bar x.\) You can scale it to the level you want. The curve will stay the same. Whatever type of strategy that resides on that line produces the same outcome, the same trading account balance.

It makes those two numbers (\(\,n\,\) and \(\,\bar x\,\)) the most important ones of your trading strategy. It means that whatever your trading strategy does, it will end up with those two numbers. And therefore, all efforts should be extended to make them both as large as you can. The rest might just be window dressing, cosmetic code having no real impact on the final outcome.

You can get these two numbers using the round_trips=True option in your backtest analysis.

Trading Stocks Generate Its Own Problems – Part VI

You already know you will be faced with a lot of uncertainty as not to call it randomness, stochastic behavior or outright chaos. If you flip a fair coin to determine the next move on another fair coin, you should not be surprised if you get it right only about half the time.

Then why, when you see that you are getting about half of it right while trading can't you see that the thing you are betting against might be quasi-random with close to 50:50 odds? It is the only way for you to get it right about half the time, almost no matter what you do. If what you were facing was better than 50:50, then you most likely would be right more often and profit a lot more.

This forces us to reconsider the expression: \( \sum^n_i x_i \) since all \( x_i \)'s are not necessarily positive or equal.

Because we are not expected to win all the time, we are faced with more averages. We can use \( \bar x_{+}\) for the average profit of positive trades and \(\bar x_{-}\) for the average loss per losing trade. This leads to: \( \sum^n_i x_i = (n - \lambda) \cdot \bar x_{+} + \lambda \cdot \bar x_{-}, \,\) with \(\, 0 \leq \lambda \leq n.\,\) The trader can win only if: \(\,(n - \lambda) \cdot \bar x_{+} > |\lambda \cdot \bar x_{-}|\;\) or \(\displaystyle{\frac{(n - \lambda) \cdot \bar x_{+}}{\lambda \cdot |\bar x_{-}|} > 1}.\;\) The more this ratio will tend to 1: \(\displaystyle{\frac{(n - \lambda) \cdot \bar x_{+}}{\lambda \cdot |\bar x_{-}|} \to 1},\;\) the more we will have to rely on \((n - \lambda)\), the number of wins to provide an edge. If \(\,n = 2 \cdot \lambda \,\) or \(\, \lambda = n / 2, \,\) then you are left with almost nothing.

In a game with close to 50:50 odds where the normal distribution has a mean near zero, it would almost imply that within one standard deviation the losses out-balance the wins. This would mean that about 66% of trades simply cancel themselves out. And if you want to push even further, we could say the same thing for what is within 2 standard deviations from the mean. That would be 95% of trades cancel each other out. That is a terrible number for a trader. It nullifies most of the trader's work and to top it off he will also have to pay commissions on all of it. This happens because we trade, and somehow we have to face it.

This leaves the remaining 5% of trades to make a difference. It implies you would be good with fat tails, outliers which are much less predictable than the near-zero mean.

This should put the emphasis on the need to develop an edge and somehow move the mean above its near-zero expectation. Otherwise, you do not stand that much of a chance of assuring yourself that you will win the game. But then again, the gambler does not care about that either. He just wants to play whatever the outcome.

However, I want more than just the fun of the game. As was shown in the CAPM Revisited series of articles, not much is required to give your trading strategy an edge. One-hundredth of one standard deviation above the zero-mean was sufficient to carry the day. It could maintain a steady CAGR level for years and years. Two-hundredth of one standard deviation produced an increasing CAGR over the testing period. Therefore, stopping the return to decay can be done.

Averaging Trades

A trading strategy can be programmed to have a singular signature. For instance, trade a number of times per period. From Part V, the whole trading strategy was divided into four phases: IS + OOS + Paper Trading + Live Trading, each with their respective stopping times. The IS, OOS, and PT phases were used in the development process. First to debug the program, test it out-of-sample to then paper trade the strategy for some time. All of it leading to the live trading phase where real money would be on the table.

The following chart was taken from the backtest analysis of a trading strategy looking to participate in Quantopian's contest. What it shows is that it maintains about 840 positions per day, and that number remains constant over the 10-year period. The chart also says that the strategy is market neutral having as many longs as it has shorts for the duration.

The chart below, from the same backtest, reveals that the daily turnover was relatively constant over the 10-year period as well. Some monthly spikes (not exceeding 0.20) but overall a constant average turnover (about 0.145). The daily trading volume averaged out close to 40,000 shares per day with occasional monthly spikes reaching up to 200,000 shares.

From the above two charts, we could divide the whole trading interval into 4 parts (IS, OOS, PT, and LT) where we could pick the boundaries for the change of phase from one to the next. The overall profit would have for equation:
$$n \cdot \bar x = n_{IS} \cdot \bar x_{IS} + n_{OOS} \cdot \bar x_{OOS} + n_{PT} \cdot \bar x_{PTS}+ n_{LT} \cdot \bar x_{LT}$$However, simply from observation, should we divide the above chart into four equal parts, we could also write: $$ n_{IS} \cdot \bar x_{IS} \approx n_{OOS} \cdot \bar x_{OOS} \approx n_{PT} \cdot \bar x_{PTS} \approx n_{LT} \cdot \bar x_{LT}$$since all the averages remain constants over each phase. Note that we could also break those phases anywhere, the averages would still be maintained.

That makes the trading strategy linear. At each period it would increase by about the same amount, and it would see its CAGR decrease at every step it makes. Not because the market has changed regime or whatever, but simply because the strategy was designed to be linear. From phase to phase, it would keep the same averages. And such a trading strategy will always seem to break down going forward, not due to external forces or overfitting but by the way the strategy was constructed.

It is not that the strategy is overfitted or something like that. It is that the average profit per period \( (n_a \cdot \bar x_a) / \Delta t\) remains constant. At each phase it does as good as the previous one. We could even argue that the OOS and PT phases were a waste of time since the outcome per \(\Delta t\) remained the same.

What should the trading strategy do going forward? The same as it did over the 4 phases mentioned, and that is maintain its averages, especially \( (n_a \cdot \bar x_a) / \Delta t\). This means the CAGR will continue to decline.

For the people saying that all trading strategies break down. I would say that: IF you design your trading strategies that way, then you are right. Such strategies will, in fact, deteriorate over time, and will see their CAGR decay with it, because they are built that way. Therefore, stop designing them in such a manner! This goes for variants on the same theme.

It is up to you, the strategy designer to fix the problem.

You do not want to change your strategy design, then the solution is simple, live with it and its consequences. Maybe when your strategy will not even pay its trading costs, and this after a lot of wasted time, your trading account might suggest you reevaluate.

I feel targeted! :)

Regarding deteriorating CAGR, I'd say this should indeed be expected for any successful strategy deploying a meaningful amount of capital. As the strategy compounds and accumulates capital, the difficulty to maintain that average growth rate also compounds. Take Buffett as an example. With just 1 million dollars, he may be able to get 50% CAGR, but with hundreds of billions, 20% CAGR might be exceptional. The 'strategy' itself might need to change as well, e.g. from a net-net strategy (low capital) to a more 'Quality/Moat' type strategy.

Sure, you could code the strategy to try to maintain its average historical growth rate as it accumulates and deploys more capital, but usually that means taking on more risk, and usually, the more capital you have, the more risk averse you are (not less).

Also, if you've found something that actually works successfully in the past as well as in 'live trading,' chances are it will eventually be 'discovered' by others in the market, and any 'alpha' will decline (with time) and eventually be eliminated by a continuously more efficient market.

PS: In my tearsheet that you referenced, if you know where I can find the rate at which the CAGR is declining (or how to plot it over time), I'd be all ears as I do agree that this would be useful information to be aware of and visualize.

... er, do i REALLY want to buy into this ?? Yeah,OK, let's give it a go and see where it leads ...... no doubt will be a long journey ......

Hi @Guy & @Joachim, nice to see you both at it here..... ;-))
Obviously, Guy, you have as usual given a LOT of time, thought & effort to this elaboration.

So now I would like to see what specifically i can extract from this, in very practical terms, that will assist me in winning the daily Q competition and getting a nice big allocation ;-)) I will start (as i usually do) with some of my own not-very-smart-old-engineer-like-me type of questions, based on some selected statements extracted from the above discussions. All references are to Guy's posts unless explicitly stated otherwise.

" ... basic principle for a stock portfolio to consider is not its trading methods, but its expected survival over the long term" Yes, sure, i'm absolutely all for long-term (LT) survival vs short-term shooting stars that crash & burn. LT survival of the portfolio itself is surely a function of 2 things: 1) the "quality" of the underlying stocks that we identify as candidates, and 2) the "efficiency" with which they are traded successfully (including got rid of if they turn out to be worse-than-expected or to "go bad" at some time after purchase. How can we work on these things?

So, so now lets assume we are talking about Equity Long-Short (EqLS) portfolios, as in the type that Quantopian wants for algos, allocations, and for winning the contests. So if we are going L and S, we want to be able to identify both "good quality" and "poor quality" stocks effectively, right? Then, if we don't mess around with too much churning that only burns away our equity, then our ongoing profits, account equity, and our LT survival are basically all synonymous with identifying "good (for Long) & bad (for Short) and buying / selling them as required. OK, no arguments with anyone so far.

Secular LT drift (or not): Well that is relevant for Buy-and-Hold (B&H) , but not for EqLS so i will skip over that bit for now.

" ... We know that all stocks are not created equal. So, why should we treat them as such?" - NO, that's right (says Tony the dumb ol' injuneer), of course we know that, and of course we shouldn't [indignantly]. Who would dare even suggest such a thing!!!! ;-)

" equal weights might sound like a reasonable course of action, or is it, or why not?"
" ... if we try to make predictive strategies, then, these weights should proportionally follow these predictions in order to optimize performance". Yes, that sounds good to me. Mr Buffett certainly didn't make his billions using "equal weights"! In fact his opinion of the ideal weight for MOST stocks was and clearly still is "zero"! In other words, if we look at the balance between maximizing return and minimizing risk, lots of VERY successful investors do go for targeted portfolios of not-too-many stocks, rather than a shotgun approach to "minimizing risk". People like our friendly exemplar Big Warren go for "risk minimization" in completely different ways altogether. Good enough for him sure is good enough for me too. But how?

Of course WB is not really "trading" in the sense that we are discussing here. Maybe i should be using master trader George Soros as my "example of success" here. The only disagreement i might have with Guy so far is his assertion that: " No one seems to want to consider how much randomness there is in stock prices". Come on, plenty of people have given this a LOT of thought. Benoit Mandelbrot for one.

"Reducing the Trading Interval
As you reduce the average trade interval for the average trade, its potential average return is also reduced. But this can be compensated by the sheer number of trades that can be made with positive results".
Yes sure, agreed, at least down to the point where the transaction costs eat you. And of course this is rationale behind HFT. And i observe that some people here on Q keep posting about getting Sharpe ratios of 3 or 7 or whatever mainly by trading at a frenzied pace, although Quantopian wasn't designed for that and i personally focus on a daily sort of timeframe. Taking that trading interval as a given, then i have to ask myself how can i ensure better trades? What could i find in Guy's posts to help me?

Well, the discussion of system development, paper trading, IS & OOS and then going live certainly describes the important consideration that we must indeed focus on the "live" part.

"For the people saying that all trading strategies break down. I would say that: IF you design your trading strategies that way, then you are right". :-) well, yes, i agree, but no-one ever tries to do that. Actually i have given a lot of thought as to WHY some strategies are robust and continue working for a long time and others don't.

Joachim writes: " ... chances are it will eventually be 'discovered' by others in the market, and any 'alpha' will decline (with time) and eventually be eliminated...", and there certainly are many instances where we can observe this to be true. Guy writes: " ... It is up to you, the strategy designer to fix the problem". Well yes, of course, who else?

But at the end here, after reading these posts, and not really finding too much to argue about, i am left mainly with 2 thoughts about trading system design:
1) What practical steps can we take to improve our trading systems' ability in "finding alpha"? and
2) How can we best get some clues as to the likely robustness and survivability over time of our answer to 1) ?

@Joakim, I did use your tearsheet, but you have not been “targeted” as you say. Sorry if it gave you that impression. There was no ill intent. I only wanted an example with a minimum 10-year backtest ready for the contest with the round_trips=True option on. I have not expressed any negative opinions about your strategy. On the contrary, what was said should help identify and hopefully correct an inherent problem with strategies operating on the same theme, as was also mentioned.

I pointed out that the strategy was not overfitted since from period to period it could provide an almost constant profit (year over year). Therefore, the strategy did what it was designed for in the IS phase, and continued doing the same in OOS, PT, and LT. However, this had for consequence a built-in CAGR decay. Another expression for the Law of diminishing returns.

An explanation for the decaying CAGR is provided in Part IV.

The strategy H(a) has an average profit per period: \( (n_a \cdot \bar x_a) / \Delta t\). From it you could use for instance: \( [(F_0 + t \cdot (n_a \cdot \bar x_a)) / F_0 ]^{1/t} -1 = CAGR \), where you could put \( (n_a \cdot \bar x_a) \) for one year. By gradually increasing t, you should see the CAGR decline year over year, and even make a projection for the next. Your numbers are: (236595 * 23.37) / 10 = 552689 per year. Which makes at year 10 a CAGR of 4.5% and at year 11 a CAGR of 4.4%. At year 15, it should be down to 4.1%. It is not so bad for a low volatility scenario.

There are methods to compensate for this CAGR decay. It has been demonstrated in prior posts in this thread, and I have written a lot about this. It was shown that it could even be done on randomly generated prices.

I do not know the details of your trading strategy. However, I can say that if you add CAGR decay over-compensation to your trading strategy you could improve its performance considerably.

@Tony, I agree on all counts and will get back to you.

@Guy, sorry I wasn’t being too serious with that comment. I guess I was feeling ‘snarky’ at the time when I saw you were using graphs from my tear sheet as examples. I apologise and I can remove the comment if you want.

@Tony, yes, we have to design our trading strategies to last a long time. If they break down along the way and obliterate our portfolios, we lose.

The following chart is a smoothed version of a long-term stochastic view of the origin of portfolio returns over time. Sorry for the look, it was done some 5 years ago for internal use.

The raw data for the lighter gray square in the middle of the above chart is more like the following:

where the randomness of price variations was made visible.

In the initial trading phase, our strategies depend more than heavily on random fluctuations. We can only find traces of the fundamental factors which at the other end of the spectrum will become much more important. But then, you will have somehow to get there to reap those rewards.

A trading strategy needs to change with time. If you constantly trade short-term, you are always staying at the beginning of those curves where randomness prevails. In a way, such a trading strategy is trying to find almost imperceptible factors within all the randomness. There is enough randomness that predictability suffers a great deal in the process and we can see its impact in the low CAGR levels reached over the long term.

To answer your two questions. 1) Try to increase the average \(\Delta t\) per trade. Meaning try to hold a little longer. It will tend to increase \( \bar x \). The US market, on average, is biased to the upside. Better yet, assign an increasing function to \( \bar x \) so that the average profit per trade increase over time. Do the same for the number of trades. You would get: \( (f(n_a) \cdot n_a \cdot f(x_a) \cdot \bar x_a) \) where both \(f(n_a)\) and \(f(x_a)\) are monotonic increasing functions. I wrote on that a few years back. For instance, see:

https://alphapowertrading.com/images/divers/Strategy_Enhancers.html

https://alphapowertrading.com/images/divers/Strategy_Design_Defects.html

2) Your best clues will come from doing long-term tests. This way you will know if at least in the past your trading strategy \( \sum (H \cdot \Delta P) \) survived. You will be able to see its weaknesses and correct them if you can. Overall, since your trading strategies will end up with two numbers: \(n\) and \(\bar x\), then concentrate your efforts on increasing both over the long term. See:

https://alphapowertrading.com/index.php/12-research-papers/7-building-your-retirement-fund

As for: Joachim writes: " ... chances are it will eventually be 'discovered' by others in the market, and any 'alpha' will decline (with time) and eventually be eliminated..."

I disagree on that one. Mr. Buffett, over 30 years ago, told in an interview how he did things and ended with: don't worry, I don't think anybody will listen. And it appears they still have not, for the most part. So, I would not worry about that.

We are millions of players, and we each have to rediscover everything. When was the last time you saw someone 'discovered' your trading methods or that you have been able to identify such a phenomenon having an impact on the overall market?

Hi @Guy, thanks for your comments, although i had hoped to elicit a little more from you with regard specifically to Quantopian and Equity Long-Short algos.

Your answer 1) of course is very sensible but the upside bias in US markets (both over the last 10 years and also over the very-very long term) is not really relevant to EquityLS algos. Also, i think one has to be a bit careful about this, as there have been some very extended (> 1 decade long) periods when the US market actually did NOT have an upside bias, so we must beware that it certainly isn't a "universal truth" of investing.

Regarding 2), yes, sure i am very much in favor of long-term testing and, to anyone who says "No, because old market data are no longer relevant to today's conditions", i disagree and the reason i do is because we never know what is looming around the corner and so it is important to consider as wide a range of market conditions as possible. Personally, i often even carry this to the extreme of considering different types of financial instruments altogether, just to get more out-of-the-box ideas about the widest possible spectrum of "what-if" scenarios.

In your post, The last point of debate between you & Joachim is, i think, a very good one for everyone to ponder more carefully.

Of course i'm not going to argue with Mr. Buffett. Some investment / trading strategies do just go on & on & on, but that's not necessarily just about people discovering them or not. Many fundamentally-driven market phenomena (especially the kind of ones that WB likes) involve true or relative value in some sense, as well as fundamental laws of supply & demand, and the effects of delays between planning & implementation of many things (such as opening mines, factories, manufacturing & getting goods to market, etc ) and these effects will not go away, no matter how many people "discover them" or not, just like the effect of government interest rate policies on the FX markets.

However @Joachim is ALSO correct in what he says too. There have definitely been many market phenomena and/or trading systems & strategies which, once "discovered" and widely exploited do in fact die out not too long thereafter. I can give examples if you like, but i'm sure you can think of a lot too.

So it is worth pondering the difference between these two different situations: the robust type of alpha associated with the first set, vs the more transient and not-very-robust type of alpha associated with the second. What are the essential differences between them and, more importantly, if we are planning a trading system / strategy, which type do we want to aim for and why? The second type, often accessed using price-based "data-mining" approaches can actually be very profitable, but we just shouldn't expect them to last forever. No disrespect intended to people like Tom DeMark, but i would question if it is really very realistic to expect that the extremely specific price sequence of a "TD Sequential" will really be robust over time when, at least as far as i can see, it has little underlying fundamental basis, irrespective of how well it may work? On the other hand, using an "ideas first" (rather than a "data first") approach to explore corporate accounting fundamentals may seem a bit dry, boring & less spectacular, but it is likely, i would think, to be more durable over time and i think Mr Buffett is on the same side here too. A question to think about is: How can we bring more conscious awareness to DESIGNING trading strategies to be more of one type or the other?, and then: Can we make some sensible estimates of their potential "profitability half-lives"?

@Tony, any trading strategy can be put in a simple payoff matrix equation: \(F(t) = F_0 + \sum^n (H \cdot \Delta P) \). In it, you have it all. What you started with and the sum of all the generated profits and losses over the n trades taken over the investment period that these trades be long or short.

It is implied in trading that n might be relatively large. For instance, using @Joakim tearsheet cited above, n was equal to 236,495 trades over its 10-year period. It is a sample large enough to make some generalities and take averages.

In a market-neutral trading strategy, we could specify in the above equation what is what, and it could be expressed as:

\( F(t) = F_0 + 0.50 \cdot \sum^n (H_{(i,j)>0} \cdot \Delta P) + 0.50 \cdot \sum^n (H_{(i,j)<0} \cdot \Delta P) \)

where half the funds are allocated to holding longs \(H_{(i,j)>0}\) and the other half to shorts \( H_{(i,j)<0} \). This, under the expectation that the longs would generate half the profits and hopefully the shorts the other half. Almost implying that both sides generate about the same amount of profit:

\( 0.50 \cdot \sum^n (H_{(i,j)>0} \cdot \Delta P) \approx 0.50 \cdot \sum^n (H_{(i,j)<0} \cdot \Delta P) \)

which as you know is rarely the case.

In the Quantopian universe, people act like the market was equally distributed as if half the ranked stocks are going up and the other half down. Sure, we can take a subset of stocks and declare them in whatever state we want. But, is it so in reality?

If it were, then we would be expected to make as much on our longs as we do on our shorts. If half our selected stocks declared as long are going up, and the other half declared shorts are going down, then we should end up with: \(F(t) = F_0 + \sum^n (H \cdot \Delta P) \), for this market-neutral strategy. That is, if longs and shorts responded equally well on their respective designations. This also implies we should expect the overall performance to be close to some market averages.

But, that is not how the market is structured either. More stocks have disappeared through mergers, acquisitions, and bankruptcies over the last 30 years than exist today. When we look at current averages, all we see are traces of survivors. And that too is not distributed 50:50.

Every bet made is on the premise that we do have a good predictor even if it is as simple as it will continue to go up(down). If we had good predictors, then performance should be even higher than just averages or below.

I would like to use @Joakims' tearsheet numbers if it is agreeable to him. The intent would be to show where it could be improved just by looking at how the trading strategy behaved. It was said before his trading strategy H(a) had an average profit per period: \( (n_a \cdot \bar x_a) / \Delta t\). And from there we could make estimates of where his trading strategy was going. Nonetheless, he could make changes to that strategy knowing where the pressure points are and emphasize what he would like to see more of. Moreover, he could put in place some return decay compensation measures in order to not only maintain his ongoing CAGR but going as far as improving on it.

The idea is not to attempt over-fitting his trading strategy but to game it. He has this structured trading strategy H(a) that works where he knows what it does and how it does it. Then, he could insert into it what he would want to see as in: I want to see a little more of this and a little less of that, and here are the pressure points to do it.

I'll wait for his approval before going forward.

@Guy, i'm not disagreeing with your long-term conceptual background ideas, but i start to question whether or not you are thinking in terms of the Quantopian environment, as i keep asking about. It does make me wonder if you are actually participating in it or rather following an entirely different theme altogether to that of Joakim, myself and most (or at least many if not most) of the other people here in the Q context. That's why, without necessarily disagreeing with quite a lot of what you are saying, i do keep coming back to the question of just how applicable and relevant are some of your comments in the Q context ?

Specifically, for example, you state: " In the Quantopian universe, people act like the market was equally distributed as if half the ranked stocks are going up and the other half down." Now where on earth are you getting that idea from!? What "people" are acting like this? That statement which you make is in fact not at all in accordance with the reality of what Q participants are doing with Equity Long Short algos! And the statement: " ... we should expect the overall performance to be close to some market averages" makes no sense in the context of EquityLS algos where the whole aim is very much to get as far AWAY as possible from market beta and try to have the trading strategy as market-neutral as possible.

I agree with you that many stocks have indeed disappeared through mergers, acquisitions, bankruptcies, etc. but again i do not see how this is relevant to EquityLS algos in the Q context. No, actually i will revise my comment there. The stocks that disappear because of acquisitions usually go up in price while they are in the process of being bought out under takeover offers, and so generally tend to make good Long candidates for a while before they disappear. Conversely the stocks that "die" due to bankruptcy usually do not disappear instantly in a flash but generally decline in price before finally disappearing, and so generally tend to make good Short candidates (for a while before they disappear). So indeed some of the stocks that " ... disappear[ed] through mergers, acquisitions, and bankruptcies" do indeed make good EquityLS candidates, some Long and some Short, depending very much of course on the REASON why they disappear. And no, of course they are " ... not distributed 50:50", but what point exactly are you making there?

To the best of my knowledge, @Joakim is mostly working with EquityS algos and, at least here within the context of Quantopian, i am working exclusively with EqLS, as Q requires. So i trust that Joakim will give you his approval to use his example, and so you can show us how we can improve our algos.

@Guy,

Sure, please use any of my tear sheets in your examples.

I don’t mind at all that you’re using my stuff in your examples. What I do take issue with sometimes is some of the language you use. For example:

In the Quantopian universe, people act like the market was equally
distributed as if half the ranked stocks are going up and the other
half down.

This appears to be a key assumption of yours, but it’s simply not true. The purpose of an EqLS strategy is not to go long on the stocks going up, and short the ones going down. Sure, that would be nice, but is rarely the case. We all know the market is not evenly distributed 50:50 like that.

A good EqLS strategy should be quite profitable even in bull markets where 100% of stocks are going up, as long as the Longs are going up more than the Shorts.

Or vice versa, in a down market where 100% of stocks are going down, you still make good money as long as your Shorts are going down more than your Longs.

So, long story short (pun intended), an EqLS tries to profit from the relative returns SPREAD between the longs and the shorts. Not to bet which stocks are going up and which are going down.

@Tony,

Yes indeed, on Quantopian I’m only focusing on creating strategies that might do well in the Q contest (not doing too well there lately, I’m much better at predicting the past, haha). In my personal portfolio I’m just long and strong, buy and hold till I get old. :)

@Tony, the equation presented:

\( F(t) = F_0 + 0.50 \cdot \sum^n (H_{(i,j)>0} \cdot \Delta P) + 0.50 \cdot \sum^n (H_{(i,j)<0} \cdot \Delta P) \)

does not make it a beta of 1.0, but more like in @Joakim's tearsheet, and most probably yours, something close to a beta of 0 simply because you are half long and half short.

If someone ranks on some criteria his/her selected stock universe and goes long the top 400 and shorts the bottom 400, then they are treating the market as if half up and half down. And the point I make is that it does not correspond to reality. It is just us delimiting subsets of what we want to see with no corroborating evidence that the market is structured that way.

Overall, we are saying the same things. We view the game the same way. I look at it from different angles (with equations).

That you be EqLS can reduce beta to near-zero values. It can reduce volatility. But it also tends to reduce overall CAGR. I view the reduced CAGR as the opportunity cost of operating an EqLS strategy. I am not saying it is bad, on the contrary, such strategies have their place. I have provided praises on some of those EqLS strategies that I liked (yours, @Joakim, and a few more).

As for what could be done to improve such trading strategies, that is covered in my next post after @Joakim agrees. Last time, he felt “targeted”. I did not want that again. Some of the stuff he might appreciate, and some not...

@Joakim, good. Let me finish, be back soon.

It's about spreads. Not half up half down. You can be short 400 stocks which go up and long 400 stocks which also go up. So long as the longs go up more than the shorts you profit. Ditto the reverse. You are merely trying to predict relative movement.

In @Joakims' tearsheet, his longs have a remarkable 0.63 hit rate. Whatever he used to identify longs was right 63% of the time. Still, all his longs represented 51% of total trades taken. It is understandable, the strategy was designed to be 50% long and 50% short.

He lost almost half of all the generated profits from his longs on his short positions where, on average, he was losing $-42.17 per trade. Yet, when he identified shorts correctly, he had a superior advantage equivalent to, on average, a 3.7% profit target. But with a 38% hit rate, the sum of losses more than drowned his short profits.

On the long side, his trading strategy acts as if it had an average profit target of 3.07% with an average stop loss of 3.28%. That is not that good a combination since over time, in an equal environment, the return will decay. To compensate this return decay, his profit target would have required something more in the vicinity of 3.50% or better on his longs. This is not a major move, but it would have compensated the inherent degradation that seems built-in on the long side. See my paper on fix fractions for instance where this type of decay is covered: https://alphapowertrading.com/papers/FixedFraction.pdf

So, where should he concentrate his efforts to improve that trading strategy?

First, he needs a better identification system for the shorts that pay off which might help indirectly in making a better identification for winning longs thereby improving his spread and overall profits. Second, for whatever reason he is taking his shorts, he should try to identify why so many go wrong and find ways to minimize those factors or better yet, reverse them. But here, he cannot just reverse the logic since that would make those trades long! He will have to settle with a better identification method for his shorts while maintaining his profit margin.

Adding 1% on each side of his average spread amounts to $33Mil based on the number of trades taken over the 10-year period. A 1% more is not a big move. Each 1% he adds will bring in the same. His betting unit is increasing by about 5% per year. If he could improve that figure too, it would be good to his bottom line as well.

Getting his win rate on his shorts at the same level as his longs would raise his average net profit per trade to about $100 which in turn would increase his overall profit close to $23Mil. Almost 5 times better. This might require only minor changes to his trading script. Yet, it would raise his CAGR to about 12.7%. It should be enough to be well positioned in the contest if not win it.

What @Joakims' tearsheet shows is that even if you divide half long and half short, you cannot expect that both sides behave the same, and therefore, they should not be treated the same. That the shorts have a different logic setup is fine, especially if it raises the average profit per short and its hit rate.

I see a working trading strategy having a large number of trades with a need to play averages, to strategize the strategy. Each dollar he improves his average net profit per trade is $236,495 more to his bottom line. These are all minor changes that can have quite an impact on performance without unduly increasing drawdowns or volatility. This task will get harder and harder as time passes. The equation remains: \(F(t) = F_0 + n \cdot \bar x \), so increasing the number of trades will add profits too.

Notice that what we are dealing with are averages. A single trade has absolutely no interest. What we want to do is move the means in the right direction, and that direction should always be in the way of higher overall profits.

I do not see the actual trading strategy, and therefore, cannot be specific as to what to do. However, I can look at the results of the round_trips = True option and know where to apply the pressure.

Why are such strategies important?

There are literally trillions of dollars earning less than 2% per year. Those funds are at those low rates because they need stability, low drawdowns, and low volatility. It is what an EqLS strategy can bring. I do not see the end prize so much as a Quantopian contest winner, but more as a return spread manager with low volatility as in the following equation: \( F(t) = 1T \cdot (1 + 0.127 - 0.02)^t \). That is $100B in its first year with no money on the table. It increases every year. And some piece of code can do the job. Evidently, to reach this level or better, things will need to scale up.

The more you can improve on the EqLS's CAGR, the better it will get. And as you raise the CAGR, there will be fewer and fewer managers above you making your trading strategy even more desirable.

Now, that makes such trading strategies great to have, if they can reach interesting CAGR levels. And if you do have one of those, keep control of your IP.

It would be interesting to see an exmple if such a strategy where you have improved the short trades. Easier said that done. Shorts have always been extremely difficult especially in a market which drifts upwards over time.

How do you propose to improve the short side of this fellows trading strategy?

Re your final comment, @Guy, that's presumably why, although people are happy to show results, fewer people nowadays post their actual strategies on Q.

Would you @Guy, perhaps care to make any comments on @Blue Robin's very interesting posted set of results entitled " Simplified Moving Alpha Tearsheet" from a few days ago?

It was a trap I fell into in the futures markets. For the vast majority of the time shorting makes absolutely no profit whatsoever. There then come periods when shorts account for virtually all the profit.

And interestingly, unlike with stock markets, upwards drift is not nearly so big a feature of commodities prices, especially when adjusted for inflation. I guess better farming and extraction methods may have had something to do with disrupting demand / supply.

Hi @Guy, please note the correction in my post above regarding the name / authorship of tearsheet that i mentioned.

Hi @Zeno, thanks for your practical, experience-based comments. I keep trying to encourage @Guy to discuss more about application rather than underlying formulae and, as someone who only rarely trades futures markets but does a lot of research & analysis, i have certainly observed exactly the effects as you describe. The Long vs Short, Win vs Loss profiles are very different. So, in practice, how do you actually deal with this? Just continue to take all the short signals knowing that most will be losers, but knowing the winners will be large? Or do you try to select out short signals not to take?

"Just continue to take all the short signals knowing that most will be losers" Yes, that is what these guys do. And in some periods it pays handsomely. But over many years the return from shorts is derisory for trend followers. I have spoken to many of the players about this and most of them agree. I have met a lot of these guys such as Seykota (very pleasant chap) and spoken to many on the phone such as Dave Druz of Tactical.

Harding (Winton) of course believes trend following is dead.

Me? No idea TBH

Yes, interesting people. Ed Seykota has some nice posts around the internet and an interesting profile (& photo of himself playing the banjo) on LinkedIn. I have communicated with some but not met any of these greats in real life. Certainly must have been wonderful to meet & talk together in person.
I know this "trend following is dead" idea has been bandied around a bit (no pun intended Howard B, if you are reading this ;-)) over the last few years, but to me that sounds rather like saying "the bear is dead" ... yeah, right .... at least until it's alive again.

@Tony, concerning @Blue Ribbon's tearsheet, I see it as a variation on the same theme. It trades less over a slightly shorter time interval, and has a lower average net profit per trade. If I had to choose, I would go with @Joakim's program. Nonetheless, I would want more.

@Guy, i'm a bit surprised by your apparent lack of enthusiasm. @BlueRobin may only have a modest-looking annual return of 3.9%, but over a test period of 9 years maintains a Sharpe Ratio of 2.67 (which is easy enough to do for a year or two, but definitely healthy to maintain it over 9 years) , and a MaxDD of only 1.3% (also over 9 years ... i think that's VERY nice indeed), and annual volatility of only 1.4%. Using any sort of composite metric that takes into account the return rate, Sharpe ratio, annual volatility, the ratio of Specific to Total returns, max DD, and the time period over which it is sustained, then i think @BlueRobin's effort is quite impressive. However if you are doing better than that, then please share with us and let's see ........

From observation over the years I think Guy likes to code and to theorize.

Well @Zeno ;-)) i was hoping that Guy might perhaps be induced to, as they say, put it out on the table, for us to see for ourselves what he has of practical value. So let us just wait & see, and allow @Guy's actual results speak clearly for themselves ............

I think @Guy keeps his IP close to his vest.

Making public a "valuable" trading script is the same as giving it away. It's “value” instantly becomes zero. Therefore, I have never done that. And do not intend to do it either.

If I had anything of value which I thought would make money (and I do not) then I would not bother with trading forums. Which are mostly " a tale Told by an idiot, full of sound and fury Signifying nothing."

No particular offence intended to anyone.

@Guy, yes of course. but no-one here is even suggesting that you would disclose your actual trading scripts/algos. Just one or two RESULTS SUMMARIES (e.g. number of years of test, cumulative return, specific return, annual volatility, Sharpe, MaxDD%, alpha, beta and leverage) to show what sort of results you are actually achieving with your methodologies. There is absolutely no way that anyone could back-out your IP from that!!

@Zeno,

If I had anything of value which I thought would make money (and I do
not) then I would not bother with trading forums. Which are mostly " a
tale Told by an idiot, full of sound and fury Signifying nothing."

So you’re here purely for entertainment then? ;)

@Zeno, your judgement there may be a little too harsh and over-generalized. Personally i have gained a few useful insights & ideas from the comments of SOME people here ... including [even] you from time to time ..... ;-))

Ha ha ha. I doubt that. I am long past my sell by date.

@Tony, showing simulation result summaries on some strategies has been done a number of times.

However, I have little interest in the contest per se, rarely even look at the results. I am not designing anything for it either. Nonetheless, I do look at some of the trading scripts that could make the contest. Always looking for interesting code snippets, gaming ideas, and structure in the trade mechanics.

I do see the value in such trading strategies as mentioned before. But that is not currently my type of game.

I prefer designing long-term trading strategies. I want them first and foremost to last. My longest simulated trading interval using market data was 50 years! That too presents its challenges. Trying to make sure with all the uncertainties that your trading script will prosper whatever is thrown at it while keeping control over it all.

I am here to learn to code in Python and then transform some of my best strategies to Python code. A task that turned out to be more difficult and time-consuming than anticipated. But, slowly, I am getting there.

Regardless, we are here for various reasons. We are the ones who decide what we want to share and that should be enough. There is no obligation to do so, whatever it is.

There are literally billions and billions of possible trading scripts, we have barely scratched the surface of possibilities. Maybe all we can do is compare trading strategies on whatever basis and make our choice based on whatever criteria we like. The equation for that is:

\(F_0 + \sum^n (H_a \cdot \Delta P) \, > \, F_0 + \sum^n (H_b \cdot \Delta P) \)

We find stuff that can help our own trading methods, then great. Technically, it might be why we are here.

Managing Basic Portfolio Math

Somewhere along the line, you will have to mix trading strategies together, meaning playing more than one at a time. And the overall result will depend on their sum. Each strategy will be allocated some initial capital and ran simultaneously with the others in the group. This group of strategies could be of any size and will constitute the entire portfolio.

The payoff matrix equation for this is: \(F(t) = F_0 + \sum^n (H \cdot \Delta P)\). And for a group of strategies, it is the same equation.

What would change are the matrix dimensions going from 2 to 3. Also, \(F_0\) would need to be divided into those \(k\) strategies. The holding matrix would have for elements: \(h_{k,i,j}\), and the price matrix: \(p_{k,i,j}\). This is sufficient to identify every trade from \(i\) to \(n\) on any stock \(j\) in any strategy \(k\).

We could rewrite the equation as: \(F(t) = \sum_1^k\frac{F_0}{k} + \sum_1^k \sum_i^n (H \cdot \Delta P)\). Note that the previous equation did the same job.

All that to make the following point: adding strategies together in the same portfolio will average out some of the stuff on these regrouped strategies. One could ask the question: what is the average or actual drawdown for the first 10 portfolios participating in the contest for instance? The answer should be something less than the highest drawdown of the group but more than the lowest of the group.

If you have two trading strategies with drawdowns of -0.10, you will not be getting a sum of -0.20 for the combined drawdowns. But maybe more something like -0.07 to -0.09 since your two strategies might not reach their lowest drawdown at the same time. Note that having two strategies, the initial capital would have been divided in two too. It goes the same if you handle 10 strategies or more at a time. The strategy diversification will help reduce the overall drawdown.

You have some of this stuff that will average out like volatility, drawdowns and Sharpe ratios. As for profits or losses, you can still make averages of the lot, but mostly you will simply add them up. And this is a major distinction.

Each of the trading strategies could be ordered by outcome. We would have: \(H_a > H_b > \cdots > H_k\). And thereby having each strategy contributing less and less to the overall results. Nonetheless, the total outcome would not be changed, you would still get the cumulative sum of all the profits and losses on all the trades taken.

Managing Things Out

The average portfolio strategy result is simple, it is \(\frac{F(t)}{k}\). Determining the total outcome is trickier since you do not have any of the future data. Still, you do know the general outcome in terms of its CAGR or something close to it based on some long-term backtest. $$\hat g(t) = [\frac{F_0 + \sum^n (H \cdot \Delta P)}{F_0 }]^{1/t} -1$$

For instance, if you take the first 10 strategies from the contest and they average out to something like \(5.0\%\) CAGR, you could recompose the equation with \(F(t) = F_0 \cdot (1 + \hat g)^t\) and get an estimate of where the sum of these strategies is going. With 10 million each for a duration of 14 years, one should expect to get: \(F(t) \cdot 10 = 10 \cdot F_0 \cdot (1 + \hat g)^t\) and this in numbers gives: \(10,000,000 \cdot 10 = 10 \cdot 10,000,000 \cdot (1 + 0.05)^{14}\). If you do the calculations it comes out to 197,993,159 for the 100,000,000 put on the table. Note that strategies participating in the contest have stability, low volatility, low drawdowns and near zero beta which explains their low CAGRs.

Say you add one more trading strategy to the mix. Take the one in the following thread: https://www.quantopian.com/posts/built-robo-advisor#5c687f392be7cd0e55dd3e7f where the outcome was 4,243,029,746 and add this to the 197,993,159 from the first 10 contest participants. Then, take the outcome for the 11 trading strategies combined using: $$\hat g(t) = [\frac{F_0 + \sum^n (H \cdot \Delta P)}{F_0 }]^{1/t} -1$$ which would give: $$\hat g(t) = [\frac{120,000,000 + 4,441,022,905}{120,000,000}]^{1/14} -1 = 0.30$$

This one trading strategy raised the overall CAGR for the 11-strategy portfolio from 0.05 to 0.30 over its 14-year trading interval. These might be only guesstimates. But nonetheless, they do provide a reasonable approximation.

If you put two such strategies in the mix you would get: $$\hat g(t) = [\frac{140,000,000 + 9,300,038,971}{140,000,000 }]^{1/14} -1 = 0.35$$

The two heavy strategies would still have their big drawdowns, but now the impact of their respective drawdowns would be reduced by the 10 low drawdown contest strategies. The average drawdown would now be -0.16, a much more amenable portfolio figure.

Extrapolating

Extrapolating for an added 10 years based on the above 35% CAGR would come close to a portfolio value of \(\$\)187B. But in reality, it would be more like \(\$\)395B since the portfolio is compensating for return decay due to the two high profile strategies. While extrapolating, add 6 more years to make it 30, the total portfolio value would rise to something like \(\$\)3.935T. That is more than pocket change for just watching a set of programs do their thing. But then, one would have to have a long-term vision of where he/she wants to go.

Things To Do

If after some modifications to the program I bring down the drawdowns in the vicinity of -0.30, then the overall average drawdown for the 12 strategies will fall to about -0.09 which would make it a reasonable portfolio of strategies and still get the outstanding rewards. Even on these 2 strategies, going to cash is an acceptable protection measure in times of market turmoil. And this kind of minimal protection should be relatively easy to add to those two high drawdown strategies.

After all these tests which were only to raise my interest in the thing, I will have, not only to finally read the code, but also bring some modifications to it in order to make it do what I want. What has been demonstrated in the step by step modifications made was that the high profile strategy could survive. It did over a 14-year period. It was scalable and it could be controlled. However, it does lack protective measures, and bringing in some will be part of the job.

I see all the tests I have made as preliminary work to see if there was something there. And if a trading strategy passes these acid tests, then I stand ready to go forward. My job will be to enhance the strategy's strengths and alleviate, reduce or eliminate some of its weaknesses. At least, I start knowing how far it could go.

I cannot run this notebook on Quantopian, it says:

InputRejected: Importing blas from cvxopt raised an ImportError. Did
you mean to import base from cvxopt? You tried to import a module that
is not whitelisted on Quantopian. To see the list of allowed modules
in the IDE, go to
https://www.quantopian.com/docs/whitelists/ide-whitelist#algo-ide-whitelist.
To see the list of additional modules allowed in Research, go to
https://www.quantopian.com/docs/whitelists/research-whitelist#research-whitelist.

Can it be solved?