
이 전략은 가격 돌파구와 동적으로 트래킹된 스톱로스를 기반으로 한 거래 시스템이다. 이 전략은 지능적인 스톱로스 메커니즘을 채택하고 있으며, 1%의 수익을 달성한 후에만 트래킹 스톱로스를 활성화하여 수익을 충분히 발전시킬 수 있다. 동시에 1시간의 냉각 시간을 설정하여 과도한 거래를 피하고, 각 거래의 품질을 향상시킨다.
전략의 핵심 논리는 다음과 같은 핵심 부분으로 구성됩니다.
이는 합리적으로 설계된 트렌드 추적 전략으로, 가격 돌파구와 동적 스톱로스를 결합하여 큰 트렌드를 포착하고 위험을 효과적으로 제어 할 수 있습니다. 전략은 커스터마이징이 강하며, 매개 변수를 최적화하여 다른 시장 환경에 적응 할 수 있습니다. 실물에서 작은 포지션에서 시작하여 다양한 시장 조건에서 전략을 점진적으로 검증하는 것이 좋습니다.
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/
//@version=5
//TSLA has the buest results on the 5 min or 1 hour chart
//NQ 15 minute
strategy("!! 🔥 Breakout Strategy with Trailing Stop", overlay=true,
default_qty_type=strategy.percent_of_equity, default_qty_value=100,
pyramiding=100)
// User inputs
var int lookbackBars = input.int(10, title="Lookback Bars", minval=1)
var float breakoutThresholdPct = input.float(0.05, title="Breakout Threshold Percentage", minval=0.0001, maxval=5, step=0.01)
var float stopLossPct = input.float(0.2, title="Stop Loss Percentage", minval=0.1) / 100
// Adjusted: No longer directly using takeProfitPct for a fixed take profit level
var float trailStartPct = input.float(0.5, title="Trail Start at Profit Percentage", minval=0.001) / 100
// Tracking the last entry time
var float lastEntryTime = na
// Calculate the highest high and lowest low over the last N bars excluding the current bar
float previousHigh = ta.highest(high[1], lookbackBars)
float previousLow = ta.lowest(low[1], lookbackBars)
// Entry condition adjusted to compare current price against the previous period's high/low
bool breakoutHigh = close > previousHigh * (1 + breakoutThresholdPct / 100) and (na(lastEntryTime) or (time - lastEntryTime) > 3600000 )
bool breakoutLow = close < previousLow * (1 - breakoutThresholdPct / 100) and (na(lastEntryTime) or (time - lastEntryTime) > 3600000 )
// Execute strategy based on the breakout condition
if (breakoutHigh)
strategy.entry("Breakout Buy", strategy.long)
lastEntryTime := time
else if (breakoutLow)
strategy.entry("Breakout Sell", strategy.short)
lastEntryTime := time
// Exiting the strategy with a trailing stop that starts after reaching 1% profit
// Adjusted: Implementing a dynamic trailing stop that activates after a 1% profit
if strategy.position_size > 0
strategy.exit("Trailing Stop Exit", "Breakout Buy", trail_points = close * trailStartPct, trail_offset = close * stopLossPct)
if strategy.position_size < 0
strategy.exit("Trailing Stop Exit", "Breakout Sell", trail_points = close * trailStartPct, trail_offset = close * stopLossPct)
// Visualization for debugging and analysis
plot(previousHigh, color=color.green, linewidth=2, title="Previous High")
plot(previousLow, color=color.red, linewidth=2, title="Previous Low")
// plotshape(series=breakoutHigh, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
// plotshape(series=breakoutLow, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")