Home › Explore Investing Strategies › System trading
Larry Williams' short-term breakout rule that buys when the price rises above today's open plus k times yesterday's range. This covers the rule and its variants, a QQQ backtest since 2000 with an exit at the next open, and the cost arithmetic that changes the result.
A rule that follows the move once the day's rise passes a set fraction of the previous day's range. On QQQ since 2000 it returned 13.2% a year before costs, above buy and hold (8.6% a year), but with a 0.15% cost per trade, $10,000 ended at $63 after 2,800 trades.
Volatility breakout is a short-term rule that follows the move once the day's rise passes a set fraction of the previous day's range. It was popularized by Larry Williams, an American commodity futures trader, and in Korea it became widely known as the standard example in beginner books and courses on building crypto trading bots in Python. This article covers the rule and its variants, results on QQQ since 2000, and the cost arithmetic that changed the result.
This is the rule this site calculated. Exits differ from trader to trader, so they are listed with the variants below.
The target starts from today's open, so it is not the same as breaking yesterday's high. As in the figure, the target can sit below yesterday's high. With k at 0 or more, the target is always above the open, so the rule never buys right at the open. After a day with a wide range the target is farther away and the rule buys less often, and after a narrow day it buys on a small move.
Williams devoted a chapter to volatility breakouts in his 1999 book Long-Term Secrets to Short-Term Trading. He is reported to have started with $10,000 and posted a 12-month return of 11,376% in the 1987 Robbins World Cup Championship of Futures Trading (Wikipedia). The figure comes from the contest record and has not been verified by this site. It came from a futures account, so it cannot be compared directly with the ETF calculation below.
The k 0.5 rule was applied to QQQ from January 2000 to September 2026. The starting money was $10,000 with nothing added later, dividends were reinvested, and a 0.15% cost was charged on every buy and sell. The rule traded 2,800 times (about 105 a year), and 57% of trades sold at the next open above the buy price. Even so, the end balance was $63, an annual return of −17.3%. Buy and hold ended at $91,094, or 8.6% a year. The costs paid over the period added up to $27,736, 2.8 times the starting money.
Changing k or adding a filter still lost money every time. Over the same period, k 0.3 traded 4,171 times for −28.7% a year, k 0.7 traded 1,852 times for −11.4%, and k 0.5 with the 5-day MA filter traded 1,609 times for −12.5%. Over the last 10 years (October 2016 to September 2026), k 0.5 returned −18.7% a year against 20.9% for buy and hold. The monthly-updated table is in Volatility breakout on QQQ backtest.
Costs decided the result. With only the cost per trade changed, the annual returns were as follows (January 2000 to September 2026).
| Case | 0.15% per trade | 0.05% | 0% | Buy and hold |
|---|---|---|---|---|
| QQQ k 0.5, exit at next open | −17.3% | 2.0% | 13.2% | 8.6% |
| QQQ k 0.5, exit at same-day close | −24.3% | −6.6% | 3.7% | 8.6% |
| QQQ k = 20-day noise ratio | −16.7% | 1.8% | 12.6% | 8.6% |
| SPY k 0.5, exit at next open | −26.0% | −8.5% | 1.7% | 8.2% |
The same-day close and noise-ratio rows were calculated separately with the same engine for this article. The noise-ratio k traded 2,685 times, almost as often as k 0.5.
Before costs, the average trade gained 0.13% (winning trades +0.88% on average, losing trades −0.87%). A 0.15% cost per trade takes 0.3% out of every round trip, more than twice the average gain. Costs alone multiply the account by 0.997 per trade, and over 2,800 trades that shrinks it to about 1/4,400. That is why a result that would have been $278,292 without costs ended at $63. At a 0.02% cost per trade the rule matched buy and hold (8.6% a year), and above 0.06% it lost money.
The before-cost result was 27.8 times. Splitting it into the move from the buy price to that day's close and the move from the close to the next open gives 2.64 times for the first and 10.54 times for the second. Most of the gain came overnight. Selling at the same day's close drops the overnight part, and the same rule returned 3.7% a year even with no costs.
QQQ itself looked the same. Over the same period, buying at every open and selling at the close would have turned money into 0.52 times, and buying at every close and selling at the next open into 17.7 times (dividends included, before costs). The breakout held only 42% of all nights yet took a share equal to 82% of QQQ's overnight gain (in log returns). That share, though, also goes to anyone who simply holds. The finding that stock gains cluster overnight has been reported many times in research (Cooper, Cliff, Gulen 2008).
Williams traded futures. Futures carry small commissions and spreads relative to the contract value and move large amounts on little margin. In the calculation above, the rule beat buy and hold only when the cost per trade was below 0.02%. US stock commissions at Korean brokers are usually higher than that, and currency exchange adds its own cost. A rule that became known in futures does not produce the same result on an ETF.
Search terms: volatility breakout, Larry Williams, range breakout, opening range breakout, noise ratio, overnight return, bitcoin trading bot.
The problem with volatility breakout is size, not direction. On QQQ the average trade gained 0.13% before costs, and the 0.3% round-trip cost was more than twice that. Raising k or adding a moving-average filter cut the number of trades and the losses, but every variant calculated in this article lost money at a 0.15% cost per trade. Most of the before-cost gain came from overnight moves, and simply holding QQQ collects that share too. Unless trades cost less than 0.02% each way, the rule did not beat buy and hold in this calculation.
This article does not recommend any ticker or k value. The figures are past results from this site's engine (dividends reinvested, the whole account on a breakout day, fills assumed at the target). Outside figures such as contest returns are the source's claims and have not been verified by this site. Costs and taxes for futures, crypto and locally listed products are yours to check. Everything here is reference information based on past, public data and is not investment advice.
Volatility breakout on QQQ backtest · Turtle breakout rules backtest · Golden cross 50/200 backtest · Grid trading · Support, resistance and breakout · Livermore's trend breakout
← Grid trading: buy at each line down, sell one line up · Contents · Moving-average trading: the 200-day line, golden cross and 10-month rule →
See these metrics on a real stock →