ATR(Average True Range)는 기술적 분석에서 많이 사용되는 지표 중 하나입니다. ATR은 일정 기간 동안의 주가 변동성을 측정하여, 주가의 변동폭을 파악하는 데에 사용됩니다. 이를 통해 투자자는 주가의 안정성과 위험성을 평가하고, 적절한 매매 타이밍을 결정할 수 있습니다.
ATR은 처음에는 윌더스 채플린(Welles Wilder)이 개발하였습니다. 윌더스 채플린은 이 지표를 개발할 때 참고할만한 다른 지표들과 마찬가지로 일련의 계산식을 사용하였습니다. 이 계산식은 일반적으로 14일 동안의 ATR을 구하는 데 사용되며, 다음과 같습니다.
ATR = [(이전 일의 ATR x 13) + TR] / 14
TR은 True Range의 약자로, 일정 기간 동안의 가장 큰 변동폭을 계산하여 나타낸 값입니다. True Range는 가격의 변동폭을 측정하는 지표로, 다음의 식으로 계산됩니다.
True Range = Max(High - Low, abs(High - 전일 Close), abs(Low - 전일 Close))
여기서 High는 일정 기간 동안의 최고가, Low는 일정 기간 동안의 최저가, 전일 Close는 전일 종가를 의미합니다. 따라서 True Range는 가격 변동폭이 가장 큰 값으로 계산됩니다.
ATR은 기본적으로 표준편차와 유사한 방식으로 주가의 변동성을 계산합니다. ATR의 값이 커질수록 주가의 변동성이 커지는 것을 의미하며, 작아질수록 주가의 변동성이 작아지는 것을 의미합니다. 예를 들어, ATR이 3달러인 주식은 ATR이 1달러인 주식보다 가격 변동폭이 크다는 것을 의미합니다.
ATR은 투자자가 투자할 수 있는 금액의 크기를 결정하는 데 사용됩니다. 예를 들어, ATR이 3달러인 주식에서 100주를 매수한다면, 이는 300달러에 해당하는 금액입니다. 따라서, 투자자는 ATR 값을 참고하여 자신이 투자할 금액을 결정할 수 있습니다. 이를 통해 투자자는 주가의 변동성에 따라 적절한 포지션 크기를 선택하여 리스크를 관리할 수 있습니다.
ATR은 매수와 매도 시점을 결정하는 데에도 사용됩니다. ATR이 높을수록 주가의 변동폭이 크기 때문에, 투자자는 ATR 값을 기반으로 매수 및 매도 시점을 결정할 수 있습니다. 예를 들어, ATR 값이 3달러인 주식에서 매수를 결정할 경우, 주가가 하루에 3달러 이상 상승하거나 하락할 가능성이 있다는 것을 의미합니다. 이러한 정보를 활용하여, 투자자는 적절한 매수 타이밍을 결정할 수 있습니다.
또한, ATR은 다른 기술적 지표와 함께 사용되어 투자 결정을 돕는 데에도 활용됩니다. 예를 들어, Bollinger Bands와 ATR을 함께 사용할 경우, 상단 밴드와 하단 밴드를 계산하는 데 ATR 값을 사용할 수 있습니다. 이를 통해, 상단 밴드와 하단 밴드를 주가의 변동성에 따라 조정할 수 있습니다.
ATR은 또한 트레일링 스탑(Trailing Stop) 주문을 사용하는 데에도 활용됩니다. 트레일링 스탑 주문은 주가가 일정 수준 이상 하락할 경우 자동으로 매도 주문을 발생시키는 방식으로, 리스크를 관리하는 데에 사용됩니다. 이때, ATR 값을 기반으로 트레일링 스탑의 간격을 조정할 수 있습니다. ATR 값이 커질수록, 트레일링 스탑의 간격도 커지기 때문에, 더 넓은 가격 변동폭을 수용할 수 있습니다.
ATR은 일정 기간 동안의 가격 변동성을 측정하는 지표로, 매수와 매도 시점을 결정하는 데 사용됩니다. 또한, 다른 기술적 지표와 함께 사용하여 투자 결정을 돕는 데에도 활용됩니다. ATR 값을 참고하여, 투자자는 적절한 포지션 크기를 선택하고, 리스크를 관리할 수 있습니다.
바이낸스 API를 통해 ATR을 계산하는 방법
import requests
import json
import pandas as pd
# 바이낸스 API 키와 시크릿을 입력해주세요.
API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
# 요청할 URL을 지정합니다.
url = "https://api.binance.com/api/v3/klines"
# 요청할 코인 종류와 주기를 지정합니다.
symbol = "BTCUSDT"
interval = "1d"
limit = 100
# 요청에 필요한 파라미터를 설정합니다.
params = {"symbol": symbol, "interval": interval, "limit": limit}
# 요청에 대한 서명을 생성합니다.
timestamp = int(time.time() * 1000)
query_string = f"{'&'.join([f'{k}={v}' for k, v in params.items()])}×tamp={timestamp}"
signature = hmac.new(API_SECRET.encode(), query_string.encode(), hashlib.sha256).hexdigest()
# 요청 헤더를 설정합니다.
headers = {"X-MBX-APIKEY": API_KEY}
# 요청을 보냅니다.
response = requests.get(url, headers=headers, params={**params, "timestamp": timestamp, "signature": signature})
data = json.loads(response.text)
# 데이터를 데이터프레임 형태로 변환합니다.
df = pd.DataFrame(data, columns=["open_time", "open", "high", "low", "close", "volume", "close_time", "quote_asset_volume", "number_of_trades", "taker_buy_base_asset_volume", "taker_buy_quote_asset_volume", "ignored"])
# 필요한 데이터만 추출합니다.
df = df[["open_time", "high", "low", "close"]]
# ATR을 계산합니다.
high_low = df["high"] - df["low"]
high_close = abs(df["high"] - df["close"].shift())
low_close = abs(df["low"] - df["close"].shift())
ranges = pd.concat([high_low, high_close, low_close], axis=1)
true_range = ranges.max(axis=1)
average_true_range = true_range.rolling(window=14).mean()
print(average_true_range.tail())