이동평균선 계산식 자체는 한 줄입니다. 종가 N개를 더해서 N으로 나눕니다. 그런데 막상 엑셀에 옮겨 보면 거래소 차트에 떠 있는 값과 소수점 몇 자리가 아니라 눈에 띌 만큼 어긋나는 경우가 많고, "가격이 선 아래로 마감했는데 이평선은 왜 올라갔지" 같은 일도 생깁니다. 둘 다 계산식을 한 단계 더 풀어 보면 이유가 보입니다.
이 글은 단순 이동평균과 지수 이동평균을 손으로 계산하는 순서, 다음 봉 종가가 얼마여야 가격이 선 위로 마감하는지 거꾸로 푸는 식, 그리고 계산값이 차트와 어긋나는 자리를 정리합니다. 기간을 몇으로 잡을지, 단순과 지수 중 무엇을 고를지는 이동평균선 설정 칸 네 개에서 다뤘으니 여기서는 "이미 정한 설정을 어떻게 셈하는가"만 봅니다.
단순 이동평균 계산식 — 더하고 나누면 끝이지만 무엇을 더하는지가 먼저입니다
단순 이동평균(SMA)의 계산식은 이렇습니다.
SMA = (최근 N개 봉의 종가 합) ÷ N
예시 숫자로 해 보겠습니다. 실제 시세가 아니라 계산을 보여 주기 위한 값입니다. 5개 봉의 종가가 오래된 순서로 100, 102, 101, 104, 103이라면 합은 510이고, 5이평은 510 ÷ 5 = 102입니다.
여기서 먼저 정해 둘 것이 하나 있습니다. N은 날짜 수가 아니라 봉 개수입니다. 일봉 차트에서 20이면 20일이고, 4시간봉 차트에서 20이면 80시간이며, 1시간봉에서 20이면 20시간입니다. 주식의 20일선은 거래일 20일이라 달력으로는 4주쯤이지만, 코인은 주말에도 봉이 그려지므로 일봉 20개가 그대로 달력 20일입니다. 이 차이가 기간을 옮겨 쓸 때 어떤 문제를 만드는지는 주식 이동평균선을 코인에 옮길 때에 따로 적었습니다.
20일 이동평균선 계산 — 엑셀에서 한 줄로
종가를 B열 2행부터 쌓았다면 20번째 봉이 들어온 21행에서 이렇게 씁니다.
=AVERAGE(B2:B21)
이 칸을 아래로 끌어 내리면 범위가 한 칸씩 내려가며 20이평이 이어집니다. 위쪽 19개 행은 값이 비어 있어야 정상입니다. 봉이 20개 모이기 전에는 20이평이 존재하지 않습니다. 차트 프로그램이 상장 직후 종목에서 선을 늦게 그리기 시작하는 것도 같은 이유입니다.
하나 주의할 점은 일봉의 경계입니다. 바이낸스 일봉은 한국 시각 자정이 아니라 오전 9시(KST)에 닫힙니다. 국내 거래소 차트나 다른 서비스에서 받은 일봉 종가를 섞어 넣으면 같은 날짜라도 다른 24시간의 종가가 들어갑니다. 바이낸스 일봉 마감 시간을 먼저 맞춰 두지 않으면 계산이 맞아도 값은 어긋납니다.
다음 값은 하나 빼고 하나 더한 것 — 가격이 선 아래인데 이평선이 오르는 이유
봉이 하나 새로 닫히면 SMA는 처음부터 다시 더할 필요가 없습니다.
새 SMA = 이전 SMA + (새 종가 − 빠지는 종가) ÷ N
앞의 예시에서 다음 봉이 107로 닫히면 빠지는 값은 가장 오래된 100입니다. 새 5이평은 102 + (107 − 100) ÷ 5 = 103.4입니다. 102, 101, 104, 103, 107을 처음부터 더해 5로 나눠도 같은 값이 나옵니다.
이 식이 알려 주는 것이 있습니다. 이평선이 오르느냐 내리느냐는 새 종가와 선의 위치가 아니라 새 종가와 빠지는 종가의 비교로 정해집니다. 다음 봉이 101로 닫혔다고 해 봅시다. 현재 5이평 102보다 낮게 마감했는데도 새 5이평은 102 + (101 − 100) ÷ 5 = 102.2로 올라갑니다. 빠지는 100보다 들어온 101이 컸기 때문입니다. "가격이 선 아래로 내려왔는데 선은 위를 향한다"는 장면은 대부분 이 산수입니다.
같은 식에서 기간에 따른 차이도 나옵니다. 새 종가와 빠지는 종가가 1% 차이 날 때 선은 5이평에서 0.2%, 10이평에서 0.1%, 20이평에서 0.05% 움직입니다. 기간이 두 배가 되면 한 봉이 선을 미는 힘이 절반이 됩니다.
지수 이동평균 계산식 — 가중치 2/(N+1)과 시작값
지수 이동평균(EMA)은 모든 봉을 같은 무게로 더하지 않고, 최근 봉에 더 큰 무게를 줍니다.
α = 2 ÷ (N + 1) 새 EMA = 이전 EMA + α × (새 종가 − 이전 EMA)
5EMA라면 α는 2 ÷ 6, 약 0.333입니다. 앞의 예시에서 시작값을 SMA 102로 잡고 다음 종가 107을 넣으면 102 + 0.333 × 5 ≈ 103.67입니다. 같은 자리에서 SMA는 103.4였으니 EMA 쪽이 새 값에 조금 더 빨리 따라붙습니다.
엑셀로는 이렇게 이어 갑니다. 21행에 시작값으로 =AVERAGE(B2:B21)을 넣고, 22행부터는
=D21+(2/(20+1))*(B22-D21)
을 아래로 끌어 내립니다.
EMA에서 계산이 어긋나는 가장 흔한 원인은 시작값입니다. EMA는 직전 EMA를 계속 물고 가기 때문에 첫 값이 오래 남습니다. 20EMA에서 시작값의 무게는 20봉 뒤에 약 13.5%, 40봉 뒤에 약 1.8%, 60봉 뒤에 약 0.25%까지 줄어듭니다. 그러니 데이터를 30봉만 받아서 계산한 20EMA와 1,000봉을 받아서 계산한 20EMA는 같은 날짜에서도 값이 다릅니다. 지표가 안정되기까지 필요한 앞쪽 구간을 워밍업이라고 부르는데, EMA는 SMA보다 이 구간이 깁니다. 기간의 세 배쯤은 앞에서부터 받아 두는 편이 안전합니다.
다음 봉 종가가 얼마면 선 위로 닫히나 — 역산 식
계산식을 거꾸로 풀면 실전에서 더 쓸모가 있습니다. "이번 봉이 얼마 이상으로 닫혀야 가격이 N이평 위에서 마감하는가"를 미리 알 수 있습니다.
다음 봉이 닫히면 창에 남는 것은 최근 N−1개 종가와 새 종가입니다. 최근 N−1개의 합을 S라고 하면 새 SMA는 (S + C) ÷ N이고, C가 이보다 크려면
C > S ÷ (N − 1)
이면 됩니다. 앞의 예시(100, 102, 101, 104, 103)로 5이평을 보면, 남는 네 개가 102, 101, 104, 103이라 합이 410이고 410 ÷ 4 = 102.5입니다. 다음 종가가 102.5를 넘으면 가격이 5이평 위에서 마감합니다. 엑셀에서 20이평이라면 =SUM(B3:B21)/19가 그 경계값입니다.
두 선의 교차도 같은 방식으로 풀립니다. 5이평이 10이평을 넘으려면, 최근 4개 종가의 합을 S4, 최근 9개 종가의 합을 S9라고 할 때
C > S9 − 2 × S4
입니다. 예를 들어 최근 9개 종가가 104, 104, 103, 103, 103, 102, 102, 103, 103이면 S9는 927, 최근 4개 S4는 410이라 경계는 927 − 820 = 107입니다. 지금 가격이 103 근처라면 다음 봉 하나로 교차가 나려면 4% 가까이 올라야 한다는 뜻이고, 그만큼 교차가 아직 먼 자리라는 뜻이기도 합니다. 정배열·역배열처럼 선 여러 개의 순서를 판정하는 수식은 정배열 역배열 차이에 적었습니다.
이 역산은 방향을 알려 주지 않습니다. 경계값까지의 거리, 그러니까 지금 상태가 한 봉 만에 뒤집힐 수 있는 자리인지 아닌지를 알려 줄 뿐입니다.
계산값이 거래소 차트와 어긋나는 다섯 자리
식이 맞는데도 값이 다르면 대개 다음 중 하나입니다.
- 진행 중인 봉을 넣었다. 차트는 아직 닫히지 않은 봉의 현재가까지 넣어 선을 그립니다. 그 값은 봉이 닫힐 때까지 계속 바뀝니다. 닫힌 봉만 넣어 계산한 값과 비교해야 합니다. 이 차이가 신호를 뒤집는 현상은 리페인팅에 정리돼 있습니다.
- 일봉 경계가 다르다. 앞에서 본 오전 9시(KST) 문제입니다. 4시간봉도 01·05·09·13·17·21시에 닫히므로 다른 경계를 쓰는 데이터와 섞이면 어긋납니다.
- EMA 시작점이 다르다. 받은 데이터 길이가 다르면 같은 20EMA라도 값이 다릅니다.
- 원천값이 종가가 아니다. 설정 창에서 원천값을 고가·저가 평균 같은 것으로 바꿔 둔 경우입니다.
- 현물 차트와 선물 차트를 바꿔 봤다. 같은 BTC라도 현물 BTCUSDT와 무기한 선물 BTCUSDT는 다른 체결 기록이라 종가가 다릅니다. 무기한 선물 차트가 현물과 다른 이유를 참고하세요.
이 다섯 개를 다 맞췄는데도 끝자리 하나가 다르다면 그건 반올림 차이일 가능성이 높고, 판정에 영향을 줄 일은 드뭅니다.
90일 기록으로 본 5이평과 10이평의 차이
SignalLab은 392종목을 9개 시간봉에서 계산하고, 그중 1시간봉과 4시간봉을 공개합니다. 최근 90일 동안 이평선 기준이 붙은 다이버전스 조건은 5이평 기준에서 23,251건, 10이평 기준에서 10,583건 잡혔습니다. 같은 종목, 같은 기간인데 2.2배 차이입니다.
앞의 "하나 빼고 하나 더하기" 식으로 보면 이상한 일은 아닙니다. 5이평은 봉 하나가 닫힐 때마다 창의 5분의 1이 갈리고, 10이평은 10분의 1이 갈립니다. 선이 한 봉마다 움직이는 폭이 두 배쯤 되니 조건이 성립했다 풀렸다 하는 일도 그만큼 잦습니다. 5이평 기준 상위에는 YBUSDT 83건, NEIROUSDT 82건이 있고, 10이평 기준 상위인 BLURUSDT는 45건입니다. 상위 종목끼리 비교해도 두 기준 사이 간격이 비슷하게 벌어져 있습니다.
시간봉으로 나눠 보면 1시간봉 29,365건, 4시간봉 6,734건입니다. 같은 5이평이라도 1시간봉에서는 5시간, 4시간봉에서는 20시간을 평균하니, 계산식이 같아도 다른 선입니다. 5이평과 10이평을 기준으로 삼는 방식 자체는 5이평·10이평 다이버전스 항목에 있습니다.
이 숫자들은 얼마나 자주 나오느냐를 잰 것이고, 그 뒤에 가격이 어디로 갔는지와는 상관없습니다.
자주 묻는 것
이동평균선 계산에 종가 말고 다른 값을 써도 되나요
계산식은 어떤 값이든 받습니다. 다만 남과 같은 선을 보려면 같은 원천값을 써야 하고, 대부분의 차트 기본값은 종가입니다. 바꿨다면 바꿨다는 사실을 적어 두는 편이 낫습니다.
봉이 20개가 안 되는 신규 종목은 20이평을 어떻게 계산하나요
계산하지 않는 것이 맞습니다. 어떤 프로그램은 있는 봉만으로 평균을 내서 선을 일찍 그리기도 하는데, 그건 20이평이 아니라 5이평이나 12이평일 수 있습니다. 봉이 다 찰 때까지는 비워 두는 쪽이 오해가 적습니다.
단순과 지수 중 계산이 더 정확한 쪽이 있나요
정확도의 문제가 아니라 다른 질문에 답하는 식입니다. 단순은 창 안의 봉을 같은 무게로 보고, 지수는 최근 봉을 더 무겁게 봅니다. 어느 쪽이든 계산은 위 식대로 하면 맞고, 차트와 어긋난다면 앞의 다섯 자리를 먼저 확인하는 것이 순서입니다.
정리
이동평균선 계산식은 더하고 나누는 것이 전부지만, 계산을 맞추려면 N이 봉 개수라는 것, 일봉이 언제 닫히는지, EMA를 어디서 시작했는지를 같이 맞춰야 합니다. 그리고 "하나 빼고 하나 더하기" 식과 역산 식 두 줄만 알아 두면, 선이 왜 그쪽으로 움직였는지와 다음 봉에서 무엇이 바뀔 수 있는지를 차트를 띄우기 전에 셈할 수 있습니다.
처음 보는 말이 있으면 용어 사전에 다이버전스·펀딩비·미결제약정 등을 풀어 두었습니다.