이 전략은 퀀트노마드가 개발한 UT Bot 지표에 기반하고 있으며, 트레일링 스톱 로스의 아이디어를 포함하고 있다. 원래 코드는 @Yo_adriiiiaan에 의해 작성되고 @HPotter에 의해 수정되었다. 이 전략은 LuxAlgo
이 전략의 주요 원칙은 다음과 같습니다.
이 전략은 트렌드 시장에서 수익을 보호 할 수있는 트레일링 스톱 로직을 포함하고 UT Bot 지표에 기반합니다. 동시에 전략은 장기 및 단위 포지션에 대해 별도로 스톱 손실을 설정하여 매우 적응력이 있습니다. 트레일링 스톱에 대한 참조로 ATR을 사용하면 스톱 손실 포지션을 동적으로 조정하여 유연성을 향상시킬 수 있습니다. 그러나이 전략은 불안정한 시장에서 빈번한 스톱 아웃으로 인해 높은 거래 비용의 위험에 직면 할 수 있으며, 수익 기회를 놓칠 수있는 트레일링 수익 목표 설정이 부족합니다. 또한 매개 변수 선택은 전략 성능에 중요한 영향을 미칩니다.
향후, 전략은 입시 조건을 최적화하고, 더 복잡한 트레일링 스톱 방법을 탐구하고, 트레일링 수익 목표 메커니즘을 추가하고, 더 안정적인 수익을 얻기 위해 다른 품종과 주기에 대한 매개 변수를 최적화하여 개선 할 수 있습니다. 전반적으로 전략 아이디어는 간단하고 직설적이며, 이해하기 쉽고 구현하기 쉽지만, 더 많은 최적화를 위한 여지가 있으며 계속 탐색하고 개선하는 것이 가치가 있습니다.
/*backtest start: 2023-03-05 00:00:00 end: 2024-03-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Trailingstop", overlay=true) if close > sma(close, 50) strategy.entry("long", strategy.long) // Trailing stop loss for long positions Trailperc = 0.20 price_stop_long = 0.0 if (strategy.position_size > 0) stopValue = close * (1 - Trailperc) price_stop_long := max(stopValue, price_stop_long[1]) else price_stop_long := 0 if (strategy.position_size > 0) strategy.exit(id="stoploss_long", stop=price_stop_long) // Trailing stop loss for short positions Trailperc_short = 0.20 price_stop_short = 0.0 if (strategy.position_size < 0) stopValue_short = close * (1 + Trailperc_short) price_stop_short := min(stopValue_short, price_stop_short[1]) else price_stop_short := 0 if (strategy.position_size < 0) strategy.exit(id="stoploss_short", stop=price_stop_short) // ATR Trailing Stop for visualization keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5) atrperiod = input(10, title="ATR Period") xATR = atr(atrperiod) nLoss = keyvalue * xATR xATRTrailingStop = 0.0 xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = 0 pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")