
이것은 부린띠 평균값 회귀 원리에 기반한 거래 전략으로, 여러 스톱 레벨을 통해 분기 수익을 실현한다. 전략은 가격이 부린띠를 뚫고 돌아오는 경우에 거래하며, 5개의 다른 스톱 레벨을 설정하여 점진적으로 포지션을 감소시킨다. 동시에 위험을 제어하기 위해 다이내믹 스톱을 설정한다. 전략은 사용자 정의된 거래 시간 내에 실행할 수 있으며, 포지션 업그레이드를 지원한다.
이 전략은 20주기의 부린밴드 지표에 기반하며, 2배의 표준 차이를 변동 영역으로 사용한다. 가격이 아래에서 하향 경로를 돌파하고 상장하면 마이너스 신호를 쏘아 올린다. 가격이 위로부터 상장하고 상장하면 마이너스 신호를 쏘아 올린다. 진입 후, 이 전략은 5단계 스톱 메커니즘을 사용하며, 각각 0.5%, 1%, 1.5%, 2%, 2.5%의 위치에 스톱 포인트를 설정하며, 각 스톱 포인트는 포지션의 20%를 평행한다. 마지막 스톱 포인트는 상대적인 부린밴드 위치에 설정된다. 동시에 위험을 제어하기 위해 1%의 스톱 손실을 설정한다.
이 전략은 브린 벨트 지표를 통해 평균값 회귀 기회를 포착하고, 다단계 스톱과 동적 스톱로드를 사용하여 위험을 관리한다. 전략의 장점은 유연한 포지션 관리 및 위험 제어 장치에 있다. 그러나 사용 시 시장 환경에 대한 적합성에 주의를 기울여야 한다. 추가 필터링 지표를 추가하고 스톱 스톱로드 파라미터를 최적화함으로써 전략의 안정성과 수익성을 더욱 높일 수 있다.
/*backtest
start: 2025-02-19 10:00:00
end: 2025-02-20 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"BNB_USDT"}]
*/
//@version=5
strategy("Bollinger Band Reentry Strategy", overlay=true)
// Inputs
bbLength = input.int(20, title="Bollinger Band Length")
bbMult = input.float(2.0, title="Bollinger Band Multiplier")
stopLossPerc = input.float(1.0, title="Stop Loss (%)") / 100
tp1Perc = input.float(0.5, title="Take Profit 1 (%)") / 100
tp2Perc = input.float(1.0, title="Take Profit 2 (%)") / 100
tp3Perc = input.float(1.5, title="Take Profit 3 (%)") / 100
tp4Perc = input.float(2.0, title="Take Profit 4 (%)") / 100
tp5Perc = input.float(2.5, title="Take Profit 5 (%)") / 100
allowAddToPosition = input.bool(true, title="Allow Adding to Position")
customSession = input.timeframe("0930-1600", title="Custom Trading Session")
// Calculate Bollinger Bands
basis = ta.sma(close, bbLength)
dev = ta.stdev(close, bbLength)
upperBB = basis + bbMult * dev
lowerBB = basis - bbMult * dev
// Plot Bollinger Bands
plot(upperBB, color=color.red, title="Upper Bollinger Band")
plot(lowerBB, color=color.green, title="Lower Bollinger Band")
plot(basis, color=color.blue, title="Bollinger Band Basis")
// Entry Conditions
longCondition = (ta.crossover(close, lowerBB) or (low < lowerBB and close > lowerBB)) and time(timeframe.period, customSession)
shortCondition = (ta.crossunder(close, upperBB) or (high > upperBB and close < upperBB)) and time(timeframe.period, customSession)
// Execute Trades
if (longCondition)
strategy.entry("Long", strategy.long, when=allowAddToPosition or strategy.position_size == 0)
if (shortCondition)
strategy.entry("Short", strategy.short, when=allowAddToPosition or strategy.position_size == 0)
// Take-Profit and Stop-Loss Levels for Long Trades
if (strategy.position_size > 0)
strategy.exit("TP1", "Long", limit=strategy.position_avg_price * (1 + tp1Perc), qty=strategy.position_size * 0.2) // Take 20% profit
strategy.exit("TP2", "Long", limit=strategy.position_avg_price * (1 + tp2Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP3", "Long", limit=strategy.position_avg_price * (1 + tp3Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP4", "Long", limit=strategy.position_avg_price * (1 + tp4Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP5", "Long", limit=upperBB, qty=strategy.position_size * 0.2) // Take final 20% at opposite band
strategy.exit("Stop Loss", "Long", stop=strategy.position_avg_price * (1 - stopLossPerc))
// Take-Profit and Stop-Loss Levels for Short Trades
if (strategy.position_size < 0)
strategy.exit("TP1", "Short", limit=strategy.position_avg_price * (1 - tp1Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP2", "Short", limit=strategy.position_avg_price * (1 - tp2Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP3", "Short", limit=strategy.position_avg_price * (1 - tp3Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP4", "Short", limit=strategy.position_avg_price * (1 - tp4Perc), qty=strategy.position_size * 0.2)
strategy.exit("TP5", "Short", limit=lowerBB, qty=strategy.position_size * 0.2)
strategy.exit("Stop Loss", "Short", stop=strategy.position_avg_price * (1 + stopLossPerc))
// Alerts
alertcondition(longCondition, title="Long Signal", message="Price closed inside Bollinger Band from below.")
alertcondition(shortCondition, title="Short Signal", message="Price closed inside Bollinger Band from above.")