2021. 7. 27. 23:03ㆍPython/Visualization
주식 시장에 관심을 두거나 주식 시장에서 매매 경험을 해 본 사람이라면 이동평균선과 이격도에 대해 들어보았을 것이다. 차트를 분석하는 사람들이라면 거의 빼놓지 않고 보는 지표이다. 필자는 차티스트가 아니지만 실제로 주식 매매에 참고하는 지표 중 하나이다. 실제로는 단순히 이동평균을 이용하지 않고 현재의 주가가 이동평균과 얼마나 떨어져 있는가, 즉 이격도를 초점으로 둔다.
1. 이동평균(Moving Average; MA)의 종류
이동평균에도 다양한 종류가 있는데, 세 가지만 알아보겠다. '단순 이동평균', '가중 이동평균', '지수가중 이동평균'이다.
1. 단순 이동평균(Simple Moving Average; SMA)
단순 이동평균은 데이터의 시점과 상관없이 산술평균을 취한 것이다. $t_0$ 시점에서 변수 $X$의 $W$일 단순 이동평균은 다음과 같이 정의된다.
$$ SMA_{t_0, W} = \frac{1}{W} \sum^{t_0}_{t=t_0 - W + 1} X_t $$
이렇게 보면 식은 상당히 복잡하지만 그냥 일반적으로 말하는 평균과 다를 바 없다. 일반화하여 쓰려다 보니 복잡해졌을 뿐이다. 여기서 $W$는 'Rolling Window'에서 따왔다.
2. 가중 이동평균(Weighted Moving Average; WMA)
가중 이동평균은 단순 이동평균과 달리 데이터가 현재와 가까울수록 중요하므로 가중치를 더 할당하는 방식이다. $t_0$시점에서 변수 $X$의 $W$일 가중 이동평균은 다음과 같이 정의된다.
$$WMA_{t_0, W} = \sum^{t_0}_{t=t_0 -W+1} w_t X_t , \text{ where } w_t = \frac{W-(t_0)-t}{\Sigma^W_{i=1}i}$$ 단순 이동평균보다 더 복잡하다. 그렇지만 여전히 단순하다. 주의할 점은 $W$는 전과 같이 window를 나타내지만, $w_t$는 가중치를 나타낸다. 이번에는 예를 들어보자. 현재 시점을 $t$라고 할 때, t시점, 1일 전, ..., 4일 전까지의 데이터를 [5, 3, 2, 1, 4]라고 했을 때의 5일 가중 이동평균은 다음과 같이 계산된다.
$$WMA_{t, 5} = \frac{5}{15} \times 5 + \frac{4}{15} \times 3 + \frac{3}{15} \times 2 + \frac{2}{15} \times 1 + \frac{1}{15} \times 4$$
각 항의 첫 번째 값(분수)은 시간 가중치를 나타낸다. 총 5일치 데이터이므로 분모에는 1부터 5까지의 합인 $15$가, 분자에는 가까운 순서대로 큰 값을 부여한다. 각 항의 두 번째 값은 실제 데이터를 나타낸다.
단순 이동평균과 가중 이동평균의 차이점은 이름에서 알 수 있듯이 가중치에 차이가 있다. 단순 이동평균은 모든 값에 동일한 가중치를 부여한다. 즉 window에 포함된 모든 데이터는 동일하게 중요하다고 가정하는 셈이다. 반면, 가중 이동평균의 가중치는 현재 시점에서 가까운 값에 더 큰 가중치를 부여한다. 즉, 더 중요하다고 가정하는 셈이다. 데이터에 따라 어떠한 이동평균을 사용하여야 하는지는 생각해 보아야할 문제이다.
3. 지수가중 이동평균(Exponential-Weighted Moving Average; EMA)
지수가중 이동평균 역시 가중 이동평균의 한 종류이다. 이름에서 알 수 있듯, 가중치를 설정하는 방식이 다소 차이가 있다. 그렇지만 여전히 식만 복잡할 뿐이다. 당황하지 말자.
$$S_t=\begin{cases} X_1 & t=1 \\ \alpha X_t + (1-\alpha)S_{t-1} & t>1 \end{cases}, \text{ where } \alpha \in (0, 1)$$
이전의 두 가지 방식과 확연히 다르다. 하나하나 뜯어보자.
1) 우선 $S_t$는 $t$시점에서의 EMA값을 나타낸다.
2) $X_t$는 $t$시점에서 데이터의 값(ex: 주가)을 나타낸다.
3) $\alpha$는 시간이 지남에 따라 가중치가 감소하는 정도(*the degree of weighting decrease)를 나타내는 값이며, 0과 1 사이의 값을 갖는다.
$t$시점에서의 EMA 값은 $t$시점에서의 주가 $X_t$에 $\alpha$를 곱한 값과 $t-1$시점의 EMA $S_{t-1}$에 $(1-\alpha)$를 곱한 값을 더하여 구한다. 이 때, 핵심은 $\alpha$의 설정이다. $\alpha$가 클수록 과거 값에 대한 가중치가 감소하기 때문이다.
cf. Repeated Substitution
\begin{aligned}
S_t &= \alpha X_t + (1-\alpha)S_{t-1} \\
&= \alpha X_t + (1-\alpha) \{\alpha X_{t-1} + (1-\alpha)S_{t-2} \} \\
&= \alpha X_t + (1-\alpha) [ \alpha X_{t-1} + (1-\alpha) \{\alpha X_{t-2} + (1-\alpha)S_{t-3} \} ]
\end{aligned}
$$ \vdots $$
의 과정을 반복하면 다음과 같다.
\begin{aligned}
S_t &= \alpha[X_t + (1-\alpha)X_{t-1} + (1-\alpha)^2 X_{t-2} + \cdots \\
&+ (1-\alpha)^k X_{t-k}] + (1-\alpha)^{k+1} X_{t-(k+1)}
\end{aligned}
해석하자면, $t$기의 값에는 $\alpha$를 곱하고, $t$기 이전의 모든 값에는 $(1-\alpha)$를 떨어진 만큼 거듭제곱하여 더하여 주는 것이다. 즉, $t$시점에서 멀수록 $(1-\alpha)$만큼이 곱해지므로 더 많이 감소한다. 이 때 $\alpha$가 클수록 더 급격하게 감소한다. 별 거 아니다! 오히려 이전의 방법들보다 간단하기도 하다!
이제 질문이 하나 떠올라야 한다.
"그럼 $\alpha$는 어떻게 구하는데?"
"쓰는 사람 마음임."
"그래도 일반적으로 사용하는 방법은 있을 거 아냐?"
" $\frac{2}{W+1}$."
예를 들어, 20일 지수가중 이동평균이라면 $\alpha= \frac{1}{21}$이 된다. 이 값은 다소 자의적이지만 가장 일반적으로 사용되곤 한다.
다음 글은 지금까지 서술한 이동평균 세 가지를 Python으로 구현하는 방법과 시각화하는 방법에 대해 서술하겠다..!
'Python > Visualization' 카테고리의 다른 글
matplotlib.pyplot (0) | 2021.09.03 |
---|---|
[Visualization]Correlation Matrix (0) | 2021.08.18 |
Python을 이용한 시각화 시작하기 (0) | 2020.12.31 |