
이 전략은 부린 밴드 (Bollinger Bands) 와 ATR 추적 스톱을 결합한 적응 거래 시스템이다. 이 전략은 부린을 타고 하향 경로를 돌파하여 입문 신호를 결정하며, ATR 기반의 동적 추적 스톱을 사용하여 위험을 관리하고 출구 시기를 결정한다. 이 전략은 시장 추세가 분명할 때 트렌드 기회를 잡을 수 있으며, 동시에 흔들리는 시장에서 보호를 제공합니다.
이 전략의 핵심 논리는 크게 두 가지로 이루어져 있습니다.
이 전략은 브린 밴드와 ATR 추적 스톱로스를 결합하여 트렌드 캡처 및 위험 제어 능력을 겸비한 거래 시스템을 구축한다. 전략의 적응 특성은 다양한 시장 환경에서 안정성을 유지할 수 있게 해 주며, 명확한 신호 시스템은 객관적인 거래 근거를 제공한다. 제안된 최적화 방향을 통해 전략에는 더 많은 개선이 가능하다. 실제 적용에서 투자자는 자신의 위험 선호도와 거래 유형 특성에 따라 파라미터를 타겟 조정하도록 권장한다.
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("ATR Trailing Stop Loss with Bollinger Bands", overlay=true)
// Input parameters for Bollinger Bands
bb_length = input.int(20, title="Bollinger Bands Length")
bb_stddev = input.float(2.0, title="Bollinger Bands Std Dev")
// Input parameters for ATR Trailing Stop Loss
atr_length = input.int(14, title="ATR Length")
atr_multiplier = input.float(3.0, title="ATR Multiplier")
// Calculate Bollinger Bands
basis = ta.sma(close, bb_length)
upper_band = ta.sma(close, bb_length) + ta.stdev(close, bb_length) * bb_stddev
lower_band = ta.sma(close, bb_length) - ta.stdev(close, bb_length) * bb_stddev
// Calculate ATR
atr = ta.atr(atr_length)
// Trailing Stop Loss Calculation
var float long_stop = na // Explicitly define as float type
var float short_stop = na // Explicitly define as float type
if (strategy.position_size > 0)
long_stop := close - atr * atr_multiplier
long_stop := math.max(long_stop, nz(long_stop[1], long_stop))
else
long_stop := na
if (strategy.position_size < 0)
short_stop := close + atr * atr_multiplier
short_stop := math.min(short_stop, nz(short_stop[1], short_stop))
else
short_stop := na
// Entry and Exit Conditions
long_condition = ta.crossover(close, lower_band) // Enter long when price crosses above lower band
short_condition = ta.crossunder(close, upper_band) // Enter short when price crosses below upper band
exit_long_condition = ta.crossunder(close, long_stop) // Exit long when price crosses below trailing stop
exit_short_condition = ta.crossover(close, short_stop) // Exit short when price crosses above trailing stop
// Execute Trades
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)
if (exit_long_condition)
strategy.close("Long")
if (exit_short_condition)
strategy.close("Short")
// Plot Bollinger Bands
plot(basis, color=color.blue, title="Basis")
plot(upper_band, color=color.red, title="Upper Band")
plot(lower_band, color=color.green, title="Lower Band")
// Plot Trailing Stop Loss
plot(strategy.position_size > 0 ? long_stop : na, color=color.orange, title="Long Trailing Stop")
plot(strategy.position_size < 0 ? short_stop : na, color=color.purple, title="Short Trailing Stop")
// Labels for Entry and Exit
if (long_condition)
label.new(bar_index, low, text="Entry Long", style=label.style_circle, color=color.green, textcolor=color.white, size=size.small)
if (short_condition)
label.new(bar_index, high, text="Entry Short", style=label.style_circle, color=color.red, textcolor=color.white, size=size.small)
if (exit_long_condition)
label.new(bar_index, low, text="Exit Long", style=label.style_circle, color=color.blue, textcolor=color.white, size=size.small)
if (exit_short_condition)
label.new(bar_index, high, text="Exit Short", style=label.style_circle, color=color.orange, textcolor=color.white, size=size.small)