Greetings all --
The thread that prompted me to make this posting began with the question of
whether a system based on a simple-moving-average crossover was profitable and
would remain profitable.
I used this code to test that:
// Test MA Crossover.afl
//
BuyPrice = SellPrice = C;
ShortPrice = CoverPrice = C;
SetTradeDelays(0,0,0,0);
OptimizerSetEngine("cmae");
FastMALength = Optimize("FMAL",1,1,200,1);
SlowMALength = Optimize("SMAL",10,1,200,1);
FastMA = MA(C,FastMALength);
SlowMA = MA(C,SlowMALength);
Buy = Cross(FastMA,SlowMA);
Sell = Cross(SlowMA,FastMA);
Short = Sell;
Cover = Buy;
e = Equity();
ArrowShape = Buy*shapeUpArrow + Sell*shapeDownArrow;
Plot(C,"C",colorBlack,styleCandle);
PlotShapes(ArrowShape,IIf(Buy,colorGreen,colorRed));
Plot(e,"equity",colorGreen,styleLine|styleOwnScale);
//////////////////////
Samantha suggests Buy when the monthly price is above the 10 month SMA, Go to
cash when it is below.
When tested on the 500 stocks currently in the S&P 500, using end-of-day data
from Quotes Plus that goes back to about 1993 (for companies with history that
long), the median exposure is about 50% and the median RAR is about +9%.
As asked, the question assumes that being long or cash is the correct
allocation. For many reasons, a trader may want to consider only long
positions. But recent history (1984 to the present) has been a period of very
strong rising markets. The future might be different. Using SPY as a
surrogate for the broad market, the result of that same test are an exposure of
61% and an RAR of 12.6%.
We can ask several questions:
1. Using full knowledge of the history, what are the best parameters for a
trader who wants to use only long positions?
First, we need to decide how to measure best. We'll make a few runs with
different objective functions and note the results.
Net % Profit.
The best values for the parameters are 2 and 12. Net profit is 304% (every
initial $1.00 becomes $4.04). Maximum drawdown is 15.3%.
CAR/MDD.
Best values are 116 and 15. Backwards. This implies the trade should be flat
when the faster moving average is above the slower, be long when it is below.
Net profit is 51%. Exposure is 6%, RAR is 39%.
Maximum System Drawdown.
The best result is to never trade.
Sharpe Ratio -- used by many money management firms.
Best values are 97 and 13. Backwards again. 64% return with 13% exposure, for
an RAR of 22.7%.
RRR (Same as K-Ratio).
Best values are 1 and 12. 292% return, exposed 63%, RAR of 13.8%.
The best results depend very much on the definition of best.
2. If the trader was able and willing to take short positions, what is best
for them?
Net % profit.
Best values are 7 and 18. 64% return, exposed 26%, RAR of 11.7%.
CAR/MDD.
Best values are 1 and 24. 63% return, exposed 25%, RAR of 12.1%.
Maximum System Drawdown.
The best result is to never trade.
Sharpe Ratio.
Best values are 5 and 22. 63% return, exposed 24%, RAR of 12.5%.
RRR.
Best values are 7 and 18. 64% return, exposed 26%, RAR of 11.7%.
3. If the trader wants a system that is always exposed, long or short, and a
single set of values that signal reversals.
Net % Profit.
Best values are 1 and 22. Net profit is 534%, exposure 88% (flat at the
beginning until the averages have enough data), RAR of 13.6%. Maximum drawdown
is 16.3%.
CAR/MDD.
Best values are 1 and 23. Net profit is 534%, exposure 88%, RAR 13.6%.
Maximum System Drawdown.
The best result is to never trade.
Sharpe Ratio -- used by many money management firms.
Best values are 78 asnd 47. Backwards again. 76% return with 34% exposure,
for an RAR of 10.3%.
RRR (Same as K-Ratio).
Best values are 7 and 18. 522% return, exposed 89%, RAR of 13.2%.
However --- those are all in-sample, backward looking results. And none of the
results have more than a handful of trades. Beware of making estimates of
future performance based on in-sample results (even when there are a lot of
data points, but that is another topic).
4. What are the results when a period of several years is analyzed, the best
parameter values select based on those years, and the future results computed?
Since the moving average lengths are so long -- typically around 24 months --
the in-sample period must be longer.
Five years is a long enough in-sample period to get some results. But, in part
due to the edge effects of the walk forward process, one year is not a long
enough out-of-sample period.
An in-sample length of six years, out-of-sample three years, starts to give
results, but the out-of-sample results are not profitable.
Six years and four years gives only two steps -- one profitable, the other not.
My conclusion is that we cannot determine whether a moving average crossover
system based on monthly bars is likely to be profitable in the future or not.
Sixteen years of monthly data -- 192 data points is insufficient to allow
meaningful validation.
What next?
1. Add more data. We might think that adding data from earlier periods will
help. Testing to find out what moving average lengths worked best in the 1930s
through the 1980s might be interesting, but it is still in-sample and has no
value in estimating future performance. But we could run walk forward tests
beginning at an earlier date and observe more steps. Whether those results
look promising or not, we are still stuck with using the data we have from 1993
through the current. So we might find out what the best lengths of the
in-sample and out-of-sample periods are. But we already know that the system
is not sufficiently profitable or stable over the past eight years or more to
actually trade it or to use it as a filter.
2. Use short bars. Moving to weekly bars increases the amount of data to
about 830 data points. Moving to daily bars increases the amopunt of data to
about 4000 data points.
Using weekly data, walking forward, two years in-sample, one year
out-of-sample, long only, RRR as the objective function. The results are
pretty promising. The system is profitable in nine OOS periods, unprofitable
in three, and does not trade in two. But the values of the parameters are the
interesting part. In 11 of the 15 OOS periods, the values are backwards. That
is, be long when the faster moving average is below the slower moving average,
and go flat when it crosses from below to above. The values of the parameters
vary quite a lot, with four of the steps having both lengths greater than 60
weeks. In the steps where the moving average periods are both below 30, 10 of
11 have the values backwards -- often the faster period is one bar.
The conclusion I draw is that the traditional thoughts on using moving average
crossovers as filters for trading systems have it backwards. When run as a
walk forward test, which is the only way to estimate what future performance is
likely to be, the S&P 500 is mean reverting, not trend following.
Thanks for listening,
Howard