Tags:

This strategy uses the Average True Range (ATR) indicator to determine the trend direction. It goes long when the trend goes up and goes short when the trend goes down. It belongs to the trend following strategy type.

The strategy first calculates the simple moving average (sma) and exponential moving average (ema) of the price. Then it calculates the ATR indicator, which is the average range of price movement over the past N days.

The strategy uses the ema average line, upper band (ema + ATR * coefficient) and lower band (ema - ATR * coefficient) to determine the trend direction. It goes long when the price breaks above the upper band, and goes short when the price breaks below the lower band.

Main logic in the code:

- Calculate price sma and ema averages
- Calculate ATR average range
- Calculate upper and lower bands
- Determine long signal: price breaks above upper band
- Determine short signal: price breaks below lower band
- Set stop loss to close positions: price breaks below upper band to close longs; price breaks above lower band to close shorts.

By dynamically adjusting positions based on ATR, it can effectively follow trend directions.

- Using ATR to determine trend direction can effectively capture price trends
- Stop loss based on moving averages can reasonably control risks
- Simple and clear strategy logic, easy to understand and implement
- Flexible configurable parameters, adaptable to different market environments

- ATR indicator will fail in highly volatile sideways markets
- Improper parameter settings may cause too frequent trading
- Sudden reversals can make stop loss invalid
- Higher trading costs require adjustment for tracking settings

Solutions:

- Pause strategy or use other indicators in high volatility
- Optimize parameters to reduce trading frequency
- Increase stop loss ratio for major data events
- Adjust ATR range based on specific products

- Combine with trend indicators to optimize parameters, e.g. add MACD for trend
- Add filters like Bollinger Bands for entry
- Optimize stop loss methods, like trailing stop or exit indicators
- Optimize ATR range based on specific products
- Add risk management like fixed fractional position sizing
- Dynamically optimize parameters using machine learning

The ATR trend following strategy has clear logic to determine trend direction using ATR. It is a typical trend following system. The advantages are simplicity and ability to follow trends. But it also has risks that require optimizations for different markets. Overall, it has great potential and value as a quantitative trading tool.

/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 1h basePeriod: 15m 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/ // © Investoz //@version=4 strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) len = input(26, type=input.integer, minval=1, title="Length") mul = input(2.618, type=input.float, minval=0, title="Length") mullow = input(2.386, type=input.float, minval=0, title="Length") price = sma(close, 1) average = ema(close, len) diff = atr(len) * mul difflow = atr(len) * mullow bull_level = average + diff bear_level = average - difflow bull_cross = crossunder(price, bear_level) bear_cross = crossunder(bull_level, price) FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2008, title = "From Year", minval = 2008) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2019) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) startTimeOk() => true if (startTimeOk()) and ema(close,1) > ema(close,528) strategy.entry("KOP", strategy.long, when=bull_cross) strategy.close("KOP", when=bear_cross) if (startTimeOk()) and ema(close,1) < ema(close,528) strategy.entry("SALJ", strategy.short, when=bear_cross) strategy.close("SALJ", when=bull_cross) plot(price, title="price", color=color.black, transp=50, linewidth=2) a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1) a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1) a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1) fill(a0, a1, color=color.green, transp=97) fill(a0, a2, color=color.red, transp=97)

- Dual Moving Average and Supertrend Strategy
- Closing Price Difference Based Short-term Trading Strategy
- Dual Momentum Strategy
- Combining DMI and Moving Average Trading Strategy
- Bollinger Bands, RSI, MACD and Stochastic Multi-indicator Fusion Trading Strategy
- Multivariate Indicator Fusion Strategy
- Indicator Verification Automated Trading Strategy
- Dual Moving Average Crossover Trend Tracking Strategy
- HLHB Trend-Catcher Strategy
- Auto Trading Strategy Based on STOCH
- Rate of Change Trading Strategy
- EMA Crossover Strategy
- Nine and Twenty Moving Average Crossover Strategy
- Hammer and Shooting Star Pattern Trading Strategy
- AlphaTrend Cross Period Strategy
- Rainbow Moving Average Trading Strategy
- Triple Moving Average Crossover and Williams Indicator Strategy
- RSI Signal Tracking Reversal Trading Strategy
- Short-term Trading Strategy Based on Stochastic Indicator with Elastic Stop Loss
- Triple EMA Momentum Strategy