ATR 추세 추종 전략


생성 날짜: 2023-09-28 11:32:09 마지막으로 수정됨: 2023-09-28 11:32:09
복사: 0 클릭수: 795
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 평균 실제 파장 지표 ATR을 기반으로 트렌드 방향을 판단하고, 트렌드가 상승할 때 더 많이 하고, 트렌드가 하락할 때 더 많이 하락하며, 트렌드 추적 유형의 전략에 속한다.

전략 원칙

이 전략은 우선 가격의 단순 이동 평균 sma와 지수 이동 평균 ema를 계산한다. 그리고 ATR 지표, 즉 지난 N 일 동안의 평균 변동 범위를 계산한다.

이 전략은 트렌드 방향성을 판단하기 위해 에마 평균, 상반기 ((ema + ATR * 인수) 및 하반기 ((ema - ATR * 인수) 를 사용합니다. 가격이 상반기에 들어올 때, 더 많이하고, 가격이 하반기에 들어올 때, 공백을 만듭니다.

코드의 주요 논리:

  1. SMA와 EMA의 평균값을 계산하는 방법
  2. ATR의 평균 변동 범위 계산
  3. 상궤선과 하궤선 계산
  4. 가격 상승: 여러 신호로 판단하라
  5. 하락의 신호를 판단하라: 하락의 신호
  6. 스톱로스 평점 포지션을 설정: 가격 아래의 궤도 상반된 평면 다수권; 가격 위의 궤도 상반된 평면 공권

ATR을 통해 동적으로 포지션을 조정하여 동향을 효과적으로 추적 할 수 있습니다.

전략적 이점

  1. 트렌드 방향을 판단하는 ATR 지표를 사용하여 가격 트렌드를 효과적으로 포착할 수 있습니다.
  2. 평균을 기준으로 설정된 스톱 로즈, 합리적인 리스크 통제
  3. 전략의 논리는 간단하고 명확하며, 구현을 이해하기 쉽습니다.
  4. 다양한 시장 환경에 적용할 수 있는 유연한 구성 요소

전략적 위험

  1. ATR 지표는 시장의 큰 흔들림으로 인해 무효화 될 것입니다.
  2. 잘못된 변수 설정으로 인해 너무 자주 포지션을 열 수 있습니다.
  3. 갑작스러운 사건으로 인해 급격한 반전이 발생하면, 제지 손실은 유효하지 않을 수 있습니다.
  4. 거래비용이 높은 시장, 트래킹 설정 조정 필요

해결책:

  1. 시장의 큰 변동으로 인해 전략이 중단되거나 다른 지표가 적용되는 것이 좋습니다.
  2. 최적화 매개 변수, 포지션 개시 빈도 감소
  3. 중요한 데이터 이벤트에 대한 Stop Loss Rate를 높여라
  4. 특정 품종에 따라 ATR 평가 범위를 조정합니다.

전략 최적화 방향

  1. 트렌드 지표 최적화 매개 변수와 함께 트렌드를 결정하는 MACD를 포함합니다.
  2. 브린 벨트와 같은 필터를 추가하는 것
  3. 이동식 중지 또는 퇴출 지표와 같은 손실을 최적화하는 방법
  4. 특정 품종에 대한 ATR 최적화 범위
  5. 고정 지분과 같은 자금 관리 전략을 늘리세요.
  6. 기계 학습 방법과 결합된 동적 최적화 매개 변수

요약하다

이 ATR 트렌드 추적 전략은 전체적인 아이디어가 명확하고, ATR 지표를 통해 트렌드 방향을 판단하는 전형적인 트렌드 추적 전략에 속한다. 전략의 장점은 간단하고 쉽게 조작할 수 있으며, 효과적으로 트렌드를 추적할 수 있다. 그러나 특정 위험이 있지만, 전략의 최대 효과를 발휘하기 위해 서로 다른 시장 환경에 최적화된 조정이 필요합니다.

전략 소스 코드
/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(2.618, type=input.float, minval=0, title="Length")
mullow = input(2.386, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

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 = 2008, title = "From Year", minval = 2008)
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 = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk()) and ema(close,1) > ema(close,528)
    strategy.entry("KOP", strategy.long, when=bull_cross) 
    strategy.close("KOP", when=bear_cross)  
if (startTimeOk()) and ema(close,1) < ema(close,528)
   strategy.entry("SALJ", strategy.short, when=bear_cross) 
   strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)