이 전략은 스톱 로스 가격을 설정하기 위해 ATR 지표를 사용합니다. ATR은 시장의 변동성을 반영하고 동적으로 스톱 로스 거리를 설정하는 데 사용할 수 있습니다. 이 전략은 사용자 입력 ATR 기간과 곱셈에 따라 ATR 값을 계산하고 스톱 로스 거리로 곱셈에 의해 ATR 값을 사용합니다. 구체적으로 ATR 트레일링 스톱 계산 공식은:
ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)
If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss
이렇게 하면 ATR 라인은 가격 변동에 따라 동적으로 조정하여 스톱 로스를 따르는 트렌드를 달성 할 수 있습니다.
ATR 후속 정지 외에도 전략은 입구 신호를 결정하기 위해 표준편차 채널을 사용합니다. 표준편차 채널 계산 공식은:
Middle Line = ATR Trailing Stop Line
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation
가격이 중간선을 넘어올 때 롱, 중간선을 넘어올 때 쇼트.
이 전략의 가장 큰 장점은 ATR 지표를 사용하여 시장 변동성에 따라 동적으로 스톱 로스를 설정하여 스톱 로스를 따르는 트렌드와 효과적인 위험 통제를 가능하게한다는 것입니다.
또한, 진입 신호를 위한 표준 오차 채널을 사용하면 작은 가격 변동으로 인해 자주 포지션을 개설하는 것을 피할 수 있습니다.
주요 위험은 스톱 로스 거리가 너무 크면 위험을 효과적으로 제어 할 수 없지만 너무 작다면 시장 소음으로 쉽게 중단 될 수 있다는 것입니다. 이 위험을 해결하기 위해 ATR 기간과 곱셈은 최적화되어 최상의 매개 변수 조합을 찾을 수 있습니다.
또 다른 위험은 과도하게 높은/낮은 입력 주파수를 초래하는 부적절한 표준 편차 채널 매개 변수입니다. 매개 변수를 최적화하여 최적을 찾을 수 있습니다.
이 전략은 다음과 같은 측면에서 향상될 수 있습니다.
더 나은 스톱 로스 효과를 얻기 위해 ATR 기간과 멀티플리커를 최적화합니다.
더 나은 입력 신호를 위해 표준 오차 채널 매개 변수를 최적화합니다.
필터링을 위한 다른 지표, 예를 들어 이동 평균, 촛불 패턴 등을 추가하여 트렌드 방향을 판단하고 수익성을 향상시킵니다.
진입 및 출구 논리를 최적화하십시오. 예를 들어, 가격이 채널 대역에 도달 할 때 촛불 패턴을 확인 한 후에만 포지션을 열십시오.
이 전략은 ATR 지표에 기반하여 스톱 로스를 따라 트렌드를 달성하고 입구 신호를 위해 표준 오차 채널을 사용합니다. 이 전략의 장점은 트렌드 거래에 대한 좋은 위험 통제 능력에 있습니다. 위험과 개선 사항도 명확하게 분석됩니다. 이 전략은 추가 테스트 및 최적화에 가치가 있으며 실용적인 거래 가치를 가지고 있습니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version = 2 strategy(title="Average True Range Strategy", overlay = true) nATRPeriod = input(11) //Hur många perioder ATR är på nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med xATR = atr(nATRPeriod) nLoss = nATRMultip * xATR 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 = 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))) stdev3 = 14*stdev(xATR, nATRPeriod) band1 = xATRTrailingStop+stdev3 //Översta stdev bandet band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet // Datum och tid FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2013, title = "From Year", minval = 2013) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest slut startTimeOk() => true initial_capital = 100000 take = close > xATRTrailingStop if( startTimeOk() ) and (pos == 1) //if (pos == 1) strategy.entry("Long", strategy.long, comment = "KOP") strategy.exit("Long", when = take) if( startTimeOk() ) and (pos == -1) //if (pos == -1) strategy.entry("Short", strategy.short, comment = "SALJ") barcolor(pos == -1 ? red: pos == 1 ? green : blue ) plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj plot(band1, color=red) plot(band2, color=blue)