Article Library
What's New
About Us
Site Map


Unlimited Systems

Auto-generate unique

trading strategies for



Position Sizing Tool

Position sizing software for

trading. Trade smarter.

Maximize results.



The Breakout Bulletin

The following article was originally published in the February 2003 issue of The Breakout Bulletin.

Was January Unusual?

I spoke with several traders in February who remarked that the market seemed to be trading differently (and not "good" different). The consensus seemed to be that the worries about war with Iraq were affecting the markets and making them more difficult to trade. This made me wonder if there was a way to quantify the apparent changes in market behavior. Towards this end, I looked at several indicators that represent market dynamics.


False Breakout Indicator

To get a better feel for the extent of false breakouts recently, I came up with an indicator that quantifies the size of the false breakouts, if any, on each bar. I define a false breakout as the amount the market moves in the direction opposite to the direction in which the bar eventually closes or the amount the market moves beyond where it eventually closes. Specifically, on an up bar, I define a false breakout as the amount that the market drops below the prior close or rises above the current close, whichever is larger. Similarly, on a down bar, the false breakout is the amount the market rises above the prior close or drops below the current close, whichever is larger. This is illustrated in Fig. 1. A bar that closes at the high or low of the day and has no trading overlapping the prior close would have a zero value of the false breakout. To create the indicator, I plot the raw value on each bar normalized by the average true range and the moving average of this value. ("Range" is simply the bar's high minus it's low; "true range" is similar but takes gaps into account.)


False breakouts

Fig. 1 Defining "false breakouts" for the FalseBreakout indicator.



The EasyLanguage code for the FalseBreakout indicator is shown below.


  Indicator: FalseBreakout
  This indicator calculates the size of the false breakout
  on each bar (if any). It normalizes the result by the
  average true range and plots the raw value plus the
  Michael R. Bryant
  Breakout Futures

  Copyright 2003 Breakout Futures

  Feb 11, 2003

  Input: N    (10);
  Var: FBO     (0),
       AFBO    (0); 


  If C >= C[1] then
     FBO = MaxList(H - C, C[1] - L)
     FBO = MaxList(H - C[1], C - L);


  FBO = FBO/Average(TrueRange, N);
  AFBO = Average(FBO, N);


  Plot1(FBO, "False B/O");
  Plot2(AFBO, "Ave B/O");


Fig. 2 shows what this looks like on daily bars for the E-mini S&P over recent months. While the daily value is quite volatile, the average value doesn't change much over time, suggesting that there have been no more false breakouts recently than in the past. While my subjective impression was that there were more false breakouts in January than usual, this is not supported by the false breakout indicator.


FalseBreakout indicator on daily ES data

Fig. 2. FalseBreakout indicator plotted on a chart of daily bars of the E-mini S&P.



Trendiness Indicator

A common way to define the strength of the market trend is to divide the absolute value of the change in price by the average true range over the past N bars. This tells us how much the market has moved relative to the average true range. A market that's moved three times the average true range over the last month has a stronger trend, for example, than one that's moved only 1.5 times the average true range.


In EasyLanguage, this can be written as follows:


  Input: NBars (30);
  Value1 = AbsValue(C - C[NBars])/Average(TrueRange, NBars);

  Plot1(Value1, "Trendiness");


In Fig. 3, this indicator ("Trendiness") is plotted on a chart of daily E-mini S&P data using a look-back period of 22 days, the average number of trading days in a month. The indicator looks particularly flat during December and January, two difficult months for the short-term trading approach of the MiniMax II system. In fact, the indicator only briefly got above a value of 3 over this 2-month period. The last time the indicator was consistently this low was over the Dec-Jan period one year earlier. Interestingly, MiniMax II was modestly profitable during that period. The lack of trend strength may be a distinguishing factor in the recent Dec-Jan trading period. However, it's not entirely clear that lack of trend strength correlates strongly with lack of good trading opportunities.


Trendiness indicator on daily ES data

Fig. 3. Trendiness indicator plotted on a chart of daily E-mini S&P data.



Average True Range Indicator

The last indicator I want to examine is the average true range. In Fig. 4, the average true range (ATR) is plotted for the daily E-mini S&P using a look-back period of 22 days. In my opinion, this is the most striking of the three indicators. The ATR hit a low of 16.7 (E-mini S&P points) on Jan 14th and is currently hovering around 19. This is the lowest value since Mid-April 2002 and is nearly half the value we saw in mid-October and early August. The ATR has been trending steadily downward since mid-October, only recently appearing to bottom out in January. While the trading volume of the E-mini S&P is about as high as ever, the daily ranges have been contracting. One possible interpretation of this is that it represents a lack of conviction among investors and traders. Whatever the reason, it raises several questions. Is the lack of volatility temporary? If it persists, how will it affect trading? Is there a way to compensate for it? I try to address the last question below.


Average true range for daily ES

Fig. 4. Average true range plotted on a chart of daily E-mini S&P data.



Dealing With Declining Volatility

In this section, I present two methods to adapt a trading system to market volatility. These methods -- the second one in particular -- are best suited to breakout systems, although they may be worth investigating for other types of systems as well.


Cycles of Volatility

In the November issue of this newsletter, I discussed using the ATR as a filter for a simple breakout system. The idea is based on the observation that the ATR is mean reverting; that is, it tends to move back to its average value if it gets too far away from it. If the ATR is low, it will most likely move higher over the next few bars, and vice-versa if the ATR is high. This suggests that if you wait until the ATR is low, a breakout trade entering on the next bar has a better chance of developing into a nice trade. I demonstrated that at least for the simple system I presented, using the ATR in this manner helped improve the overall performance.


An even better way to take advantage of cycles of volatility is to use the product of volume and ATR. I refer to this product as the "activity." For example, a day with a large range and lots of volume is arguably more "active" than a day with the same range but low volume. Similarly, a day with high volume but a low range is less active than a day with the same volume but a large range. To provide a "trigger" level, I take the average of the activity over the last N days. Because the activity is mean-reverting, if the activity is below its average, the activity can be expected to increase over the next few bars. This can be used as an entry filter to help restrict your trading to more active days. Specifically, look for a breakout on the next bar if the activity on the current bar is below its N-bar moving average.


In EasyLanguage, this filter can be written as follows:


Var: NAct       (30),    { look-back period for activity indicator }

     ActInd     (0);     { value of activity indicator }


ActInd = TrueRange * Volume - Average(TrueRange * Volume, NAct);


If ActInd < 0 then

  { Place the entry order here; e.g., Buy next bar at H stop; }


I've tried this filter on several different breakout-type system, and it improved the performance in each case. It might be worth trying with your own system.


Adapting the Breakout Amount to Volatility

A classic entry method is to enter on a breakout from yesterday's high, low, or close by an amount given by a multiple of the prior day's range or average range. For example, you might take 50% of yesterday's range, and add it to yesterday's high to define your long entry price. Since the amount of the breakout is a multiple of the range, this method inherently adapts to the market's volatility, as defined by range or true range. However, there's no rule that says this type of simple, linear function of volatility is an adequate way to adapt the size of the breakout to the volatility. For example, if low volatility is an indication of lack of conviction by traders, we might expect that we'll get more poor quality trades in a low-volatility market as the expected trends fail to materialize. This is probably what happened to the MiniMax II system in January. Under these conditions, we might want to increase the size of our breakout when the market declines in volatility in order to raise the threshold for entry and avoid trades in a trendless or reversal-prone market. However, this is exactly the opposite of what will happen when we take our breakout based on a simple fraction of the true range or ATR. Basing the breakout on a simple fraction of the true range or ATR results in smaller breakouts as the volatility declines.


Here's one possible solution. Instead of taking a breakout as a simple fraction of volatility, make the fraction a linear function of volatility, with a larger fraction at low volatility and a smaller fraction at high volatility. The breakout itself is still calculated the same way, by multiplying the ATR or true range by the fraction. However, the fraction will vary with the ATR.


As a baseline for comparison, consider the simple breakout system below:


Input:  EntFrL    (1.0),  { Volatility multiplier for entry }
        EntFrS    (1.0),  { Volatility multiplier for entry }
        MMFrL     (2.0),  { Volatility multiplier for exit }
        MMFrS     (2.0);  { Volatility multiplier for exit }


Var:    ATR       (0);    { average true range }


ATR = Average(TrueRange, 22);


Buy next bar at H + EntFrL * ATR stop;
Sell short next bar at L - EntFrS * ATR stop;


If MarketPosition = 1 and C > EntryPrice and BarsSinceEntry >= 1 then
   Sell this bar at close;


If MarketPosition = -1 and C < EntryPrice and BarsSinceEntry >= 1 then
   Buy to cover this bar at close;


If MarketPosition = 1 then
   Sell next bar at EntryPrice - MMFrL * ATR stop;
If MarketPosition = -1 then
   Buy to Cover next bar at EntryPrice + MMFrS * ATR stop;


This system enters on a breakout from the prior high/low using a fraction of the 22-bar ATR as the amount of the breakout. It exits on the first profitable close after at least one bar if not stopped out at the exit stop given by a fraction of the ATR from the entry. Using 1410 min bars of the E-mini S&P (symbol @ES in TS 6; a 1410 min bar represents one day), I optimized the inputs over the last 500 days. I found the following input parameter values worked well: EntrFrL = 0.4, EntrFrS = 0.3, MMFrL = 0.6, and MMFrS = 1.9. The one-contract results using these inputs were as follows ($75 per contract has been deducted for trading costs):


Net Profit: $16,863

No. Trades: 155

% Winners: 68%

Ave. Trade: $109

Profit factor: 1.39

Max Drawdown: -$6,038


We'll take these as the baseline results without the variable breakout fraction. Now consider the system with the variable breakout fraction.


 Input: FrLv0     (.8),   { Breakout fraction, low vol, longs }
        FrLv1     (.3),   { Breakout fraction, high vol, longs }
        FrSv0     (.8),   { Breakout fraction, low vol, shorts }
        FrSv1     (.3),   { Breakout fraction, high vol, shorts }
        MMFrL     (2.0),  { Volatility multiplier for exit, longs }
        MMFrS     (2.0);  { Volatility multiplier for exit, shorts }


 Var:   ATR       (0),    { average true range }
        ML        (0),    { slope of b/o fraction curve, longs }
        BL        (0),    { y-intercept, longs }
        MS        (0),    { slope of b/o fraction curve, shorts }
        BS        (0),    { y-intercept, longs }
        V0        (16),   { low volatility }
        V1        (30),   { high volatility }
        FrL       (0),    { entry fraction for longs }
        FrS       (0);    { entry fraction for shorts }


 ATR = Average(TrueRange, 22);
 ML = (FrLv1 - FrLv0)/(V1 - V0);
 BL = FrLv0 - ML * V0;
 MS = (FrSv1 - FrSv0)/(V1 - V0);
 BS = FrSv0 - MS * V0;
 FrL = ML * ATR + BL;
 FrS = MS * ATR + BS;


 Buy next bar at H + FrL * ATR stop;
 Sell short next bar at L - FrS * ATR stop;


 If MarketPosition = 1 and C > EntryPrice and BarsSinceEntry >= 1 then
    Sell this bar at close;

 If MarketPosition = -1 and C < EntryPrice and BarsSinceEntry >= 1 then
    Buy to cover this bar at close;

 If MarketPosition = 1 then
    Sell next bar at EntryPrice - MMFrL * ATR stop;
 If MarketPosition = -1 then
    Buy to Cover next bar at EntryPrice + MMFrS * ATR stop;


This system uses a simple linear equation to calculate the breakout fraction as a function of ATR. ML (MS) and BL (BS) are the slope and "y-intercept" of the linear equation for long (short) trades. Instead of a single value of the breakout fraction as a system input, this system uses two values: FrLv0 (FrSv0) and FrLv1 (FrSv1) for long (short) trades. The first parameter is the value of the breakout fraction at low volatility, and the second parameter is the value of the fraction at high volatility. I've somewhat arbitrarily defined "low" and "high" volatility as ATR values of 16 and 30, respectively (variables V0 and V1). The exit logic is identical to the baseline system above.


I left the exit parameter values the same as in the baseline system: MMFrL = 0.6 and MMFrS = 1.9. I couldn't find any better parameters for the short side than the 0.3 value that worked well in the baseline system, so I used FrSv0 = FrSv1 = 0.3. However, for the long side, I found that the parameters FrLv0 = 0.5 and FrLv1 = 0.4 worked well. Compared to the baseline system, the only difference is that the breakout fraction for long trades varies between 0.5 when the volatility is low to 0.4 when the volatility is high.


With this one change, the one-contract results over the same period of time as for the baseline system are as follows ($75 per contract has been deducted for trading costs):


Net Profit: $21,300

No. Trades: 141

% Winners: 72%

Ave. Trade: $151

Profit factor: 1.55

Max Drawdown: -$6,650


Increasing the breakout fraction under conditions of low volatility improves the performance of this system on the long side of the market. The improvement appears to results from filtering out 14 trades that the baseline system took. This is consistent with our goal of avoiding poor trades during periods of low volatility. This idea may be worth testing on other systems and markets. One drawback is that you introduce extra input parameters. However, as long as any parameter optimization is performed over a large number of trades, as in the examples here, the risk of over-fitting the system to the market is minimal. As with any trading approach, it's probably a good idea to test it in real time before committing capital.


In summary, the markets have exhibited declining volatility in recent months. While this lower volatility may cause problems for some short-term trading systems, there may be ways to mitigate the damage. Hopefully, you'll find one or both of the ideas I've discussed here worth investigating for your own trading. That's all for now.

Good luck with your trading.


Mike Bryant

Breakout Futures