Stock Trading System II

In A Stock Trading System – Part I, was made the case that 3 stock portfolio metrics were sufficient and of major concern when making the analysis of a stock portfolio's end results.

Having only 3 metrics to describe the output of a portfolio management system, it then falls on those three metrics to explain what is going on.

For sure, they need to answer to the following basic equation: A(t) = A(0) + Σ profits(losses), and therefore, those results are tightly tied to the trading capital used. In fact, the sum of profits is resumed to A(t) - A(0) = Σ profits(losses), the what you ended with, compared to what you started with. All that profit or loss was resumed into n*(u*PT). Therefore, the following will stand: A(t) = A(0) + n*(u*PT).

Your CAGR (compounded annual growth rate) will depend on this too. Its equation is:(1+ (n*u*PT)/A(0)^(1/t) -1 = r = CAGR. And, this average CAGR will determine your doubling time. And looked at it this way, one has to consider that the game is for an extended period of time (read years and years).

Your portfolio growth could also be expressed as: A(t) = A(0)*(1+r)^t, based on the CAGR just found.

Any stock trading strategy will have these 3 metrics to determine its output, kind of a signature, a modus operandi, a what it does. What is needed is to go beyond that.

With u and PT preset, as was shown in Part I, a trading method can only extract n such profitable occurrences (u*PT) from its price series. Therefore, a trading strategy has a limit and a self-imposed limit at that. If I increase the profit margin, there will be less trading opportunities.

To compensate, I could increase the bet size, but to do this will require more capital. The starting design of a conundrum. You can't have it all, you have to make compromises.

You want, given an initial capital, to maximize max [n*(u*PT) | A(0)], which is usually the way people play. When in fact, they should consider: max [n*(u*PT) | A(t)]. A slight change in perspective, and a major impact on the outcome. Since it forces one to consider the metrics as time functions: max [(n(t)*( u(t)*PT(t))) | A(t)], and as an ongoing process. It literally changes the game.

A question would be: am I designing myself out of the market altogether by being too restrictive in my choices?

A question seldom asked in financial literature. But that a trader needs to answer, he is in the game and needs to make trading decisions. Recently, as an example of the extreme, I was reviewing a trading strategy where explicitly, in code, the profit target was set at 1,000% in a strategy that was playing on a minute interval. That was like putting oneself out of a possible trade altogether. The code was probably intentional, as a way to disable taking a profit target. But then again, that kind of thing happened during the Flash Crash, needless to say, all those trades were later busted.

What would be trading rules to govern a trading portfolio? That is the real question. You can't move the market by yourself, and yet you want to profit from its price variations.

You need to first make a selection of tradable stocks. I would say that at least half of listed stocks could fit in this category, meaning a few thousand. Here, I will describe what I put in a trading strategy of mine and hope it will be helpful. You will find simulations using these principles and trading rules in the DEVX series of trading scripts on my site. So, here it goes.

DEVX7, after minor refinements, became my latest iteration DEVX8. It had outstanding performance results over its 20-year testing interval using EOD (end-of-day) price data, just as its predecessors. The same trading rules would apply going forward as well, you still could not know the end result: n*u*PT, since you would have to live the next 20 years to find out, but, nonetheless, this would not change the fact that the strategy would behave the same way as it did on past data. Also, if those trading principles did not work, DEVX8 would not have outperformed over its 20-year backtest doing thousands and thousands of trades.

Trading Rules

First, a need to eliminate most if not all stocks that might go bankrupt, or do poorly. Hence, the very first rule, superseding all others: a stock is made tradable, if and only if, it exceeds its initial price. If p(0) was $30, then no trades under $30 ever, except a stop. It is almost assured that you won't have a $30 stock declare bankruptcy the next day. A major problem was taken care of; the whole notion of survivorship bias eliminated, practically removed from the equation.

This first trading rule would have you playing only with what will actually be survivors. How easy at times it is to solve complex problems. Let scholars play with how to remove survivorship biases in the creation of their portfolio backtest. You need to play going forward, you want to win, and you opt to simply eliminate the problem from your own portfolio's standpoint. One rule, one problem eliminated. Next.

I use small trading units to spread the risk around, to diversify over a small subset of the stocks considered as tradable stocks. Naturally, one would go for those that presently have the best estimates and potential to appreciate over time. The selection criteria might not matter that much, we are dealing with averages and will be taking only a small sample of what is available out there. So, the chosen sample will resemble the population from which it was taken from. You won't know the outcome of what you bought with your trading units, but you know it will average out to about the same as the population you took it from. And as such your sample will approach the population's average performance level: the index.

The stock selection process was not that much of a burden. You know you need to make one, so you do to the best of your abilities and it should prove sufficient to do the job. Problem number 2 solved, not optimally, it is not the best one you could do, but it is adequate enough. You are averaging on the stock selection process as well. Anything you could do better later would always be welcomed, and only improve end results.

Now, you have your stock selection: a "bunch" of stocks that have positive forward-looking prospects with a definite bias towards survivors since it is all you want to play with. Almost a Buy & Hold selection since you see more or less a long-term future in them. And if they don't meet up to your ongoing expectations, by not going up in price, they will be replaced by better candidates anyway. You are gradually changing the rules to make it a game you want to play and win.

You are left with placing your trade units on the table. And that involves market timing. You know this little detail: you are not that good at it. You know that when predicting what's coming, your hit rate is not that high. It is more than 50/50 but it is still relatively close to it, like in the low 60's. Experience does give an edge. Notwithstanding, most of the stocks you pick tend to go up over the years anyway, maybe not immediately, but still go up with time, if given time. It was the reason you considered them to be on your list in the first place.

Then, you find an excuse to get in a trade. Maybe "excuse" is the wrong word. You enter a trade because you expect a profit PT to be realized, otherwise, why even take the trade. You are in the game to make money, not to give it away, even if you can do that if you want.

When should you get in a trade? You've estimated at this very instant that such and such a stock is going up over its near future, even more after that, and its price is currently rising. Then, that is it. That's the time to get in, now. The reason is simple, you are playing for Δp, the price differential. And, Δp/p(in) = PT.

What do you need as an "excuse"? Almost anything will do, just make it reasonable, something that can make sense. It should be evident also that if you view a stock's future as down, there is no reason to buy. You are not in the support business, leave those stocks to others, you are in to make a profit. That one is very simple. You go for Δp > 0, which translates to rising prices.

In DEVX8, the entry rules are rather simplistic. The trading methods to do it is complicated, but the concept, the outcome is simple. Entries are done using random functions within self-declared opened for trading windows. Trading units are sprinkled in time over stocks over the length of their respective trading windows; some units will pill up over others and some will be isolated due to the randomness of the draw. But, their number nonetheless limited. You want a footprint in a stock, you average in since you don't know where the best price is. Averaging in and out of positions over time has its advantages, the first of which is risk and exposure distribution in time over rising prices.

The DEVX8 Example

There is risk involved. You want to spread it over other stocks within the constraints of your current portfolio size. Look at some price charts in the DEVX8 series, it should give you some idea of the process involved. Note that DEVX8 takes its profit PT all the time it can get it. And, there were no predictions made, or needed, for that matter.

DEVX8 simply waits for its profit to come its way. I should repeat this. DEVX8 waits for its profit PT to cash in. It should be evident that it can't force its profit, but it can wait for it. It also has a high hit rate since most closed trades, as a result of this exit rule, are closed with a profit.

Going forward, DEVX8's trading rules will still apply. Its trade entries are based on the flip of a coin, and that, you will be able to do going forward just as much as you could have done in the past. It is a process that is independent of stock prices. At least, the simulations have shown that it worked pretty good over past data. And there is no reason to believe that the flip of a coin will not work going forward. You are dealing with statistical distributions that have been around for centuries. And as said, if DEVX8 was no good, the backtest would have shown it by producing nothing worthwhile.

Taking a trading strategy built with traditional trading methods, and applying it to randomly generated price data, you will see it fail often since at each iteration it will be faced with a new set of data series with no memory of its past. However, take a trading strategy based on randomly trading on randomly generated data that can win in that environment, you will have a trading strategy that will also survive in the real world. And, DEVX8 is one of those.

DEVX8 is only preoccupied with n, u and PT. That is all it knows. And when you look at how it evolved, all you will find are functions to improve n(t), u(t) and PT(t) since it is all you can do to impact on final results.

If you somehow increased the number of trading units deployed, you would simply get more in return. Increasing the number of trades was one of its major problems. In the beginning, you can do only a limited number controlled by your then equity. It is as the equity grows that you can do more. The expression for this is try to: max [(n(t)*( u(t)*PT(t))) | A(t)].