Introduction
이동평균(Moving Average)은 특정 기간 동안 소스값의 평균을 연속해서 연결한 선을 뜻합니다.
이것을 그냥 "평균선"으로 표현하면 될 텐데 앞에 "이동"이라는 단어를 사용한 이유는 주가의 움직임을 나타내는 차트에서 X축은 "시간"으로, 시간에 따른 평균가격을 이동(Moving)하며 나타내기 때문에 이동평균선이라고 합니다.
이동평균선은 일반적으로 종가(Close)가격을 반영하여 사용 되기 때문에, 주가의 추세를 반영합니다. 즉, 이동평균선이 우상향하는 움직임을 보여준다면, 시장은 상승추세에 놓여있다고 해석할 수 있습니다.
일반적으로, 이동평균선은 계산방법에서 가치를 특정 기간동안 과거 데이터와 최신 데이터 중 더 큰 비중을 두는 것에 따라 1. 단순 이동평균(Simple Moving Average), 2. 지수 이동평균(Exponential Moving Average)로 구분됩니다. 단순 이동평균은 특정 기간 동안 종가의 합의 평균을 나타낸 것이며, 지수 이동평균은 특정 기간동안 과거 데이터 보다는 가장 최근 데이터에 의존한 것으로, 지수 이동평균에서 설정한 기간이 늘어날수록 현재 가격과 가까워지는 계수를 가중시켜 나타낸 것입니다.

Formula
1. 단순 이동평균(Simple Moving Average)
단순 이동평균은 특정 기간 동안의 소스값의 합을 기간으로 나누어 계산합니다. 일반적으로, 단순 이동평균에서는 종가(Close)를 소스값으로 사용합니다. 따라서, 7일동안의 단순 이동평균의 계산은 현재시점을 포함하여, 최근 7일동안의 종가들의 합을 7로 나눈 값입니다. 이 계산을 어제를 기준으로, 또 그전날을 기준으로 계산하여 나타난 점을 이어 실선으로 연결한 것이 바로 7일 단순 이동평균선입니다.

n일 동안의 단순 이동평균의 계산식과 Pine Script 코드는 다음과 같습니다.
n일 이동평균선 = (오늘을 포함한 최근 n일 동안 종가의 총합) / n
- 단순 이동평균 계산 예시 : 일일 종가가 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 일때, 5일동안의 단순 이동평균은 (10+9+8+7+5)/5 값이 오늘의 단순 이동평균값이고, 어제는 (9+8+7+6+5)/5 같은 방식으로 과거의 이동평균을 계산하여 나열하고, 연속된 값을 연결하면 5일동안의 이동평균선이 나타납니다. 예시를 들기위해 과거 데이터를 통해 계산하였지만, 실제로는 오늘 종가가 마감되면 제일 마지막 종가를 제외시키며 계산되어집니다. * 오늘 종가가 10이었을때, 3일 이동평균선은 7을 제외한 3일동안의 종가 값을 합하여 계산됩니다.
이렇게 새롭게 마감되는 데이터를 통해 계산되어지는 단순 이동평균은 설정한 기간 값이 짧을 수록 현재 추세를 잘 반영합니다. * 7일 단순 이동평균보다는 3일 단순 이동평균이 현재 시장의 심리를 훨씬 더 민감하게 나타냅니다.
//version=4
study(title = "SMA")
cal_sma(x, y) => //함수 선언 sma라는 함수는 x, y두개의 변수를 사용하여 계산된다.
sum = 0.0
for i = 0 to y - 1
sum := sum + x[i] / y //sum 이라는 변수는 현재의 sum값(초기값 0)과 x변수를 y-1까지 반복하여 합하고 y값으로 나눈다.
sum
plot(cal_sma(close, 15)) // x에 종가, y에 15대입하여 출력한다.
파인 스크립트 코드에서 사용된 함수를 이해할 수 있다면, 단순 이동평균이 기간에 따라 누적된 데이터들의 평균이라는 메커니즘까지 이해하실 수 있으리라 생각됩니다. 이 단순 이동평균의 계산식은 일정 기간동안 연속된 데이터들의 평균값을 나타내고 그 평균선을 통해 추세를 파악하는데 많은 도움이 될 것입니다.
2. 지수 이동평균(Exponential Moving Average)
지수 이동평균(EMA)은 모든 소스값을 동일하게 사용하는 단순 이동평균과 다르게 최근 가격에 더 많은 가중치를 적용하여 사용된다는 차이가 있습니다. 따라서, 지수 이동평균은 특정 기간동안의 소스값에 차이를 부여하기 위해 가중치(alpha)값을 계산하여, 곱하는 것으로 차이를 둡니다. 이 가중치 계수는 {2 / (기간 +1)}로 계산되기 때문에 지수 이동평균의 설정 기간이 길수록 그 값이 작아지며 계산되기 때문에 현재 시점보다 더 먼 시점의 소스값의 크기가 점점 줄어드는 것으로 기간에 따른 가중치를 차별화 할 수 있습니다.
지수 이동평균의 계산식과 Pine Script코드는 다음과 같습니다.
최초 EMA = EMA설정 기간과 동일한 기간의 단순 이동평균 값.
가중치 계수(alpha) = {2 / (기간 + 1)}
EMA = {src - ema(전일)} * alpha + ema(전일)
지수 이동평균을 계산하는것에 있어서 가장 중요한 것은 현재 시점보다 멀어질수록 그 값이 줄어드는 가중치 계수를 곱해준다는 것 입니다. 지수 이동평균의 식을 풀어쓰면, 다음과 같습니다.
지수 이동평균 = 가중치 계수 * 소스 + (1 - 가중치 계수) * 전일 지수 이동평균
먼저, 가중치 계수에 소스 값을 곱합니다. 이 값은 지수 이동평균에 사용되는 기본 소스가 됩니다. 단순 이동평균과 달리, 그대로의 소스 값이 아닌 가중치 계수를 곱한 값을 사용하는 것 입니다. 그 다음 전일 지수 이동평균을 (1 - 가중치 계수)로 곱한 값과 곱합니다. 최초에는 이 전일 지수 이동평균이 계산되어져있지 않기 때문에, 대신 동일 기간의 단순 이동평균이 사용됩니다. 여기서 ( 1 - 가중치 계수)는 가중치 계수의 최대값 1을 백분율로 표현한 100%에서 현재 설정한 가중치 계수의 백분율값의 차이를 통해 최대치인 1과 비교하여 가중치 계수가 가질 수 있는 최대 값 1에서 얼마만큼 떨어져있는지 확인하기 위해 계산하는 것 입니다.
이처럼, (1 - 가중치 계수)를 전일 지수 이동평균에 곱한 다는 것은 또 한번 전일 지수 이동평균 값을 현재 시점의 지수 이동평균 값과 다른 가중치를 비교하여 보다 최근 데이터에 신뢰도를 부여하겠다는 것으로 해석할 수 있습니다.
//version=4
study(title="EMA")
cal_ema(src, length) =>
alpha = 2 / (length + 1) //가중치
sum = 0.0
sum := na(sum[1]) ? sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])
// 본문 참고
plot(cal_ema(close, 15)) // src = close, length = 15를 적용하여 ema를 출력한다.
3. 지수 이동평균의 가중치 계수(The Weighting Multiplier)
지수 이동평균에서 사용되는 가중치 계수는 지수 이동평균에서 설정한 기간이 길어질수록 그 값이 작아집니다. 예를들어 10일 지수 이동평균은 가중치 계수 { 2 / (10 + 1) } = 0.1818 ••• 이지만 50일 지수 이동평균의 가중치 계수는 { 2 / (50 + 1) } = 0.03921569 가 계산되기 때문에 설정 기간이 길어질수록 가중치 계수는 점점 줄어들게 됩니다. 이 계산식을 응용하면, 부여할 가중치 계수를 통해 설정해야 될 지수 이동평균의 기간을 계산할 수 있습니다.
가중치 계수 = { 2 / (기간 + 1) }
▶︎ 가중치 계수 * (기간 + 1) = 2
▶︎ 가중치 계수 * 기간 + 가중치 계수 = 2
▶︎ 가중치 계수 * 기간 = 2 - 가중치 계수
▶︎ 기간 = (2 - 가중치 계수) / 가중치 계수
▶︎ 기간 = (2 / 가중치 계수) - 1
위 계산식을 통해 가중치 계수 10%인 지수 이동평균의 기간을 계산하면, 기간 = ( 2 / 0.1) - 1 = 19 로 19 지수 이동평균이 가중치 계수 10%가 적용된다는 것을 확인할 수 있겠습니다.
Mechanism
1. 단순 이동평균선의 메커니즘과 활용
단순 이동평균선의 메커니즘을 이해하기 위해서는 먼저, 일반적으로 단순 이동평균에 사용 되는 소스값인 "종가(Close)"의 형성에 대한 이해가 필요합니다. 종가는 현재 시점에서 실시간 가격을 나타내고, 과거 데이터에서는 각 타임 프레임에서 마감된 시점의 가격을 나타냅니다.(현재시점 이전 종가는 실시간 가격의 마지막 체결가격) 따라서, 종가가 형성되기 위해서는 반드시 "실제로 거래"가 일어나야 하기 때문에 시장의 심리가 반영된 데이터라고 할 수 있으며, 이를 해석하는 것은 특정 기간동안의 평균적인 시장의 심리를 읽는 것"과 동일하다고 할 수 있겠습니다.
Interpret
1. 지지선(Support Line) & 저항선(Resistance Line)
단순 이동평균선은 실제로 거래가 체결되어 형성된 가격 데이터와 시장의 심리를 반영하기 때문에 지지선과 저항선으로 활용할 수 있습니다. 예를들어, 주가가 지속적으로 단순 이동평균선(30)을 돌파하지 못한다는 것은 주가가 평균적으로 거래 되었던 가격대 보다 낮은 가격에 거래 되고 있음을 뜻하며, 이는 투자심리가 위축 되었다고 설명할 수 있기 때문입니다. 반대로, 주가가 지속적으로 단순 이동평균선 상단에 위치해 있으며, 조정이 발생 하더라도 이를 이탈하지 않는다는 것은 해당 종목을 거래하는 투자자들의 심리가 활발하다는 것을 뜻하기 때문입니다.

2. 상승 / 하락 다이버전스
단순 이동평균선은 설정 기간이 다른 이동평균선을 추가로 출력하여 비교하는 것으로, 서로다른 기간에 거래한 투자자들의 종합적인 투자심리를 파악하고, 주가 방향성 판단에 높은 신뢰도를 부여할 수 있습니다.
골든 크로스(Golden Cross) : 단기 이동평균선이 장기 이동평균선을 돌파한 모습을 뜻하는 것으로, 최근 주가의 평균적인 움직임이 장기관점의 평균 움직임 보다 높은 움직임을 보여줌을 뜻합니다.
데드 크로스(Dead Cross) : 단기 이동평균선이 장기 이동평균선을 이탈한 모습을 뜻하는 것으로, 최근 주가의 평균적인 움직임이 장기관점의 평균 움직임 보다 낮은 움직임을 보여줌을 뜻합니다.
작성중..