
Đây là một chiến lược giao dịch đa tầng kết hợp tính toán ATR tự điều chỉnh và phát hiện xu hướng dựa trên động lực. Đặc điểm nổi bật nhất của chiến lược này là cơ chế kiếm lợi nhuận 7 bước độc đáo của nó, kết hợp 4 mức thoát dựa trên ATR và 3 mức phần trăm cố định. Phương pháp hỗn hợp này cho phép các nhà giao dịch điều chỉnh động theo biến động của thị trường, đồng thời thu lợi nhuận một cách có hệ thống trong thị trường đa tầng.
Nền tảng của chiến lược hoạt động thông qua các thành phần quan trọng sau:
Chiến lược này cung cấp cho các nhà giao dịch một hệ thống giao dịch toàn diện bằng cách kết hợp ATR tự điều chỉnh và cơ chế lợi nhuận nhiều cấp. Ưu điểm của nó là có thể thích ứng với các điều kiện thị trường khác nhau trong khi quản lý rủi ro thông qua một phương pháp có hệ thống. Mặc dù có một số rủi ro tiềm ẩn, chiến lược này có thể trở thành một công cụ giao dịch hiệu quả với việc tối ưu hóa và quản lý rủi ro thích hợp.
/*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)