이 전략은 동적 트레일링 스톱 트레이딩 시스템을 구현하기 위해 ATR (평균 참 범위) 지표와 SMA (단순 이동 평균) 지표를 결합합니다. 가격이 SMA보다 높을 때, 긴 포지션을 열고 ATR에 기반한 동적 스톱 손실을 설정합니다. 스톱 손실 가격은 가격이 상승함에 따라 계속 상승합니다. 가격이 동적 스톱 손실 가격 이하로 떨어지면 포지션은 닫습니다. 이 전략의 주요 아이디어는 동적 스톱 손실을 사용하여 트렌드 시장에서 수익을 잠금하고 인출을 줄이는 것입니다.
이 전략은 ATR 및 SMA 지표에 기반한 동적 트레일링 스톱 트레이딩 시스템을 구현하여 트렌드 시장에서 수익을 보호하고 위험을 제어하기 위해 자동으로 스톱 손실 위치를 조정할 수 있습니다. 전략 논리는 명확하고 명백한 장점이 있지만 일부 제한과 위험 지점도 있습니다. 짧은 논리를 추가하고 위치 관리를 최적화하고 최대 스톱 손실을 설정하는 등의 합리적인 최적화 및 개선으로 전략의 견고성과 수익성을 더욱 향상시킬 수 있습니다. 실제 응용에서는 다양한 거래 품종과 주기에 따라 전략 매개 변수를 유연하게 조정하고 위험을 엄격히 제어해야합니다. 일반적으로이 전략은 양적 거래에 대한 실현 가능한 아이디어를 제공하며 추가 탐구와 최적화에 가치가 있습니다.
/*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")