- Joined
- 13 June 2007
- Posts
- 838
- Reactions
- 136
Greetings all --
The thread that prompted me to make this posting began (on the AmiBroker Yahoo forum) 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
The thread that prompted me to make this posting began (on the AmiBroker Yahoo forum) 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