TS Express Sample Article - Seasonal Bond System
BOND SIX PACK SYSTEM - By Bill Brower Published in the Jan/Feb 98 issue of TS Express
Copyright 1998 - All rights reserved
Readers of this periodical know that I have been critical of seasonal systems.
Seasonality, in the most classical sense, involves buying or selling at predetermined times identified by the trading day of year.
Unfortunately, seasonality has been shown to lack consistency. Sheldon Knight demonstrated this in an exhaustive piece of research
which has been presented to the attendees of several Futures Conferences.
However, from time to time I revisit the concept.
Recently, I wrote a seasonal indicator, that generates, in histogram format, a profile showing, for each trading day of the year, the percent above or
below the yearly average.
The nice thing about this tool is that it shows the relationship of each bar with all of the other bars in the year and compares to the yearly average.
It is easy to see if there is a time of year where prices tend to be above or below the yearly averages. Since the scale is measured in percentage points,
it is possible to grasp the magnitude of the potential moves.
I developed and tested this tool on a ten year continuous, back-adjusted contract of
the US bonds. To my astonishment, the indicator generated a very clear pattern of seasonality. You can see the histogram in Figure 2 below.
From the end of December, to mid-January the market turns down. Then there is a small upward bias until early February. Next, there is a downward bias
until late April. This is followed by a strong upward bias until early August where a short downward bias takes over until late in August.
Then begins the powerful August to December upward bias.
I estimated the possible entry dates and the corresponding trading day of year.
After a little optimizing, I arrived at a seasonal system that takes 6 trades every year on the same trading day of year.
The system is always in the market and uses no stops. It has had a rather remarkable run over the last 10 years.
The results are posted in Figure 3 on page 6. These results were output to the Printlog window by SysStatsScanner2000 which is
an inexpensive system reporting utility that I developed and market.
The system is highly profitable with a relatively low drawdown.
It has an very high average profit per trade and a remarkable profit factor. The net profit to drawdown ratio is over twenty which puts this system
in the extraordinary category. The mark-to-market drawdown is still quite reasonable, coming in under $8,000.
These results were generated assuming $150 for slippage and commission which is quite generous for the bonds.OK, “So where is the out-of-sample test?”,
you ask. Good question. The results for 1997 are all out-of sample since the indicator is always one year behind. In 1997, this system had 6 winning
trades worth over $25,000. The system has not lost a trade since August 1995. To be fair, I tested the system on data prior to 1988.
The system did not fare as well. In fact, the seasonal pattern did not begin to become evident until 1984. Also the system would have had
you long from August 1987 through the crash in October 1987. This would have been intolerable, because bonds declined dramatically before
the crash and experienced a bungee like rebound after the crash.
Despite the poor showing prior to 1988, the system has a remarkable
ten-year batting average. This is not easy for a system always in the market. If the patterns are not just coincidental, then the system may
just be tradable. Even if you discount seasonal patterns heavily, the seasonal patterns might be useful in tempering some of your trades.
Would you really want to buy bonds in mid-February or sell them in late August?

Here is the code. Sidebar: Bond Six Pack By William Brower
Vars: OK2Sell(False), OK2Buy(False), TradeDayNum(0), ACntr(0);
If year(d)>(year(d))[1] then TradeDayNum = 0; TradeDayNum = TradeDayNum+1;
OK2Sell =TradeDayNum =24 or TradeDayNum = 149 or TradeDayNum = 248; OK2Buy = TradeDayNum = 7 or TradeDayNum = 79 or TradeDayNum = 164;
If OK2Sell then Sell market; If OK2Buy then Buy market;

|
|