
이 전략은 이동 평균 트렌드 추적과 동적 스톱을 결합한 거래 시스템입니다. 그것은 MACD를 사용하여 가격 움직임을 포착하고, EMA를 사용하여 트렌드를 확인하고, ATR을 사용하여 동적 스톱 위치를 설정합니다. 이 다차원 분석 방법은 시장 기회를 신속하게 파악하고 위험을 효과적으로 제어합니다.
이 전략의 핵심 논리는 세 가지의 차원을 포함합니다.
이 전략은 트렌드 추적, 동적 분석 및 동적 위험 제어를 결합하여 완전한 거래 시스템을 구축한다. 그것의 주요 특징은 전략의 안정성을 유지하면서 시장 기회의 효과적인 포착과 거래 위험의 동적 통제를 구현한다. 일부 고유한 위험이 있지만, 합리적인 매개 변수 설정과 지속적인 최적화를 통해이 전략은 실전 응용 가치있다.
/*backtest
start: 2024-09-25 00:00:00
end: 2025-02-19 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("MACD + ATR Dynamic Stop-Loss Strategy", overlay=true)
// Input parameters
macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalSmoothing = input.int(9, title="MACD Signal Smoothing")
atrLength = input.int(14, title="ATR Length")
stopLossMultiplier = input.float(1.0, title="Stop-Loss ATR Multiplier")
useTrailingStop = input.bool(true, title="Use Trailing Stop")
trailATRMultiplier = input.float(2.0, title="Trailing Stop ATR Multiplier")
emaLength = input.int(20, title="EMA Length")
// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)
// Calculate ATR
atr = ta.atr(atrLength)
// Calculate 20-period EMA
ema20 = ta.ema(close, emaLength)
// Entry Conditions
buyCondition = ta.crossover(macdLine, signalLine) and close > ema20
sellCondition = ta.crossunder(macdLine, signalLine)
// Plot Buy and Sell Signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
// Dynamic Stop-Loss and Trailing Stop Logic
var float stopLossLevel = na
var float trailingStopLevel = na
if (buyCondition)
stopLossLevel := close - atr * stopLossMultiplier
trailingStopLevel := close - atr * trailATRMultiplier
if (strategy.position_size > 0)
if (useTrailingStop)
trailingStopLevel := math.max(trailingStopLevel, close - atr * trailATRMultiplier)
stopLossLevel := trailingStopLevel
strategy.exit("Trailing Stop", stop=stopLossLevel)
// Execute Trades
if (buyCondition)
strategy.entry("Long", strategy.long)
if (sellCondition)
strategy.close("Long")
// Plot Stop-Loss Level
plot(stopLossLevel, title="Stop-Loss Level", color=color.red, linewidth=1, style=plot.style_linebr)