파이썬 바이낸스 API로 시계열 데이터 분석. 최대 낙폭 (MDD)

파이썬 바이낸스 API로 시계열 데이터 분석. 최대 낙폭 (MDD)

파이썬 바이낸스 API로 코인 가격에 대한 시계열 데이터 분석을 쉽게 할 수 있습니다. 이번 포스팅에서는 낙폭(drawdown)에 대해 알아보겠습니다. 낙폭 차트에서는 현재 가격이 특정 기간에서 얼마만큼 하락했는지를 파악할 수 있습니다. 파이썬 판다스 데이터프레임 rolling() 함수도 다시 확인해보시기 바랍니다.


글의 순서

낙폭 (drawdown) 으로 시계열 데이터 분석
최대 낙폭 (MDD, Maximum Drawdown)
최대 낙폭 계산을 위한 파이썬 판다스 rolling() 함수
파이썬 코드 : 파이썬 바이낸스 API, 판다스로 최대 낙폭 구하기


낙폭 (drawdown) 으로 시계열 데이터 분석

낙폭 (drawdown)은 주식시장이나 코인시장에서 현재 가격이 전 고점과 비교했을 때 얼마만큼 하락했는지를 나타내 주는 시계열 데이터 분석 자료입니다. 하락장이 계속될 때, 이번 하락이 과거에 비해 어느 정도의 하락인지를 파악하는데 사용됩니다. 낙폭은 영어 drawdown에서 온 것인데, 특정 기간 동안의 최고점에서 최저점 까지의 하락폭으로 정의할 수 있습니다.



최대 낙폭 (MDD, Maximum Drawdown)

최대 낙폭은 1개월, 3개월 등 특정 기간에 발생한 최고점에서 최저점까지의 낙폭(drawdown) 중 가장 낙폭을 의미합니다. 특정 기간 동안 최대 얼마만큼의 손실이 발생했고, 원래 상태를 회복하는데 며칠이나 걸렸는지도 알 수 있어 시계열 데이터 분석에서 중요한 지표입니다. 최대 낙폭을 계산하는 방법은 다음과 같습니다.

최대 낙폭(%) = (최저점 값 – 최고점 값)/(최고점 값) × 100

여기서, 최고점 값을 영어로 표현하면 Peak value이며, 최저점 값은 최고점이 발생하고 난 후 최저점 값(Lowest value after peak value)을 뜻합니다.

예를 들어, 2022년 12월부터 2023년 2월까지, 각 하루당 비트코인 종가를 기준으로 최대 낙폭을 계산해보겠습니다.

▶2022년 12월 1일 : 12월 1일 종가는 16977.37 USDT 였고, 그날이 시작일 이었기 때문에 낙폭이 없습니다. 그래서 낙폭(dd, drawdown)은 0이 됩니다. dd = 0 %
▶2022년 12월 2일 : 12월 2일 종가는 17092.74 USDT 였고, 12월 1일에 비해 가격이 올랐으니 역시나 낙폭이 없습니다. 대신 12월1일~2일 사이의 구간에서 비트코인 최고가가 17092.74로 갱신됩니다. dd = 0 %
▶2022년 12월 3일 : 12월 3일 종가는 16885.20 USDT 였고, 12월 1일~12월 3일 구간의 최고가에 비해 가격이 내렸습니다. 낙폭은 (16885.20 – 17092.74)/17092.74 × 100 = -1.214 %가 됩니다. dd = -1.214 %



▶2022년 12월 14일 : 12월 14일 종가는 17803.15 USDT로 12월1일부터의 기간 중 최고점 값(Peak value, 최고가)입니다. 낙폭은 없습니다. dd = 0 %



▶2022년 12월 16일 : 12월 14일 종가는 16632.12 USDT로 12월14일 최고가를 찍은 후 가장 최저가로 마감했습니다. 낙폭은 (16632.12 – 17803.15)/17803.15 × 100 = -6.578%가 됩니다. 12월1일부터 16일까지는 이 값이 최대 낙폭입니다. dd = -6.578 %

아래 그림에 비트코인 가격에 대한 시계열 데이터 가시화 결과와 낙폭, 그리고 최대 낙폭을 가시화하였습니다. 최대 낙폭이 있고난 후 원상회복되는 지점은 낙폭이 다시 0이 되는 지점입니다.

시계열 데이터 분석 : 비트코인 가격 최대 낙폭
파이썬 바이낸스 API로 시계열 데이터 분석 : 비트코인 가격 최대 낙폭


최대 낙폭 계산을 위한 파이썬 판다스 rolling() 함수

판다스의 rolling() 함수는 정해준 구간에 해당하는 개수만큼 데이터를 추출하여 rolling() 함수 뒤에 따라오는 또 다른 함수에서 필요한 연산을 수행합니다. 정해준 구간을 영어로 window라고 표현합니다.

지난 포스팅 파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선에서 이동평균선을 구할 때 rolling() 함수를 rolling(5).mean() 의 형태로 사용한 적이 있습니다.

rolling(5)라고 쓴 이유는 5일 이동평균선을 구하기 위해서 이전 5개의 데이터를 가져왔기 때문입니다. 여기서는 window의 값에 5가 들어간 경우입니다. 또한 mean()은 평균을 구하는 함수입니다. mean()처럼 사용할 수 있는 함수에는 최대값을 구하는 max(), 최소값을 구하는 min() 도 있습니다. window 다음에 min_periods라는 옵션을 줄 수도 있는데, min_periods=1 이라고 지정하면, 1이라는 개수만 만족해도 연산을 수행합니다. 데이터 개수가 윈도우 크기보다 적더라도 연산을 수행한다는 측면에서 유용합니다.


파이썬 코드 : 파이썬 바이낸스 API, 판다스로 최대 낙폭 구하기

지금까지의 시계열 데이터 분석 과정을 ‘판다스로 최대 낙폭 구하기’ 파이썬 코드에 나타내었습니다. 앞에서 설명한 rolling() 함수 사용법과 차트를 그리는 방법까지 확인해 보시기 바랍니다. matplotlib.pyplot으로 여러 개의 차트(axs)를 한 장의 그림(fig)에 그리는 방법에 대해서는 별도의 포스팅에서 다시 살펴보겠습니다.

또한 이 포스팅에서는 각각의 그래프가 C:/_python/pandas/technical_analysis/ 라는 폴더에 저장됩니다. 물론 파일이 저장되는 경로는 각자 개인이 원하는 곳으로 지정하시면 되겠습니다.


마치며 …

주식투자나 코인 투자를 하시는 분들에게 특정 기간에서 가격이 얼마만큼 하락했는지를 파악하는 것은 중요한 문제입니다. 이번 포스팅에서는 시계열 데이터 분석의 일환으로 특정 기간에서 전 고점 대비 가격이 얼마나 하락했는지를 나타내는 낙폭(drawdown)에 대해 알아 보았습니다.

파이썬 바이낸스 API로 비트코인 가격데이터를 가져오는 것은 아래 ‘함께 참고하면 좋은 글’에서 다루었던 여러 포스팅에서와 동일합니다. 판다스 데이터프레임 상에서 열(column) 연산을 수행해서 시계열 데이터 분석이 가능하다는 것과, 낙폭, 최대 낙폭을 구하는 데 rolling() 함수가 유용하게 쓰였다는 사실을 기억해 주시기 바랍니다.

 

 

함께 참고하면 더 좋은 글 :
1. 바이낸스 코인거래소 API Key로 계좌에 접속하는 파이썬 프로그래밍
2. 파이썬 바이낸스 API로 시계열 데이터를 가져오는 파이썬 프로그래밍
3. 바이낸스 API 보안을 위한 환경 변수 설정 : 윈도우 10
4. 파이썬 바이낸스 API 시계열 데이터분석. 판다스 시간 처리
5. 파이썬 바이낸스 API로 차트 분석 : 판다스 이동평균선
6. 파이썬 프로그래밍 time 이해 : timestamp, UTC, KST
7. API와 파이썬 데이터 분석
8. 시계열 데이터 전처리 결과 확인 : pandas DataFrame
9. 바이낸스 비트코인 투자 백 테스팅. 파이썬 코인 투자 연습
10. 파이썬 프로그래밍 시작


참고자료

[1] 파이썬 바이낸스 API로 가져오는 ohlcv 데이터 : python-binance Docs >> get_historical_klines
[2] 김황후(2020), 파이썬 증권 데이터 분석, 한빛미디어
쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

Leave a Comment