시스템트레이딩

[업비트 시스템 트레이딩] 2024.06.23 / ATR(Average True Range)

joggerin 2024. 6. 23. 00:41
728x90

0. Summary

1. ATR(Average True Range): 가격변동폭을 의미함.
2. 단순이동평균과 지수이동평균 중 어느걸 선택해야 될지 고민

 

1. ATR (Average True Range)

● 간단히 말해서 가격변동폭이다.

두 시점의 가격 차이(TR)를 계산하여 주가의 변동성을 알아보는 지표이다. 

 

TR의 이동평균값을 구한 것이 ATR이라고 볼 수 있다.

 

이 값을 통해서 현재 코인의 가격이 안정적인지 아닌지를 판단할 수 있다.

 

이 값이 크다면 현재 장의 변동성이 크다는 의미이다.

 

하지만 이 값만으로는 판단의 기준을 삼기는 어려울 것 같고,

 

절대적으로 참고만 해야될 것으로 판단된다.

 

● 어느 시점이 원하는 포인트인지?

 

기준점은 총 3개이다.

1. 전일 종가

2. 현재 고가

3. 현재 저가

 

그리고 이 값들의 조합은 총 3가지이다.

 

1. 전일 종가 - 현재 고가

2. 전일 종가 - 현재 저가

3. 현재 고가 - 현재 저가 

 

이중에 제일 높은 값을 TR로 채택한다. 

 

그림으로 보면 아래와 같다. 파란색 원이 기준 포인트라고 보면 되고

 

이 값들의 차이를 조합해보고 제일 큰 값을 채택하면 ATR이 되는 것이다.

 

 

ATR의 기준점 3가지
ATR의 기준점 3가지

 

 

2. 코드를 구현해보자

● get_ohlcv

모든 것의 기초는 get_ohlcv이다. 이걸 기본으로 지표들을 구할 수 있다.

### ATR(Average True Range)
### [day / minute1 / minute3 / minute5 / minute10 / minute15 / minute30 / minute60 / minute240 / week / month ]
atr_intv = "day"
atr_count = 200

tr_df = pyupbit.get_ohlcv('KRW-BTC', interval=atr_intv, count=atr_count)

tr_df['ch'] = abs(tr_df['close'].shift() - tr_df['high'])
tr_df['cl'] = abs(tr_df['close'].shift() - tr_df['low'])
tr_df['hl'] = abs(tr_df['high'] - tr_df['low'])

# axis=1: 열 기준, (axis=0: 행기준)
tr_df['tr'] = tr_df[['hl','hc','lc']].max(axis=1)


# ATR 구하기
# 1. 단순이동평균
tr_df['atr_sma'] = tr_df['tr'].rolling(window=14).mean()
# 2. 지수이동평균

tr_df['atr_ema'] = tr_df['tr'].ewm(span=14).mean()

 

 

3. 단순이동평균과 지수이동평균

rolling을 이용할 수도 있고, ewm을 이용할 수도 있다.

 

어떤 걸 선택할지는 상황에 맞게 골라야될 것 같고 차이는 아래와 같다.

 

  • rolling(window=14).mean()은 단순 이동평균(SMA)로, 모든 값에 동일한 가중치를 부여하여 평균을 계산합니다.
  • ewm(span=14).mean()은 지수 이동평균(EMA)로, 최신 데이터에 더 큰 가중치를 부여하여 평균을 계산합니다.
  • 반응 속도:
    • 단순 이동평균(SMA)은 모든 값에 동일한 가중치를 부여하기 때문에 갑작스러운 변화에 덜 민감합니다.
    • 지수 이동평균(EMA)은 최신 값에 더 큰 가중치를 부여하기 때문에 갑작스러운 변화에 더 민감합니다.
  • 사용 사례:
    • 단순 이동평균(SMA)은 주로 안정된 장기 추세를 파악할 때 사용됩니다.
    • 지수 이동평균(EMA)은 단기 변동을 더 잘 반영하여, 트렌드의 변화에 더 빠르게 반응할 필요가 있을 때 사용됩니다.
728x90