ATR 트렌드 표준 오차 채널에 기반한 전략을 따르는 것

저자:차오장, 날짜: 2024-01-05 16:34:27
태그:

img

전반적인 설명

ATR 트렌드 다음 전략이라는 이 전략은 엔트리 신호에 대한 스톱 로스 및 표준 오차 채널을 위한 평균 참 범위 (ATR) 를 기반으로 하는 트렌드 다음 전략이다. 이는 지수, 외화 및 상품과 같은 명백한 트렌드를 가진 금융 상품에 적합하다.

거래 논리

이 전략은 스톱 로스 가격을 설정하기 위해 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 기간과 곱셈은 최적화되어 최상의 매개 변수 조합을 찾을 수 있습니다.

또 다른 위험은 과도하게 높은/낮은 입력 주파수를 초래하는 부적절한 표준 편차 채널 매개 변수입니다. 매개 변수를 최적화하여 최적을 찾을 수 있습니다.

더 나은 기회

이 전략은 다음과 같은 측면에서 향상될 수 있습니다.

  1. 더 나은 스톱 로스 효과를 얻기 위해 ATR 기간과 멀티플리커를 최적화합니다.

  2. 더 나은 입력 신호를 위해 표준 오차 채널 매개 변수를 최적화합니다.

  3. 필터링을 위한 다른 지표, 예를 들어 이동 평균, 촛불 패턴 등을 추가하여 트렌드 방향을 판단하고 수익성을 향상시킵니다.

  4. 진입 및 출구 논리를 최적화하십시오. 예를 들어, 가격이 채널 대역에 도달 할 때 촛불 패턴을 확인 한 후에만 포지션을 열십시오.

요약

이 전략은 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)



더 많은