ATR의 개념
ATR(Average True Range)은 J. Welles Wilder Jr.가 개발한 변동성 지표로, 일정 기간 동안의 가격 변동 범위를 측정한다. ATR은 상승과 하락을 모두 고려하여 변동성을 계산하므로, 시장의 변동성을 포착하는 데 유용하다. ATR의 계산 공식은 다음과 같다:
- True Range(TR) 계산:
- 당일 고가 – 당일 저가
- 당일 고가 – 전일 종가의 절대값
- 당일 저가 – 전일 종가의 절대값
- 위 세 가지 값 중 최대값을 해당일의 TR로 사용
- ATR 계산:
- N일 동안의 TR 평균 (일반적으로 N은 14일을 사용)
예를 들어, 어떤 종목의 14일 ATR이 2.5라면, 이는 최근 14일 동안 해당 종목의 일일 가격 변동 범위가 평균적으로 2.5였다는 것을 의미한다.
ATR을 활용한 포지션 크기 조절 전략
ATR을 활용한 포지션 크기 조절 전략은 시장의 변동성에 따라 포지션 크기를 동적으로 조절하는 방법이다. 이 전략의 기본 아이디어는 변동성이 높을 때는 포지션 크기를 줄여 리스크를 관리하고, 변동성이 낮을 때는 포지션 크기를 늘려 수익 기회를 극대화하는 것이다.
구체적인 전략은 다음과 같다:
- ATR 계산: 일정 기간(예: 14일) 동안의 ATR을 계산한다.
- 리스크 금액 설정: 매 거래마다 감수할 수 있는 리스크 금액을 설정한다(예: 계좌 잔고의 1% 또는 고정 금액).
- 포지션 크기 계산: 리스크 금액을 ATR로 나누어 포지션 크기를 계산한다.
- 포지션 크기 = 리스크 금액 / ATR
- 거래 실행: 계산된 포지션 크기로 거래를 실행한다.
- 포지션 크기 조절: ATR이 변함에 따라 포지션 크기를 조절한다.
- ATR이 증가하면 포지션 크기를 줄인다.
- ATR이 감소하면 포지션 크기를 늘린다.
이 전략을 통해 변동성이 높은 시기에는 포지션 크기를 줄여 리스크를 관리하고, 변동성이 낮은 시기에는 포지션 크기를 늘려 수익 기회를 극대화할 수 있다.
파이썬 코드 예시
다음은 ATR을 계산하고, 이를 활용한 포지션 크기 조절 전략을 구현한 파이썬 코드의 예시이다:
import numpy as np
def calculate_atr(high, low, close, n=14):
try:
if len(high) != len(low) or len(high) != len(close):
raise ValueError("Input arrays must have the same length.")
tr = np.maximum(high - low, np.abs(high - close.shift(1)), np.abs(low - close.shift(1)))
atr = tr.rolling(window=n).mean()
return atr
except ValueError as e:
print(f"Error: {str(e)}")
return None
def atr_position_size(account_balance, risk_percentage, atr):
try:
risk_amount = account_balance * (risk_percentage / 100)
position_size = risk_amount / atr
return position_size
except ZeroDivisionError:
print("Error: ATR cannot be zero.")
return 0
except TypeError:
print("Error: Invalid input type. All inputs must be numeric.")
return 0
# 사용 예시
high = np.array([100, 102, 105, 103, 108])
low = np.array([99, 100, 102, 101, 105])
close = np.array([100, 101, 103, 102, 107])
atr = calculate_atr(high, low, close)
print(f"ATR: {atr[-1]:.2f}")
account_balance = 10000
risk_percentage = 1
position_size = atr_position_size(account_balance, risk_percentage, atr[-1])
print(f"Position size: {position_size:.2f}")
위 코드에서 calculate_atr
함수는 고가, 저가, 종가의 NumPy 배열과 ATR 계산에 사용되는 기간(n)을 입력받아 ATR을 계산한다. 이 함수는 먼저 입력된 배열의 길이가 같은지 확인한다. 그런 다음, True Range(TR)를 계산하고, TR의 이동 평균을 사용하여 ATR을 계산한다.
atr_position_size
함수는 이전 예시와 동일하게 계좌 잔고, 리스크 비율, ATR을 입력받아 포지션 크기를 계산한다.
사용 예시에서는 고가, 저가, 종가 데이터를 NumPy 배열로 생성하고, calculate_atr
함수를 호출하여 ATR을 계산한다. 그런 다음, 계좌 잔고와 리스크 비율을 설정하고, atr_position_size
함수를 호출하여 포지션 크기를 계산한다.