Dec. 2, 2021
My 4 previous articles dealt with a do-it-yourself profitable and freely available stock trading strategy using the QQQ ETF over a period of 12.24 years. From its simple procedures, other generalized notions can be extracted.
First, a recall. We had this free trading strategy essentially mimicking the NASDAQ 100 index. Thereby making it a basis for your own indexed fund. Results on 44 simulations were shown. All having two components, one: a simple stock selection procedure (totally outsourced by using QQQ constituent stocks), and two: a weekly scheduled and automated rebalancing routine (trading on whatever happened and whatever was there in QQQ at the time).
Thus, having our machine automatically trade once a week and effectively only for a few minutes since all trades were market orders. Anyone with access to money could do this, not something you would call time-consuming either.
Nonetheless, this trading script should be considered as the bare minimum one could do, and that is to exceed a 20% CAGR over the long term. The program's outcome was a viable and profitable trading strategy outperforming usual market averages (things like SPY or DIA for instance). It could also have been executed simply by buying QQQ outright and holding it for the duration with even a slightly higher CAGR, and a lot less work (like none at all).
We are able to analyze this trading strategy with the added notion of all other things being equal. Meaning practically no significant change to the code itself over the entire trading interval. All trades would occur on the same set of stocks, at these weekly prescheduled rebalancings, on the same days, at the same time, at the then-current market prices. No means was provided or considered to make the trading script even better following your input in the process. No trading skills were required or even needed.
It goes further than that. No need for any advice or opinion based on whatever from anyone. No theories needed but plain observation of what is happening. Trades are done automatically by a machine with no sentiment, no running on some sentiment analysis either. No deep learning or gradient descent required since none of it was even considered in the trading process. No technical indicators, no mumbo jumbo, no moon phase, no secret sauce. Absolutely no financial expertise required of any kind. No need to forecast anything, except maybe, making this simple assumption: going for Mr. Buffett's bet on America that the future will be more of the same of what we have had.
The only person that counts in this process is you, nobody else. It is not some theory you advance, but the practical side of things. Things you can do by yourself for yourself with almost the assurance that you will not lose under the simple condition that you do it for a long time. It is always your choice, but this is the easiest index fund you could implement, not only with little risk but also with a lot of potential depending on your initial trading decisions which could always be altered as you go along.
The Stock Selection Process
The single decision of trading QQQ's constituent stocks easily solved the stock selection problem. You knew then that QQQ would survive for the duration simply due to its composition. How could the top 100 NASDAQ stocks by market capitalization (some of the richest companies in the world) all go bankrupt?
You would still have drawdowns, evidently, maybe as much as -50% (see some QQQ's historical charts). But the thing is, should you stay the course, QQQ with a high probability will be higher in some 20 years' time. In a way, defining a low long-term capital risk. In this case, all you had to do was sit down and wait for your positive outcome whatever the composition of QQQ was.
Those 100 stocks would change over time as new ones inch to the top of the list while others fall off. As a result, only trading the then actual 100 highest valued stocks. Could you seriously and realistically imagine what would be required for QQQ to drop down to zero?
Some Administrative Decisions
It was shown that 4 administrative decisions - taken even before the program could start - had a tremendous impact on the range of the portfolio's final results. In a way, making the program kind of generic, a basic example for others wishing to implement all or some of these administrative decisions to their own trading strategies.
These administrative decisions concerned the strategy's initial capital, using equal weights or market cap weights with some showing the impact of leveraging when applied. A fifth consideration should be added: time. How much time will be provided to let your portfolio grow?
A lot of trading strategies use variants of the same two components. It is about all we could do with a trading program, that is, pick some stocks (based on whatever criteria) and trade them using whatever trading rules or procedures we like, or find acceptable. However, we are not able to determine how many such trading strategies are part of this trading universe and which are the best. This definitely has consequences.
We can always say that a strategy sounds good, interesting, and/or acceptable, even if we know it most certainly might not be the best. Nonetheless, this particular strategy operates at the same CAGR level as Mr. Buffett's own remarkable long-term achievements.
The equation for this is: F(T) = F0 ∙ (1 + 0.20)50 = 9,100 ∙ F0 where F0 is the initial capital. In Mr. Buffett's case, he started with $10 million some 50+ years ago. Just adding one year more would generate 1,820 times more than the original stake. You might conclude that time is the main factor here. However, in order to reach year 51, you have to go through year 50 first, and all the others before it. Stating that trading, just like investing, is a long-term endeavor. Especially for an index fund that wants to double as a retirement fund.
There is a very large number of trading strategies in this strategy universe. So large in fact that we cannot count how many there are with all the variants and all those kept private. Because of this, we do not know the real count, the real mean, the standard deviation, or any other data that could represent it.
The number is so large we could use the word "infinity" or more appropriately something trying to get close to it. There is no way we could enumerate all the possibilities in a thousand lifetimes. Let alone with our little machines in a few minutes.
The number of possible stock combinations greatly exceeds 10100, and that is a very large number. Even that number is a tiny fraction of possible scenarios (in excess of 10400). There are definitely some grounds to state that going forward, we might not know which is the best path to take, or what is coming our way.
Except, we do know. It will be more of the same.
Your Strategy Choices
We could use more elaborate stock selection processes. Make a selection based on something from the available stock universe (some 8,000+ on the US side, and a lot more worldwide).
But, the question is: what could or would constitute a "good" choice for us? And it is not picking stocks to do some simulation. What really matters is which stocks will you pick going forward from the right edge of any stock chart, and starting tomorrow where the path of each of those stocks will wander in uncharted territories.
You know QQQ is biased toward technology stocks (≈ 45%). Technology stocks will continue to grow for many more years as QQQ fluctuates upward. Also, QQQ's 10 largest stocks accounted for ≈ 65% of the whole, thereby, putting even more emphasis on some of the largest technology companies out there.
Whatever the selection criteria used or its size, it will remain a sub-space of this time-evolving universe. Taking the 100 largest market cap worldwide or only taking QQQ's constituent 100 stocks would be two small samples from the same universe.
Stocks not considered by QQQ would make a different set even unseating some of the lower end of QQQ's list. But we should expect similar results for the simple reason that the top stocks that matter the most would be in both lists. Those entering the list could do wonders and rise to the top, just as some at the top decline and fall off.
We do not know either the number of trading routines that have been developed over the years. They number in the millions and millions (most unknown or not published, especially if they are worth something).
Regardless, you will have to make a choice.
Determine which of those trading strategies you know you intend to use and execute live going forward. Doing simulations is only to give you an indication that your trading procedures would have worked under certain conditions over past market data over an extended period of time. Nonetheless, it can provide a ballpark estimate of what your strategy could do, but it does not provide any kind of guarantee.
Understandably, a rough estimate might be much better than going at it blind. Not knowing that your strategy might eventually fail is not a good scenario, but a simulation can tell you that. Still, there are no guarantees. Only assumptions based on: if we have more of the same.
Those Dreadful Portfolio Equations
We have a few and rather simple equations which we cannot escape from to describe the outcome of any stock portfolio. From the point of view of either its trading strategy H matrix, its effective number of executed trades N, or its average growth rate gbar:
F(T) = F0 + Ʃ (H ∙ ΔP) = F0 + N ∙ xbar = F0 ∙ (1 + gbar)t (1)
where F0 is the initial capital at play, n: 1, …, N the trade id number up to N the total number of trades executed over the portfolio's lifetime, H the evolving stock holding matrix, ΔP the price difference matrix including trade entry and exit prices, xbar the average net profit per trade and gbar the portfolio's average growth rate (CAGR) with t the number of years the strategy is applied.
We should consider the portfolio's growth rate as: gbar = rm + α composed of rm the average market return which is quite easy to get, and the added alpha, the part our trading skills or trading methods will bring to the game. The alpha is required in order to enhance and exceed average long-term portfolio performance. Stuff like the "optimal portfolio" residing on the efficient market frontier.
The price matrix P contains the whole stock universe. Each price can be described as a matrix element: pd, j where d is the date's timestamp (row), and j the stock ticker id (column). The price difference matrix ΔP is simply the difference from period to period of the price matrix P. Its ith entry would be: Δi pi = pd, j - pd-1, j here viewed as the difference from day to day. It can be the differences from close to close for each day for all stocks in P and/or the actual trade price of any shares bought or sold. It can be a huge matrix.
Some 20 years of data would require a matrix of size: P = p(5,040+, 8,000+) (that is 40,320,000+) elements. If you wanted to deal with minute data, that would be 15,724,800,000 entries, minimum. Forget about doing correlations on this one since the next day or next minute you will have to do it all over again.
The point is: you will need to be more selective. It is not a matter of choice, it is a simple matter of practicality. It is more about how much can your machine do in a few minutes or a few seconds?
Each day (row) could be handled as a vector of 8,000+ elements. Since the strategy only trades once a week, we could treat all of this with simple vector additions, multiplications, or whatever other data manipulation we might need to express our views and interpretation of the data.
We all see the same price matrix P. QQQ's closing price on 2002-04-10 was 29.08, and there is nothing we can do about it. In 2032-04-10, I have no idea what QQQ's closing price will be. Whereas in 2042-04-10, any number given should also be received with more than just skepticism.
Nonetheless, we could still say, with a high degree of confidence and high probability, that its price in 20 years' time will be higher than today.
From equation (1), time is the first limiting factor. You do not provide enough, you will not get that far. Simply compare: F(T) = F0 ∙ (1 + 0.20)10 to F(T) = F0 ∙ (1 + 0.20)50. The difference is 9,100.44 times compared to 6.19 times the initial stake F0. Time is a major component in this game, and the highest rewards are at the ending part of the time series.
We should first look to last when building a stock portfolio. It is a compounding game.
The other important point will be the initial stake. You add a zero to F0, you will get it back at the end. Meaning you put in more capital and it can make quite a difference. For instance, F(T) = 100,000 ∙ (1 + 0.20)30 = 23,737,631. Whereas F(T) = 1.000,000 ∙ (1 + 0.20)30 = 237,376,313. It is a choice you have to make.
Your efforts to raise additional capital are definitely worth it.
More effort should be applied to increasing your initial capital, it will be worth every penny. And, adding time will also have a tremendous impact: F(T) = 1.000,000 ∙ (1 + 0.20)40 = 1,469,771,568$, or, F(T) = 1.000,000 ∙ (1 + 0.20)50 = 9,100,438,150. You have it all in this simple formula: F(T) = F0 ∙ (1 + gbar)t. Put in your own realistic numbers, and see it as your long-term objective. Then, concentrate on ways to make it happen. Re-examine the previous articles where scenarios with leverage were also considered.
The Holding Matrix
From the above equation, the part that does the work is the holding matrix H. All by itself, it gives the outcome of all trading decisions just by stating its content on any given day (d) for any of the stocks in the portfolio (j): hd, j. The size of matrix H will be the same as matrices P and ΔP. The same will go for any parameter or information matrices we might need to make trading decisions.
We can eliminate from the payoff matrix (H ∙ ΔP) all columns that would result in zeros (the stocks not selected). This would greatly reduce its size. Trading only 100 stocks will reduce the number of columns to 100 while the other 7,900+ columns would not be considered. We could further reduce the array to view only days where there were actual trades.
Data not considered by your trading strategy has no direct consequence on your final results.
We have a position if and only if, hd, j ≠ 0. The holding vector will change according to trade decisions from either buying and/or selling: hd, j = hd-1, j + bd, j - sd, j with bd, j the number of shares bought and sd, j the shares sold on that day. No active position, meaning hd, j = 0 should be considered as a position. We do not have to be in a position all the time. Exiting and going to the sidelines can also be part of a trading strategy, and oftentimes, to our advantage.
In this imitation of an index fund strategy, hd, j acts more like a core position and will usually be different from zero hd, j ≠ 0. Holding a position with no change, from one period to the next, can be expressed as: hd, j = hd-1, j. A held position need not change for long intervals. It is up to the program to make any changes to the holding matrix. The payoff matrix Ʃ (H ∙ ΔP) does represent the total of all profits and losses incurred over the portfolio's lifespan. Period.
A holding vector is based on the previous stock inventory to which will be added the shares bought and/or subtracting the shares sold, thereby giving a continuously updated inventory. There is nothing complicated there. You add/subtract 3 vectors. What is harder to determine is the composition of the bd, j and sd, j vectors. There, you need trading decisions, something that will make bd, j ≠ 0 and/or sd, j ≠ 0 . You want the shares, when sold, to generate profits more often than losses.
It is not just the relative composition of the buy or sell vectors that matter the most. Anybody could put numbers in the buy and sell vectors. However, the order in which they appear and at what prices will make all the difference. First, you do have a capital constraint, your funds are limited to F(t), the how much you have on hand at any one time. If the price difference equals zero: Δi pi = pd, j - pd-1, j = 0. It carries no profit whatsoever, saying that if there is no price difference, there is also no profit to be had. And from there, time does gain importance since Δi pi ≠ 0 will require time to pass by in order to generate this change in price, and consequently, a gain or a loss.
The probability of Δi pi ≠ 0 increases as you extend the holding interval. Variance increases proportionally to the square root of time: ≈ t½. Indirectly, it is an invitation to seek volatility. The more volatile stock prices are, the more Δi pi will be different from zero. The problem is, you would like to limit this volatility to only the same side as your trade. You want the price to go up when you are long, and down when you are short. The no change in price scenario provides no benefit, short-term or long-term. It is a waste of your time. There is no profit in Δi pi = 0. Period. Except, if your stock is paying some dividends. Then, you could hold just for that reason alone.
Since We Have Portfolio Equations
Since we do have equations for the total outcome of any stock trading strategy, it should be evident that any stock portfolio will satisfy these equations.
It is not a matter of choice or opinion, but a foregone conclusion. We have an equal sign on the table. Before doing anything, you would have to approve or disprove these equations in some way. I have not seen anyone disprove them yet. It might not be in a form you might like, but regardless, the equal sign will stand, and also what it represents.
From the payoff matrix, we have: Ʃ (H ∙ ΔP) = F0 + N ∙ xbar. No matter the size of this payoff matrix or its number of trades N, it will all boil down to two numbers: N ∙ xbar. This in itself is another major constraint. It does not matter how long it takes, but the portfolio's growth rate will have to come from N ∙ xbar and as a direct consequence from the trading strategy itself, since: Ʃ (H ∙ ΔP) / N = xbar.
There is no escape from this little equal sign, and it makes the game rather simple: only two variables really matter, and one is a counter. It kinds of reduces the whole game to a bean-counting thing. If you are going for the small average profit per trade, you definitely will need a lot of trades to meet your objectives since xbar. has also for expression: xbar = [F0 ∙ (1 + gbar)t – F0 ] / N.
You find in all the stock-related data something that will generate xbar and then make sure that it can possibly be repeated N times. It does not say what triggered the entry or exit. We could view a single ith trade as resulting in ± xi with a profit or loss.
The sum of all such trades would give us the strategy's total generated profit: X = Ʃ xi. This could be quite a long vector since N could run in the tens of thousands, if not millions.
Total profit would depend on xbar = Ʃ xi / N. No matter how much you trade, if xbar = 0, you did not make any money at all in this game. And should xbar be less than zero: xbar < 0, then, N ∙ (-xbar) will represent how much you lost, it could even exceed what you started with.
The profit on the ith trade (xi) depends on pt + τ - pt. When looking at the past, it is very easy, the prices are there and you can certainly make the subtraction. However, for any future trade, both these numbers, the entry, and exit, are purely speculative in nature. And the execution time itself might not be determined either. You cannot bring any certainty except some guesswork to determine xi, having neither its entry price pt, nor its exit later on at pt + τ with τ being counted in days, months, or years.
You might have thousands of future trades to execute, and you know nothing on how each xi will turn out, positive or negative. You can do a simulation over past market data since you have all those prices written in stone.
But going forward, you have to rely on your best guess, your best market assumptions. The further out you go, the worse your guess is going to be unless you increase the range of that guess.
We could say for a 100-dollar stock that its price in 10 years will be within the range of 0 to $ 1,000, maybe even more. Some consider this as a 10:1 upside potential. It is ridiculous.
It is not a profit target, nor is it a probability or some forecast. It yells: I do not know what the price will be! The worse part, I think, is that in 10 years, these people will come back to you and say: I told you so. If you are ready to accept such things, go for it, I certainly will not stop you from doing so.
What Finally Matters Is Real Live Trading
You intend to play this game live, doing short-term trades, you are gambling without even having odds on your bets, except these wide range possibilities which are not probabilities, actually far from it.
However, I see nothing wrong with chasing short-term momentum plays should you use whatever at your disposal to identify them.
The predicate for a profit is simple, it needs to be positive: xi > 0, and their sum will be your total profit X = Ʃ xi.
A profit does not ask for its origin.
Profits can be achieved easily when you add together the outcome of a lot of these trades, especially in a rising market. Profits can be in your account, without doing anything special, as shown in previous articles.
You win with no other reason than just rebalancing every week no matter what the price movements were. Even if you classified these price movements as random, random-like, erratic, or whatever, you would still end up winning the game.
Whatever your market opinion or knowledge thereof, all of it was useless with this rebalancing and lucrative strategy.
All you had to do was do it for a long time. I consider it the minimum for a do-it-yourself trading recipe to build your own indexed retirement fund.
The previous article Take the Money and Keep it – II, even showed that you did not have to guess anything to get decent results. You would have won either way, by trading or not. In fact, you would have made more just buying QQQ and sitting on it rather than doing those 60,000+ trades.
The trading strategy won simply by rebalancing every week NASDAQ's top 100 stocks by market cap.
Until you find something better, I suggest you look at this strategy more closely.
Created: Dec. 2, 2021, © Guy R. Fleury. All rights reserved.