The momentum breakout strategy is based on the concept proposed by Richard Bookstaber in 1984 that once there is a big volatile movement, the market tends to follow it. Thus, it uses the ATR to measure volatility and issues orders when the current change in the closing price exceeds the threshold calculated by multiplying the ATR by a configurable constant.
The strategy first calculates the ATR indicator to measure market volatility. Then it calculates the absolute value of the daily closing price change. When the closing price change exceeds the ATR value by several multiples, trading signals are generated. Specifically, if the closing price rises more than the ATR upper rail, go long; if the closing price falls more than the ATR upper rail, go short.
The strategy uses the ATR indicator to dynamically determine the breakout threshold. When market volatility increases, the threshold will rise to reduce erroneous trades. When market volatility decreases, the threshold will decrease to capture breakout opportunities in a timely manner.
Consider combining other indicators to select trading opportunities to improve efficiency. Also select optimal parameters based on product characteristics. Use techniques like Martingale to control trading frequency.
The momentum breakout strategy is simple and direct, generating trading signals from breakouts. ATR stop loss allows it to adapt to market volatility. The strategy relies on parameter optimization for decent results. But there are also some problems like missing initial breakouts, frequent trading, etc. Further improvements by combining with other techniques are needed for stable profits in complex markets. Overall, the momentum breakout strategy has clear logic and is worth further research and application.
/*backtest start: 2022-10-26 00:00:00 end: 2023-11-01 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © EduardoMattje //@version=5 strategy("Volatility System", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, process_orders_on_close=true, initial_capital=20000) // Inputs var averageLength = input.int(14, "Average length", 2) var multiplier = input.float(2.0, "Multiplier", 0.0, step=0.1) // Calculations atr = ta.atr(averageLength) * multiplier closingChange = ta.change(close, 1) atrPenetration(int signal) => res = closingChange * signal > atr[1] longCondition = atrPenetration(1) shortCondition = atrPenetration(-1) // Order calls if (longCondition) strategy.entry(strategy.direction.long, strategy.long) if (shortCondition) strategy.entry(strategy.direction.short, strategy.short) // Visuals plot(atr, "ATR", color.white, 2) plot(math.abs(closingChange), "Absolute close change", color.red)