전략에 따른 ATR 트렌드

저자:차오장, 날짜: 2023-09-28 11:32:09
태그:

전반적인 설명

이 전략은 트렌드 방향을 결정하기 위해 평균 진정한 범위 (ATR) 지표를 사용합니다. 트렌드가 상승할 때 길게 가고 트렌드가 하락할 때 짧게됩니다. 트렌드를 따르는 전략 유형에 속합니다.

전략 논리

이 전략은 먼저 가격의 단순한 이동 평균 (sma) 과 기하급수 이동 평균 (ema) 을 계산합니다. 그 다음 ATR 지표를 계산합니다. 이는 지난 N 일 동안 가격 움직임의 평균 범위입니다.

이 전략은 트렌드 방향을 결정하기 위해 EMA 평균선, 상단 (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. 주요 데이터 이벤트에 대한 중지 손실 비율을 높여
  4. 특정 제품에 따라 ATR 범위를 조정합니다.

개선 방향

  1. 트렌드 지표와 결합하여 매개 변수를 최적화하십시오. 예를 들어 트렌드에 MACD를 추가하십시오.
  2. 입력에 대한 볼링거 밴드 같은 필터를 추가
  3. 트레일링 스톱 또는 출구 표시기와 같은 스톱 손실 방법을 최적화하십시오.
  4. 특정 제품에 따라 ATR 범위를 최적화
  5. 고정 분수 포지션 사이징과 같은 리스크 관리 추가
  6. 기계 학습을 사용하여 매개 변수를 동적으로 최적화

요약

트렌드를 따르는 전략은 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)

더 많은