이 전략은 동적 스톱 손실 수준을 설정하기 위해 다른 매개 변수와 함께 두 개의 ATR 스톱을 사용합니다. 한 개의 빠른 스톱과 한 개의 느린 스톱. 다른 스톱 레벨의 가격 브레이크에 따라 긴 포지션을 설정하고 후속 스톱을 사용하여 포지션을 종료합니다. 목표는 트렌드를 따르는 능력을 극대화하면서 합리적인 스톱 손실 수준을 설정하기 위해 ATR 스톱을 사용하는 것입니다.
이 전략은 두 개의 스톱 로스 레벨을 계산하기 위해 ATR 지표를 사용합니다. 빠른 스톱은 5 기간 ATR을 0.5로 곱한 스톱 거리를 사용합니다. 느린 스톱은 10 기간 ATR을 3로 곱한 스톱 거리를 사용합니다. 가격이 빠른 스톱 수준을 넘으면 긴 포지션이 설정됩니다. 가격이 느린 스톱 수준을 넘어가면 스톱은 느린 스톱 수준으로 조정됩니다. 가격이 내려가면 스톱 레벨은 크로스 오버 관계를 기반으로 조정됩니다.
논리는 다음과 같습니다.
빠른 정지 트레일1: 5기 ATR * 0.5를 계산
느린 정지 트레일2를 계산합니다: 10주기 ATR * 3
가격이 트레일1 위를 넘을 때, 긴 포지션을 설정합니다.
가격이 트레일2 위를 넘어가면 트레일2로 정지 조정
가격이 트레일1을 깨면 트레일1으로 정지합니다.
만약 가격이 계속 하락하면 트레일2를 깨고 트레일2로 정지한다
마지막으로, 가격이 스톱 레벨에 도달하면, 스톱 손실로 지위를 종료
이러한 방식으로 전략은 추후 정지로 상승 추세 동안 이익을 극대화 할 수 있으며 추세가 역전되면 손실을 신속하게 중단 할 수 있습니다. 두 정지는 또한 추세를 포착하고 손실을 제한하는 균형을 이루고 있습니다.
ATR 스톱은 시장 변동성에 기초하여 동적 스톱 손실 수준을 설정합니다.
이중 정지 메커니즘은 손실을 멈추고 추세를 추적하는 균형을 유지합니다.
긴 방향은 전반적인 상승 추세와 일치하고 수익성이 높습니다.
단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉬운
엄격한 스톱 로스 규칙은 손실을 효과적으로 제한합니다.
부적절한 ATR 매개 변수는 너무 넓거나 너무 단단한 정지로 이어질 수 있습니다.
긴 방향은 방향 편향을 가지고 있으며 시장 최고점에 멈출 수 있습니다.
이중 정지 규칙은 복잡하고, 제대로 설정하지 않으면 실패할 수 있습니다.
EMA 크로스오버와 같은 필터가 없으므로 나쁜 거래가 발생할 수 있습니다.
포지션 관리 또는 리스크 관리, 과잉 거래 위험
이러한 위험은 ATR 매개 변수를 최적화하고 필터를 추가하고 위험 관리를 강화함으로써 감소할 수 있습니다.
최상의 결과를 위해 ATR 매개 변수 조합을 최적화
입력 신호를 평가하기 위해 EMA와 같은 필터를 추가
추가 우위를 위해 스톡 RSI와 같은 지표를 포함
위치 관리 최적화를 위해 재입구 논리를 추가
거래별 스톱 손실을 제한하기 위해 리스크 관리 규칙을 최적화합니다.
방향 오류를 피하기 위해 시장 수준의 분석을 통합하십시오.
더 빠른 시간 프레임 전략을 고려
다중 시장 보편적 전략으로 확장
고성능 거래 엔진을 배포
이러한 개선으로 전략은 더 견고하고 안정적이며 수익성이 높을 수 있습니다.
이 전략은 긴 진입 및 출구에 대한 명확한 ATR 트레일링 스톱을 사용합니다. 장점은 트렌드를 추적하는 동안 손실을 제한하기 위해 엄격한 스톱 로스 규칙에 있습니다. 더 나은 매개 변수, 필터 추가 및 리스크 관리 강화와 같은 최적화로 감소 할 수있는 방향 편향 위험을 가지고 있습니다. 추가 테스트 및 개선으로 이것은 신뢰할 수있는 트렌드 다음 전략이 될 수 있습니다.
/*backtest start: 2023-10-25 00:00:00 end: 2023-11-01 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("ATR Trailing Stop Strategy (Long Position Only)", overlay=true) SC = input(close, "Source", input.source) // Fast Trail AP1 = input(5, "Fast ATR period", input.integer) AF1 = input(0.5, "Fast ATR multiplier", input.float) SL1 = AF1 * atr(AP1) Trail1 = 0.0 Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0), SC + SL1, na)) // Slow Trail AP2 = input(10, "Slow ATR period", input.integer) AF2 = input(3, "Slow ATR multiplier", input.float) SL2 = AF2 * atr(AP2) Trail2 = 0.0 Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0), SC + SL2, na)) Green = Trail1 > Trail2 and close > Trail2 and low > Trail2 Buy = crossover(Trail1, Trail2) plotshape(Buy, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) strategy.entry("Buy", strategy.long, when = Buy) var float trailingStopPrice = na if (Trail2 > trailingStopPrice) trailingStopPrice := Trail2 if (crossover(Trail1, Trail2)) trailingStopPrice := Trail2 strategy.exit("Exit", from_entry = "Buy", stop=trailingStopPrice)