
This strategy is a multi-technical indicator-based trend following and momentum trading system. It combines the Average Directional Index (ADX), Relative Strength Index (RSI), and Average True Range (ATR) to identify potential long opportunities and uses ATR for dynamic profit and stop-loss levels. The strategy is particularly suitable for 1-minute timeframe options trading, utilizing strict entry conditions and risk management to improve trading success rate.
The core logic includes several key components: 1. Trend Confirmation: Uses ADX>18 and +DI greater than -DI to confirm an upward trend. 2. Momentum Verification: Requires RSI to break above 60 and stay above its 20-period moving average to verify price momentum. 3. Entry Timing: Establishes long positions at current closing price when both trend and momentum conditions are met. 4. Target Management: Sets dynamic profit targets (2.5x ATR) and stop-loss levels (1.5x ATR) based on ATR at entry.
This strategy constructs a complete trading system by comprehensively utilizing multiple technical indicators. Its strength lies in combining trend and momentum analysis with dynamic risk management methods. While certain risks exist, stable performance can be achieved through proper parameter optimization and risk control measures. Traders are advised to thoroughly backtest and optimize parameters before live trading, and make appropriate adjustments based on specific trading instrument characteristics.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © SPcuttack
//@version=6
strategy("ADX & RSI Strategy with ATR Targets", overlay=true)
// Input parameters
adxLength = input.int(14, title="ADX Length")
adxSmoothing = input.int(14, title="ADX Smoothing")
rsiLength = input.int(14, title="RSI Length")
rsiSmaLength = input.int(20, title="RSI SMA Length")
atrLength = input.int(14, title="ATR Length")
atrMultiplierTarget = input.float(2.5, title="ATR Multiplier for Target")
atrMultiplierStop = input.float(1.5, title="ATR Multiplier for Stop Loss")
// ADX and DMI calculations
[adx, plusDI, minusDI] = ta.dmi(adxLength, adxSmoothing)
// RSI calculations
rsi = ta.rsi(close, rsiLength)
rsiSma = ta.sma(rsi, rsiSmaLength)
// ATR calculation
atr = ta.atr(atrLength)
// Slope calculations (difference from the previous value)
adxSlope = adx - adx[1]
rsiSlope = rsi - rsi[1]
// Entry conditions
adxCondition = adx > 18 and plusDI > minusDI and adxSlope > 0
rsiCondition = rsi > rsiSma and rsiSlope > 0
rsiCross60 = ta.crossover(rsi, 60)
// Global variable for long entry
var bool longEntry = false
if (adxCondition and rsiCondition and rsiCross60)
longEntry := true
else
longEntry := false
// Variables for target and stop loss levels
var float entryPrice = na
var float targetLevel = na
var float stopLossLevel = na
// Strategy actions
if (longEntry)
entryPrice := close
targetLevel := entryPrice + atr * atrMultiplierTarget
stopLossLevel := entryPrice - atr * atrMultiplierStop
strategy.entry("Long", strategy.long)
if (strategy.position_size > 0)
if (close >= targetLevel)
strategy.close("Long", comment="Tgt Hit")
if (close <= stopLossLevel)
strategy.close("Long", comment="SL Hit")
// Ensure lines plot on the chart body
targetLine = strategy.position_size > 0 ? targetLevel : na
stopLossLine = strategy.position_size > 0 ? stopLossLevel : na
plot(targetLine, title="Target Level", color=color.green, linewidth=2, offset=0)
plot(stopLossLine, title="Stop Loss Level", color=color.red, linewidth=2, offset=0)
// Add entry price for reference
plot(strategy.position_size > 0 ? entryPrice : na, title="Entry Price", color=color.blue, linewidth=1, style=plot.style_cross, offset=0)