이동평균(Moving Average, MA)
이동평균(Moving Average, MA)은 전체 데이터 집합에서 특정 크기의 부분 집합을 연속적으로 이동하며 산출한 평균값을 의미합니다. 이동평균은 가장 기본적인 기술적 분석 지표로서, 많은 트레이더들이 이용하고 있는 보조지표입니다. 이동평균을 나타내는 용어는 다양한데 대표적으로 moving average를 사용하고 이밖에 rolling average, running average, moving mean, rolling mean 등이 있습니다.
이동평균에는 단순 이동평균, 누적 이동평균, 가중 이동평균 등 다양한 종류가 있으며 일반적으로 이동평균은 단순 이동평균을 의미합니다. 또한, 일반적으로 차트에서 이동평균을 실행하면 종가를 사용하여 계산되지만 이는 설정에 따라 시가, 고가 등으로 변경해 줄 수 있습니다.
이동평균을 구하는 방법은 아래의 그림과 같습니다. 아래 그림은 BTC의 일봉 데이터에서 5일 이동평균을 구하여 추가한 결과입니다. 데이터는 ohlcv 데이터 형태이며, ohlcv 데이터는 시간, 시가(open), 고가(high), 저가(low), 종가(close), 거래량(volume)으로 구성되어 있습니다. 아래 그림의 맨 오른쪽에 있는 "ma_5"는 5일 이동평균을 구한 결과를 나타냅니다. 그림에서 종가에 표시된 빨간색 구간의 종가들(41067000, 41824000, 39324000, 40467000, 38650000)을 평균 내면 오른쪽의 5일 이동평균값(40266400)이 구해집니다.
이동평균의 기간은 트레이더가 직접 설정해줄 수 있습니다. 주식 차트 분석에서 많이 사용되는 기간은 5일, 20일, 60일, 120일 등이 있습니다.
- 5일 이동평균 : 주식 시장은 주말에 열리지 않기 때문에 5일은 보통 1주일을 의미합니다. 5일 이동평균은 단기 추세 파악에 굉장히 중요한 역할을 하며, 현재의 가격과 가장 밀접하게 움직이는 이동평균입니다. 5일 이동평균의 기울기가 위를 향하고 있다면 단기 상승추세, 수평에 가깝다면 단기 횡보 추세, 아래를 향하고 있다면 단기 하락 추세로 판단할 수 있습니다.
- 20일 이동평균 : 주식 시장에서의 5일이 1주일을 의미하므로 20일은 4주 즉 한 달에 해당하는 기간을 의미합니다. 20일 이동평균은 중기 추세 파악에 굉장히 중요한 역할을 하며, 심리선 또는 생명선이라고 부르기도 합니다.
- 60일 이동평균 : 주식 시장에서의 20일이 약 한 달을 의미하므로 60일은 약 3개월에 해당하는 기간을 의미합니다. 60일 이동평균도 20일 이동평균과 비슷하게 중기 추세 파악에 사용되며, 추세선 또는 수급선이라고 부르기도 합니다.
- 120일 이동평균 : 주식 시장에서의 20일이 약 한 달을 의미하므로 120일은 약 6개월 즉 반년에 해당하는 기간을 의미합니다. 일반적으로 주식은 경기보다 6개월 정도 선행하는 것으로 알려져 있으며 120일 이동평균은 이를 반영하고 있습니다. 120일 이동평균이 상향 돌파되거나 하향 돌파될 때 본격적인 추세전환의 1차적인 신호로 판단합니다.
암호화폐 시장은 주식 시장과 다르게 개장과 폐장이 없이 24시간 매매가 가능하기 때문에 주식 시장에서 많이 사용되는 이동평균 기간 대신 7일 이동평균, 30일 이동평균 등을 사용하는 트레이더들도 많습니다. 하지만 주식 시장과 암호화폐 시장 모두에서 활동하고 있는 트레이더들도 많기 때문에 5일, 20일, 60일, 120일 이동평균을 사용하는 트레이더들도 적지 않습니다. 물론 자신의 매매 경험에 따라 완전히 다른 이동평균 기간을 사용해도 무방합니다.
단기 이동평균과 장기 이동평균은 서로 다른 특징을 가지고 있습니다. 먼저 단기 이동평균은 가격 추세의 변화를 빨리 나타내 준다는 장점이 있지만, 가격의 작은 변화에도 민감하게 반응하기 때문에 정확도가 낮을 수 있다는 단점이 있습니다. 반대로 장기 이동평균은 가격의 작은 변화에는 거의 좌우되지 않기 때문에 가격 추세를 보다 정확하게 판단하는데 유용하다는 장점이 있지만, 추세의 변화를 신속하게 판단하기가 어렵다는 단점이 있습니다. 따라서 많은 트레이더들은 단기 이동평균과 장기 이동평균을 함께 확인하고 있습니다.
이동평균은 계산이 편리하고 추세의 변화를 간단하게 확인할 수 있기 때문에 차트에 보이는 여러 이동평균들의 모양을 보고 기계적으로 매매전략을 세울 수 있다는 장점이 있습니다. 예를 들어, 단기 이동평균선이 장기 이동평균선을 상향 돌파하는 순간을 골든 크로스(Golden Cross)라고 합니다. 골든 크로스가 발생하면 상승 추세로 변환하였다고 판단할 수 있고 매수를 진행할 수 있습니다. 반대로 단기 이동평균선이 장기 이동평균선을 하향 돌파하는 순간을 데드 크로스(Dead Cross)라고 합니다. 데드 크로스가 발생하면 하락 추세로 변환하였다고 판단하여 매도를 진행할 수 있습니다. 지금 글에서는 간단하게 골든 크로스와 데드 크로스만을 설명드렸지만 이밖에 이동평균선들의 모양에 따라 다양한 매매전략을 세울 수 있습니다.
반면, 이동평균은 이미 지나가버린 과거의 가격들을 평균하여 만든 후행성 지표이기 때문에 이를 사용하여 매매전략을 세울 경우 매수 또는 매도 신호가 너무 늦게 발생할 수 있다는 단점이 있습니다. 따라서 이동평균만을 단독으로 사용하여 매매전략을 세우는 것보다는 서로 다른 보조지표들과 결합하여 매매전략을 세우는 것이 좋습니다.
이동평균 코드
- 이동평균 사용자 정의 함수
- TA-Lib에 구현된 SMA 함수
사용자 정의 함수와 TA-Lib에 구현된 SMA함수의 실행시간을 비교해보겠습니다. 보다 정확한 비교를 위해서 각 함수를 100번 수행하고 소요된 실행시간들을 평균내 보았습니다. 실행시간 비교 결과는 아래와 같습니다.
코드 자체가 간단하여 두 함수가 걸린 시간은 매우 작았지만 사용자 정의 함수보다는 TA-Lib의 SMA 함수의 실행시간이 더 짧다는 것을 확인할 수 있었습니다. 추후 보조지표를 사용한 자동매매 코드를 작성 시 이동평균을 적용하고 싶다면 TA-Lib의 SMA 함수를 사용하는 것이 조금이나마 실행시간을 단축시킬 수 있을 것입니다.