Tags:

This strategy uses the ADX indicator to determine the market trend, combines with the DMI indicator to determine direction, utilizes the ADX slope to gauge trend strength, sets the ADX key level to filter non-trending markets, and uses a moving average to filter trade signals.

- Calculate the ADX, DI+, and DI- indicators.
- ADX slope > 0 indicates an increasing trend; key level is set to 23 to filter non-trending markets.
- DI+ above DI- signifies bullish momentum overrides bearish momentum, giving a buy signal.
- When moving average filter is enabled, only generate buy signals when close is above the moving average.
- Close positions when ADX slope < 0, indicating fading trend.

- MA filter reduces noise trades in non-trending markets.
- ADX slope accurately determines trend strength.
- DI indicates direction combined with ADX for strength forms a robust trend trading system.
- Expect lower drawdown and higher profit factor than simple MA strategies.

- ADX results vary significantly with different input parameters.
- DMI may give false signals before direction is clearly determined.
- Some lag exists, reducing strategy efficiency.

- Optimize ADX parameters for best results.
- Add stop loss to limit loss on single trades.
- Try combining other indicators to filter signals, e.g. RSI, Bollinger Bands.

This strategy fully utilizes ADX’s strength in determining trend and momentum, combined with DMI for direction analysis, forming a complete trend following system. The MA filter effectively reduces noise. Further parameter tuning and indicator combinations may improve robustness and efficiency. In summary, by incorporating trend, momentum and direction analysis, this strategy has the potential to achieve strong returns.

/*backtest start: 2024-01-08 00:00:00 end: 2024-01-15 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e //The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). //This is to identify when it is trending. //It then looks at the DMI levels. If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition. Opposite for short. //Can use a user-defined moving average to filter long/short if desried. // NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH. strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04) // === BACKTEST RANGE === From_Year = input(defval = 2019, title = "From Year") From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12) From_Day = input(defval = 1, title = "From Day", minval = 1, maxval = 31) To_Year = input(defval = 9999, title = "To Year") To_Month = input(defval = 1, title = "To Month", minval = 1, maxval = 12) To_Day = input(defval = 1, title = "To Day", minval = 1, maxval = 31) Start = timestamp(From_Year, From_Month, From_Day, 00, 00) // backtest start window Finish = timestamp(To_Year, To_Month, To_Day, 23, 59) // backtest finish window // == INPUTS == // ADX Info adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Period") keyLevel = input(23, title="Keylevel for ADX") adxLookback = input(3, title="Lookback Period for Slope") // == FILTERING == // Inputs useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true) maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering") maLength = input(defval = 200, title = "MA Period for Filtering", minval = 1) // Declare function to be able to swap out EMA/SMA ma(maType, src, length) => maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc) maFilter = ma(maType, close, maLength) plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50) // Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry maFilterCheck = if useMaFilter == true maFilter else close // == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH [diplus, diminus, adx] = dmi(dilen, adxlen) buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus and close >= maFilterCheck // buySignalValue = valuewhen(buySignal, close, 0) shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus and close <= maFilterCheck // shortSignalValue = valuewhen(shortSignal, close, 0) sellCoverSignal = adx[0]-adx[adxLookback] < 0 // == ENTRY & EXIT CRITERIA // Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal). // (1): Price is over the 200 EMA line. (EMA level configurable by the user) // (2): "D+" is OVER the "D-" line // (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70) // 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal // == STRATEGY ENTRIES/EXITS == strategy.entry("Long", strategy.long, when = buySignal) strategy.close("Long", when = sellCoverSignal) strategy.entry("Short", strategy.short, when = shortSignal) strategy.close("Short", when = sellCoverSignal) // == ALERTS == // alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy') // alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')

- RSI Indicator Based Short-term Trading Strategy
- Moving Average and Super Trend Tracking Stop Loss Strategy
- Linear Regression Channel Strategy
- Combination Trading Strategy Based on Dual EMA and Bandpass Filter
- Trend Tracking Trailing Stop Strategy
- Key Reversal Backtest Strategy
- Triangular Moving Average Crossover Trading Strategy
- Quantitative Trading Strategy Based on Moving Average
- Trend Following Strategy Based on Price Action and Volume
- Ichimoku Kinko Hyo Breakout Strategy
- Combination Strategy of 123 Reversal and Pivot Point
- Moving Average and Stochastic RSI Combination Trading Strategy
- Dynamic Trend Tracking Reversal Strategy
- Daily DCA Strategy with Touching EMAs
- Trend Strength Confirm Bars Strategy
- Super Trend Dual Moving Average Strategy
- WaveTrend and DER Based Swing Trading Strategy
- Hull Fisher Adaptive Intelligent Multi-factor Strategy
- Dynamic Position Sizing Strategy Based on Equity Curve
- Dual Trend Tracking Strategy