이 전략의 가장 특징적인 특징은 ATR 기반의 출구 레벨 4개와 고정된 비율 레벨 3개를 결합한 독특한 7단계 수익 취득 메커니즘이다. 이 하이브리드 접근 방식은 거래자가 장기 및 단위 시장 포지션 모두에서 수익을 체계적으로 캡처하면서 시장 변동성에 동적으로 조정할 수 있게 해준다. 이 전략은 동적인 ATR 계산, 트렌드 강도 탐지 및 여러 수익 취득 메커니즘의 조합을 통해 포괄적인 거래 솔루션을 제공한다.
이 전략은 몇 가지 핵심 요소를 통해 작동합니다.
이 전략은 트레이더들에게 적응성 있는 ATR과 다층 수익 취득 메커니즘을 결합함으로써 포괄적인 거래 시스템을 제공한다. 이 전략의 강점은 체계적인 접근을 통해 위험을 관리하면서 다른 시장 조건에 적응할 수 있는 능력에 있다. 잠재적인 위험이 있지만, 이 전략은 적절한 최적화와 위험 관리를 통해 효과적인 거래 도구가 될 수 있다. 이 혁신적인 다층 수익 취득 메커니즘은 특히 위험 통제를 유지하면서 수익을 극대화하려는 트레이더들에게 적합하다.
/*backtest start: 2024-11-04 00:00:00 end: 2024-12-04 00:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © PresentTrading // The SuperATR 7-Step Profit Strategy is a multi-layered trading strategy that combines adaptive ATR and momentum-based trend detection // with a sophisticated 7-step take-profit mechanism. This approach utilizes four ATR-based exit levels and three fixed percentage levels, // enabling flexible and dynamic profit-taking in both long and short market positions. //@version=5 strategy("SuperATR 7-Step Profit - Strategy [presentTrading] ", overlay=true, precision=3, commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=10000) // ———————— // User Inputs // ———————— short_period = input.int(3, minval=1, title="Short Period") long_period = input.int(7, minval=1, title="Long Period") momentum_period = input.int(7, minval=1, title="Momentum Period") atr_sma_period = input.int(7, minval=1, title="ATR SMA Period for Confirmation") trend_strength_threshold = input.float(1.618, minval=0.0, title="Trend Strength Threshold", step=0.1) // ———————— // Take Profit Inputs // ———————— useMultiStepTP = input.bool(true, title="Enable Multi-Step Take Profit") // ATR-based Take Profit Inputs atrLengthTP = input.int(14, minval=1, title="ATR Length for Take Profit") atrMultiplierTP1 = input.float(2.618, minval=0.1, title="ATR Multiplier for TP Level 1") atrMultiplierTP2 = input.float(5.0, minval=0.1, title="ATR Multiplier for TP Level 2") atrMultiplierTP3 = input.float(10.0, minval=0.1, title="ATR Multiplier for TP Level 3") atrMultiplierTP4 = input.float(13.82, minval=0.1, title="ATR Multiplier for TP Level 4") // Fixed Percentage Take Profit Inputs tp_level_percent1 = input.float(3.0, minval=0.1, title="Fixed TP Level 1 (%)") tp_level_percent2 = input.float(8.0, minval=0.1, title="Fixed TP Level 2 (%)") tp_level_percent3 = input.float(17.0, minval=0.1, title="Fixed TP Level 3 (%)") // Take Profit Percentages for Each Level tp_percent_atr = input.float(10.0, minval=0.1, maxval=100, title="Percentage to Exit at Each ATR TP Level") tp_percent_fixed = input.float(10.0, minval=0.1, maxval=100, title="Percentage to Exit at Each Fixed TP Level") // ————————————— // Helper Functions // ————————————— // Function to calculate True Range with enhanced volatility detection calculate_true_range() => prev_close = close[1] tr1 = high - low tr2 = math.abs(high - prev_close) tr3 = math.abs(low - prev_close) true_range = math.max(tr1, tr2, tr3) true_range // ——————————————— // Indicator Calculations // ——————————————— // Calculate True Range true_range = calculate_true_range() // Calculate Momentum Factor momentum = close - close[momentum_period] stdev_close = ta.stdev(close, momentum_period) normalized_momentum = stdev_close != 0 ? (momentum / stdev_close) : 0 momentum_factor = math.abs(normalized_momentum) // Calculate Short and Long ATRs short_atr = ta.sma(true_range, short_period) long_atr = ta.sma(true_range, long_period) // Calculate Adaptive ATR adaptive_atr = (short_atr * momentum_factor + long_atr) / (1 + momentum_factor) // Calculate Trend Strength price_change = close - close[momentum_period] atr_multiple = adaptive_atr != 0 ? (price_change / adaptive_atr) : 0 trend_strength = ta.sma(atr_multiple, momentum_period) // Calculate Moving Averages short_ma = ta.sma(close, short_period) long_ma = ta.sma(close, long_period) // Determine Trend Signal trend_signal = (short_ma > long_ma and trend_strength > trend_strength_threshold) ? 1 : (short_ma < long_ma and trend_strength < -trend_strength_threshold) ? -1 : 0 // Calculate Adaptive ATR SMA for Confirmation adaptive_atr_sma = ta.sma(adaptive_atr, atr_sma_period) // Determine if Trend is Confirmed with Price Action trend_confirmed = (trend_signal == 1 and close > short_ma and adaptive_atr > adaptive_atr_sma) or (trend_signal == -1 and close < short_ma and adaptive_atr > adaptive_atr_sma) // ————————————— // Trading Logic // ————————————— // Entry Conditions long_entry = trend_confirmed and trend_signal == 1 short_entry = trend_confirmed and trend_signal == -1 // Exit Conditions long_exit = strategy.position_size > 0 and short_entry short_exit = strategy.position_size < 0 and long_entry // Execute Long Trades if long_entry strategy.entry("Long Entry", strategy.long) if long_exit strategy.close("Long Entry") // Execute Short Trades if short_entry strategy.entry("Short Entry", strategy.short) if short_exit strategy.close("Short Entry") // ———————————————— // Multi-Step Take Profit Logic // ———————————————— if useMultiStepTP // Calculate ATR for Take Profit Levels atrValueTP = ta.atr(atrLengthTP) // Long Position Take Profit Levels if strategy.position_size > 0 // ATR-based Take Profit Prices tp_priceATR1_long = strategy.position_avg_price + atrMultiplierTP1 * atrValueTP tp_priceATR2_long = strategy.position_avg_price + atrMultiplierTP2 * atrValueTP tp_priceATR3_long = strategy.position_avg_price + atrMultiplierTP3 * atrValueTP tp_priceATR4_long = strategy.position_avg_price + atrMultiplierTP4 * atrValueTP // Fixed Percentage Take Profit Prices tp_pricePercent1_long = strategy.position_avg_price * (1 + tp_level_percent1 / 100) tp_pricePercent2_long = strategy.position_avg_price * (1 + tp_level_percent2 / 100) tp_pricePercent3_long = strategy.position_avg_price * (1 + tp_level_percent3 / 100) // Set ATR-based Take Profit Exits strategy.exit("TP ATR 1 Long", from_entry="Long Entry", qty_percent=tp_percent_atr, limit=tp_priceATR1_long) strategy.exit("TP ATR 2 Long", from_entry="Long Entry", qty_percent=tp_percent_atr, limit=tp_priceATR2_long) strategy.exit("TP ATR 3 Long", from_entry="Long Entry", qty_percent=tp_percent_atr, limit=tp_priceATR3_long) strategy.exit("TP ATR 4 Long", from_entry="Long Entry", qty_percent=tp_percent_atr, limit=tp_priceATR4_long) // Set Fixed Percentage Take Profit Exits strategy.exit("TP Percent 1 Long", from_entry="Long Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent1_long) strategy.exit("TP Percent 2 Long", from_entry="Long Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent2_long) strategy.exit("TP Percent 3 Long", from_entry="Long Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent3_long) // Short Position Take Profit Levels if strategy.position_size < 0 // ATR-based Take Profit Prices tp_priceATR1_short = strategy.position_avg_price - atrMultiplierTP1 * atrValueTP tp_priceATR2_short = strategy.position_avg_price - atrMultiplierTP2 * atrValueTP tp_priceATR3_short = strategy.position_avg_price - atrMultiplierTP3 * atrValueTP tp_priceATR4_short = strategy.position_avg_price - atrMultiplierTP4 * atrValueTP // Fixed Percentage Take Profit Prices tp_pricePercent1_short = strategy.position_avg_price * (1 - tp_level_percent1 / 100) tp_pricePercent2_short = strategy.position_avg_price * (1 - tp_level_percent2 / 100) tp_pricePercent3_short = strategy.position_avg_price * (1 - tp_level_percent3 / 100) // Set ATR-based Take Profit Exits strategy.exit("TP ATR 1 Short", from_entry="Short Entry", qty_percent=tp_percent_atr, limit=tp_priceATR1_short) strategy.exit("TP ATR 2 Short", from_entry="Short Entry", qty_percent=tp_percent_atr, limit=tp_priceATR2_short) strategy.exit("TP ATR 3 Short", from_entry="Short Entry", qty_percent=tp_percent_atr, limit=tp_priceATR3_short) strategy.exit("TP ATR 4 Short", from_entry="Short Entry", qty_percent=tp_percent_atr, limit=tp_priceATR4_short) // Set Fixed Percentage Take Profit Exits strategy.exit("TP Percent 1 Short", from_entry="Short Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent1_short) strategy.exit("TP Percent 2 Short", from_entry="Short Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent2_short) strategy.exit("TP Percent 3 Short", from_entry="Short Entry", qty_percent=tp_percent_fixed, limit=tp_pricePercent3_short) // —————————— // Plotting // —————————— plot(short_ma, color=color.blue, title="Short MA") plot(long_ma, color=color.orange, title="Long MA") // Plot Buy and Sell Signals //plotshape(long_entry, title="Long Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, text="Buy") //plotshape(short_entry, title="Short Entry", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, text="Sell") // Optional: Plot Trend Strength for analysis // Uncomment the lines below to display Trend Strength on a separate chart pane // plot(trend_strength, title="Trend Strength", color=color.gray) // hline(trend_strength_threshold, title="Trend Strength Threshold", color=color.gray, linestyle=hline.style_dashed) // hline(-trend_strength_threshold, title="Trend Strength Threshold", color=color.gray, linestyle=hline.style_dashed)