지표 목록으로
추세입문

Simple Moving Average

단순이동평균

SMA는 특정 기간 동안의 가격을 균등 가중 산술 평균하여 추세의 방향과 강도를 파악하는 가장 기본적인 추세 지표입니다. 통계학의 시계열 분석에서 유래하여 1940년대 Richard Donchian이 금융 시장에 체계적으로 적용했습니다.

2025년 1월 31일
46분 읽기
참고문헌 9개

개요

Simple Moving Average (SMA, 단순이동평균)는 가장 오래되고 널리 사용되는 기술적 분석 지표다. 특정 기간(nn) 동안의 종가를 균등 가중 산술 평균하여 가격의 추세를 평활화(smoothing)한다1.

핵심 아이디어: SMA는 "노이즈를 제거하고 추세를 드러내는" 저역통과 필터다. 단기 가격 변동은 상쇄되고, 기저의 추세 방향만 남는다.

기원과 역사

SMA는 단일 창시자가 있는 지표가 아니라, 통계학의 시계열 분석(time series analysis)에서 오랜 역사를 가진 기법이 금융에 적용된 것이다2.

통계학적 기원: 이동평균 기법의 최초 사용 사례는 1833년 영란은행(Bank of England)으로 거슬러 올라간다. 금 보유량(bullion reserves) 데이터를 평활화하기 위해 사용했다고 기록되어 있다2. 1901년에는 영국의 통계학자 R.H. Hooker가 Journal of the Royal Statistical Society에 발표한 논문에서 경제 시계열 데이터에 이동평균 기법을 적용했으며, 1909년 G.U. Yule가 이를 "moving-averages"라는 용어로 공식화했다.

금융 시장 적용: Charles Dow는 1884년 최초의 주가 평균(stock price average)을 만들어 기술적 분석의 토대를 구축했다. 이동평균을 금융 트레이딩에 체계적으로 적용한 선구자는 Richard Donchian(1905~1993)이다. "추세추종의 아버지(Father of Trend Following)"로 불리는 Donchian은 Yale대 경제학과를 졸업한 뒤, 1940년대 후반에 이동평균 기반 트레이딩 규칙을 처음 도입했다. 1949년 최초의 공개 관리형 선물 펀드(Futures, Inc.)를 설립했고, 1960년부터 5일/20일 이동평균 방법론에 기반한 주간 뉴스레터 Commodity Trend Timing을 19년간 발행했다(주간 약 10,000부 유통).

1960년대 컴퓨터 보급과 함께 이동평균이 기술적 분석 도구로 본격 활용되기 시작했고, 1970년대에는 Gerald Appel이 두 EMA의 차이를 이용한 MACD를 개발하여 이동평균 응용의 정점을 이루었다.

시기맥락
1833년영란은행이 금 보유량 데이터 평활화에 이동평균 사용2
1884년Charles Dow가 최초의 주가 평균 편집
1901년R.H. Hooker가 학술 논문에서 이동평균 기법 적용
1940s-1960sRichard Donchian이 이동평균 기반 트레이딩 규칙 체계화
1960년대컴퓨터 보급으로 실시간 이동평균 계산 가능
1992년Brock et al.의 90년 실증 연구가 학술적 근거 제공3

수학적 정의

기본 공식

nn기간 단순이동평균(Simple Moving Average)은 가장 최근 nn개 가격의 산술 평균(arithmetic mean)으로 정의된다4:

SMAt(n)=1ni=0n1Pti=Pt+Pt1+Pt2++Ptn+1nSMA_t(n) = \frac{1}{n} \sum_{i=0}^{n-1} P_{t-i} = \frac{P_t + P_{t-1} + P_{t-2} + \cdots + P_{t-n+1}}{n}

여기서:

  • PtP_t = 시점 tt의 종가(Close Price)
  • nn = 룩백 기간(lookback period), 양의 정수
  • SMAt(n)SMA_t(n) = 시점 tt에서의 nn기간 SMA 값

변수 정의

기호의미범위
PtP_t시점 tt의 종가Pt>0P_t > 0
nn이동평균 기간nZ+n \in \mathbb{Z}^+, 보통 5~200
wiw_iii번째 과거 가격의 가중치SMA에서 wi=1nw_i = \frac{1}{n}, i\forall i

SMA의 핵심 특성은 균등 가중(equal weighting)이다. 윈도우 내 모든 가격이 동일한 가중치 1n\frac{1}{n}을 받는다. 이것이 EMA, WMA 등 다른 이동평균과 구별되는 SMA의 수학적 정체성이다.

단계별 계산

5기간 SMA를 5일간의 종가 데이터로 계산한다.

일자종가 (PtP_t)
1100
2102
3104
4101
5103
6105
7107

일자 5의 SMA(5):

SMA5(5)=100+102+104+101+1035=5105=102.0SMA_5(5) = \frac{100 + 102 + 104 + 101 + 103}{5} = \frac{510}{5} = 102.0

일자 6의 SMA(5):

SMA6(5)=102+104+101+103+1055=5155=103.0SMA_6(5) = \frac{102 + 104 + 101 + 103 + 105}{5} = \frac{515}{5} = 103.0

윈도우가 한 칸 전진하면서 가장 오래된 가격(100)이 빠지고, 최신 가격(105)이 포함된다.

재귀적 계산 (Recursive Update)

매번 nn개를 더하는 대신, 이전 SMA를 활용하면 O(1)O(1)로 계산할 수 있다4:

SMAt(n)=SMAt1(n)+PtPtnnSMA_t(n) = SMA_{t-1}(n) + \frac{P_t - P_{t-n}}{n}

일자 6의 경우:

SMA6(5)=102.0+1051005=102.0+1.0=103.0SMA_6(5) = 102.0 + \frac{105 - 100}{5} = 102.0 + 1.0 = 103.0

새로 들어오는 가격(Pt=105P_t = 105)에서 빠지는 가격(Ptn=100P_{t-n} = 100)을 빼고, nn으로 나눈 값을 이전 SMA에 더한다. 이 재귀식은 실시간 시스템에서 계산 효율성을 크게 높인다.

가중치 분포 (Weight Distribution)

SMA에서 윈도우 내 모든 가격의 가중치는 동일하다:

wi=1n,for i=0,1,,n1w_i = \frac{1}{n}, \quad \text{for } i = 0, 1, \ldots, n-1

n=5n=5일 때 이동평균 간 가중치 비교:

시점SMA (wiw_i)EMA (α=0.333\alpha = 0.333)WMA
PtP_t (현재)20.0%33.3%33.3%
Pt1P_{t-1}20.0%22.2%26.7%
Pt2P_{t-2}20.0%14.8%20.0%
Pt3P_{t-3}20.0%9.9%13.3%
Pt4P_{t-4}20.0%6.6%6.7%
Pt5P_{t-5} 이전0% (절단)잔여(13.2%)0%

SMA의 가중치는 "박스카(boxcar)" 형태 -- 윈도우 안은 균등, 밖은 0이다. EMA는 지수적으로 감소하며 이론적으로 무한히 과거까지 영향이 남는다.

비유적 설명

SMA를 일정한 크기의 창문을 열차에서 바라보는 풍경으로 이해할 수 있다. 열차(시간)가 앞으로 이동하면, 창문 안에 보이는 풍경(가격 데이터)이 함께 이동한다. 창문의 크기가 nn이다.

  • 창문이 작으면(n이 작으면): 바로 앞의 풍경이 선명하게 보인다. 나무 한 그루(단기 가격 변동)도 뚜렷하다. 하지만 숲 전체의 방향(추세)은 파악하기 어렵다.
  • 창문이 크면(n이 크면): 넓은 풍경이 한 눈에 들어온다. 개별 나무는 흐릿하지만 산맥(장기 추세)의 방향이 보인다. 다만 방향이 바뀌는 지점(추세 전환)은 이미 지나친 뒤에야 알게 된다.
  • 열차가 한 칸 전진할 때마다, 창문 뒤쪽 끝의 풍경(가장 오래된 가격)은 사라지고, 앞쪽에 새 풍경(최신 가격)이 나타난다. 이것이 "이동(Moving)" 평균의 본질이다.

특수 케이스 (경계값)

데이터 부족 (데이터 수 < n): nn기간 SMA를 계산하려면 최소 nn개의 데이터 포인트가 필요하다. 데이터가 nn개 미만이면 SMA를 산출할 수 없다(null/NaN 반환).

모든 가격이 동일한 경우: Pti=cP_{t-i} = c (상수)이면 SMAt(n)=cSMA_t(n) = c. SMA가 가격과 정확히 일치하며 완벽한 수평선이 된다.

극단적 이상값(Outlier)의 영향: SMA는 산술 평균이므로 이상값에 민감하다. n=5n=5에서 하나의 이상값은 SMA에 20%의 가중치로 반영되지만, n=200n=200에서는 0.5%에 불과하다. SMA의 이상값 민감성은 두 번 발생한다: (1) 이상값이 윈도우에 진입할 때 SMA가 급변하고, (2) 이상값이 윈도우에서 빠질 때 다시 급변한다. 이 "더블 펀치(double-punch)" 현상은 EMA에서는 발생하지 않는다.

n=1인 경우: SMAt(1)=PtSMA_t(1) = P_t. 기간이 1이면 원래 가격 자체와 동일하며, 평활화 효과가 없다.

수학적 특성

후행성 (Lag)

SMA의 평균 지연(group delay)은 다음과 같다4:

Lag=n12 기간\text{Lag} = \frac{n - 1}{2} \text{ 기간}

가중치의 "무게 중심(center of mass)"이 윈도우의 정중앙에 위치하기 때문이다:

Lag=i=0n1iwi=1n(n1)n2=n12\text{Lag} = \sum_{i=0}^{n-1} i \cdot w_i = \frac{1}{n} \cdot \frac{(n-1)n}{2} = \frac{n-1}{2}
기간 (nn)지연 (Lag)의미
52.0 기간약 2일 전 가격에 반응
209.5 기간약 10일 전
5024.5 기간약 25일 전
20099.5 기간약 100일 전

200일 SMA가 추세 전환에 매우 느리게 반응하는 이유가 여기에 있다. 200일 SMA는 본질적으로 "약 100일 전의 평균 가격"을 보고 있는 것이다.

주파수 응답: 저역통과 필터

신호처리(Signal Processing) 관점에서 SMA는 FIR(Finite Impulse Response) 저역통과 필터(low-pass filter)다. 크기 응답(magnitude response)은 다음과 같다:

H(f)=1nsin(πfn)sin(πf)|H(f)| = \frac{1}{n} \left| \frac{\sin(\pi f n)}{\sin(\pi f)} \right|

이 sinc 함수형 응답의 의미:

  • 저주파(장기 추세): H(f)1|H(f)| \approx 1 -- 거의 감쇠 없이 통과
  • 고주파(단기 노이즈): H(f)0|H(f)| \approx 0 -- 크게 감쇠
  • 영점(null): f=k/nf = k/n에서 H(f)=0|H(f)| = 0 -- 해당 주파수 성분을 완전히 제거

SMA의 본질은 장기 추세를 보존하고, 단기 노이즈를 제거하는 필터다. nn이 커질수록 차단 주파수가 낮아져 더 많은 고주파 성분을 제거한다. 다만 사이드로브(side lobe)가 존재하여 특정 주파수에서 리플(ripple)이 발생할 수 있다. EMA는 단조 감소 응답을 가지므로 이 문제가 없다.

분산 감소 효과 (Variance Reduction)

가격 PtP_t가 독립 동일 분포(i.i.d.)라고 가정하면4:

Var(SMAn)=Var(P)n\text{Var}(SMA_n) = \frac{\text{Var}(P)}{n}
기간 (nn)분산 감소율표준편차 감소율
580% 감소55% 감소
2095% 감소78% 감소
20099.5% 감소93% 감소

실제 금융 가격은 i.i.d.가 아니며 자기상관이 존재한다. 양의 자기상관(추세장)이 있으면 분산 감소 효과가 위 공식보다 작고, 음의 자기상관(횡보/평균회귀)이 있으면 더 크다.


파라미터

기본 기간의 유래와 근거

SMA의 대표 기간인 20, 50, 200은 각각 고유한 역사적/실무적 근거를 가진다.

20일 SMA: Murphy(1999)가 단기 추세 분석의 표준으로 권장한다1. 약 1개월(4주)의 거래일에 해당하며, Donchian의 4주 규칙(4-Week Rule)과도 일치한다. 볼린저 밴드(Bollinger Bands)의 기본 중심선이 20일 SMA인 것도 이 관행의 연장이다.

50일 SMA: Murphy(1999)는 50일을 "중기 추세 기준선"으로 기술한다1. 약 1분기(10주)의 거래일에 해당하며, 기관 투자자들이 포지션 조정의 기준으로 널리 사용한다. Appel(2005)은 50일 이동평균이 "기관의 매수/매도 기준"으로 작동하는 자기실현적(self-fulfilling) 측면이 있다고 지적한다5.

200일 SMA: Murphy(1999)는 200일 이동평균을 "강세/약세장의 분수령"이자 "가장 널리 인용되는 장기 이동평균"으로 기술한다1. 약 1년 거래일(252일)의 80%에 해당한다. Brock et al.(1992)의 90년 실증 연구에서 200일 SMA 교차 전략이 통계적으로 유의미한 초과 수익을 보였다3.

시장 사이클과의 관계: Kaufman(2013)은 이동평균 기간을 분석 대상의 사이클 주기와 연관시켜야 한다고 강조한다4:

noptimalTcycle2(반주기 원칙)n_{optimal} \approx \frac{T_{cycle}}{2} \quad \text{(반주기 원칙)}

전체 사이클을 평균하면 상승과 하락이 상쇄되어 추세 정보가 소실되기 때문에 반주기를 사용한다.

파라미터 조정 가이드

타임프레임단기 SMA중기 SMA장기 SMA비고
5분/15분5~1020~3050~100스캘핑/초단타. 노이즈 매우 높음
1시간 (1H)10~2050100~200인트라데이 스윙
4시간 (4H)2050200스윙 트레이딩 표준
일봉 (1D)2050200Murphy/Appel 표준 설정
주봉 (1W)102050장기 포지션

암호화폐 24시간 시장 고려사항

암호화폐 시장은 전통 시장과 근본적으로 다른 환경에서 운영된다:

  1. 주 7일 거래: 전통 시장에서 "20일"은 약 1달의 영업일이지만, 암호화폐에서는 정확히 20 캘린더일이다. 같은 파라미터라도 실질적인 반응 속도가 다르다.
  2. 높은 변동성: 일일 변동폭이 전통 자산 대비 크므로, SMA가 극단적 가격 변동에 더 크게 왜곡될 수 있다.
  3. 주말 효과 부재: 전통 시장의 월요일 갭(gap)이 없으므로, SMA가 더 연속적인 곡선을 형성한다.
항목전통 시장암호화폐 시장조정 근거
단기 SMA20일14~20일주 7일 거래로 실효 기간이 더 길어짐
중기 SMA50일40~50일추가 연구 필요
장기 SMA200일150~200일1년 = 365 거래일 (vs 전통 252일)
교차 조합50/20050/200 유지자기실현적 효과로 동일 파라미터가 여전히 유효

암호화폐 전용 SMA 파라미터에 대한 peer-reviewed 학술 연구는 아직 충분하지 않다. 위 조정은 시장 구조 차이에 기반한 논리적 가이드라인이며, 실전 적용 시 백테스트를 통한 검증이 필요하다.


해석 방법

1. 추세 방향 판단

Murphy(1999)의 기본 규칙1:

  • 가격 > SMA: 상승 추세 (Bullish)
  • 가격 < SMA: 하락 추세 (Bearish)
  • SMA 기울기 상승: 상승 모멘텀 확인
  • SMA 기울기 하락: 하락 모멘텀 확인

수학적 조건:

추세 방향={상승if Pt>SMAn(t) and SMAn(t)>SMAn(t1)하락if Pt<SMAn(t) and SMAn(t)<SMAn(t1)\text{추세 방향} = \begin{cases} \text{상승} & \text{if } P_t > SMA_n(t) \text{ and } SMA_n(t) > SMA_n(t-1) \\ \text{하락} & \text{if } P_t < SMA_n(t) \text{ and } SMA_n(t) < SMA_n(t-1) \end{cases}

가격과 SMA의 위치 관계만으로는 불충분하며, SMA의 기울기(방향)를 함께 확인해야 한다. 가격이 SMA 위에 있지만 SMA가 하락하고 있다면, 추세 전환의 초기 단계일 수 있다.

2. 동적 지지선/저항선

Appel(2005)에 따르면, SMA는 고정된 수평선이 아닌 동적인(dynamic) 지지/저항 역할을 한다5:

  • 상승 추세: 가격이 SMA 위에서 움직이며, SMA 부근으로 하락 시 반등하는 경향. SMA가 "바닥" 역할
  • 하락 추세: 가격이 SMA 아래에서 움직이며, SMA 부근으로 상승 시 저항에 부딪히는 경향. SMA가 "천장" 역할

50일, 200일 SMA는 시장 참여자들이 공통적으로 주시하므로, 자기실현적 예언(self-fulfilling prophecy) 효과가 작동한다. 많은 트레이더가 200일 SMA에서 매수/매도 주문을 집중시키므로, 실제로 지지/저항으로 기능하는 경향이 강화된다.

3. 골든크로스 / 데드크로스

두 개의 SMA(단기, 장기)를 사용하는 교차(crossover) 전략1:

  • 골든크로스(Golden Cross): 단기 SMA가 장기 SMA를 상향 돌파 -- 매수 신호
  • 데드크로스(Death Cross): 단기 SMA가 장기 SMA를 하향 돌파 -- 매도 신호

수학적 조건:

Golden Cross at t:SMAshort(t1)<SMAlong(t1) and SMAshort(t)>SMAlong(t)\text{Golden Cross at } t: \quad SMA_{short}(t-1) < SMA_{long}(t-1) \text{ and } SMA_{short}(t) > SMA_{long}(t)

주요 조합:

단기 / 장기용도특성
10 / 30스윙 트레이딩민감, 신호 빈번
20 / 50중기 추세균형
50 / 200장기 투자보수적, 신호 드묾

Brock et al.(1992)의 연구에서 50/200 SMA 교차 전략은 1897~1986년 DJIA 데이터에서 통계적으로 유의미한 초과 수익을 달성했다3.

4. 삼중 이동평균 시스템 (Triple MA System)

Appel(2005)은 3개의 SMA(예: 10/20/50)를 동시에 사용하여 "확인 단계"를 추가하는 방법을 기술한다5. 세 이동평균의 순서 정렬(alignment)이 추세 강도를 나타낸다:

  • 완전 상승 정렬: SMA10>SMA20>SMA50SMA_{10} > SMA_{20} > SMA_{50} -- 강한 상승 추세
  • 완전 하락 정렬: SMA10<SMA20<SMA50SMA_{10} < SMA_{20} < SMA_{50} -- 강한 하락 추세
  • 교차/혼재: 추세 전환 구간 또는 횡보

5. 이동평균 엔벨로프 (MA Envelope)

SMA에 고정 비율(%)의 밴드를 상하로 설정하는 기법이다. 가격이 밴드 밖으로 이탈하면 과매수/과매도로 판단한다:

Upper Band=SMA20×1.03,Lower Band=SMA20×0.97\text{Upper Band} = SMA_{20} \times 1.03, \quad \text{Lower Band} = SMA_{20} \times 0.97

Murphy(1999)는 엔벨로프 비율이 시장 변동성에 따라 조정되어야 한다고 강조한다1. 이 개념은 이후 John Bollinger가 표준편차 기반 밴드(볼린저 밴드)로 발전시켰다.

신호 강도 분류

조건강도설명
단일 SMA 교차 + SMA 기울기 불일치약함허위 신호 가능성 높음
단일 SMA 교차 + SMA 기울기 일치보통기본적 추세 확인
이중 SMA 골든/데드크로스보통~강함50/200 조합은 역사적으로 검증됨3
삼중 SMA 완전 정렬강함단기/중기/장기 추세 일치
SMA 교차 + 거래량 증가강함추세의 참여도 확인

실용적 활용

매매 전략

가격-SMA 교차 진입 (단일 SMA):

  • 매수: 가격이 SMA를 하방에서 상방으로 돌파 (종가 기준)
  • 매도: 가격이 SMA를 상방에서 하방으로 돌파 (종가 기준)
  • 추가 필터: SMA 기울기가 돌파 방향과 일치해야 유효

이중 SMA 교차 진입:

  • 매수: 단기 SMA가 장기 SMA를 상향 교차 (골든크로스)
  • 매도: 단기 SMA가 장기 SMA를 하향 교차 (데드크로스)
  • 신호 지연이 크므로, 추세의 초기보다 추세 확인 후 진입에 적합

SMA 지지/저항 반등 진입 (Appel, 2005)5:

  • 매수: 상승 추세에서 가격이 50일 또는 200일 SMA까지 하락 후 반등 확인
  • 매도: 하락 추세에서 가격이 50일 또는 200일 SMA까지 상승 후 하락 확인

청산 규칙:

  1. 반대 교차: 진입 신호와 반대 방향의 SMA 교차 발생 시 청산
  2. 사전 설정 손절: 진입가 대비 고정 비율 손절 (손익비에 따라 결정)
  3. SMA 이탈: 가격이 진입 방향의 SMA를 역돌파하고 종가 기준으로 유지되면 청산

다른 지표와의 조합

SMA + RSI (추세 필터 + 모멘텀 타이밍): SMA는 추세의 방향(큰 그림)을 제공하고, RSI는 그 추세 안에서의 진입 타이밍(작은 그림)을 제공한다. 서로 다른 차원(추세 vs 모멘텀)의 정보를 결합하므로 정보 중복이 없다. 가격이 200일 SMA 에 있을 때만 RSI 매수 신호를 취하고, 아래에 있을 때만 RSI 매도 신호를 취한다1.

SMA + MACD (추세 확인 + 추세 전환 감지): MACD 자체가 두 EMA의 차이이므로 SMA와 동일 계열이지만, SMA는 절대적 추세 위치(가격이 SMA 위/아래)를, MACD는 추세의 가속/감속(수렴/발산)을 측정한다. Appel(2005)은 MACD 개발자로서, 장기 SMA(200일)를 추세 필터로 두고 MACD를 진입 신호로 사용하는 방법을 기술한다5.

SMA + 거래량 (Volume): SMA는 가격만을 반영하며 거래량을 전혀 고려하지 않는다. 골든크로스/데드크로스 발생 시, 교차일 전후 3일의 평균 거래량이 20일 평균 거래량보다 50% 이상 높으면 신호 신뢰도가 상승한다. Murphy(1999)는 "거래량은 가격에 선행한다(Volume precedes price)"는 원칙을 강조한다1.

조합 시 주의사항: 유사한 원리의 지표를 중복 사용하는 것은 "이중 확인"이 아니라 "동어반복(tautology)"이다. SMA와 EMA를 동시에 사용하는 것은 거의 같은 정보를 약간 다른 가중치로 반복 측정하는 것에 불과하다. 조합의 가치는 서로 다른 차원의 정보(추세/모멘텀/변동성/거래량)를 결합할 때 발생한다.


학술적 검증

실증 연구 결과

1. Fama & Blume (1966) -- 필터 규칙과 주식시장 트레이딩6

미국 Dow 30 종목을 대상으로, 필터 규칙(x% 이상 상승 시 매수, x% 이상 하락 시 매도) 기반 매매 전략을 검증했다. 가장 작은 필터(0.5%)가 최고 수익을 보였으나, 거래 비용 차감 후 매수-보유(buy-and-hold) 전략 대비 초과 수익이 소멸했다. 효율적 시장 가설(EMH)을 지지하는 초기 핵심 연구다.

2. Brock, Lakonishok & LeBaron (1992) -- 90년 실증 검증3

1897~1986년 DJIA 90년 데이터로 26개 기술적 트레이딩 규칙을 테스트했다. 이동평균 교차(VMA) 10개 변형을 포함하여, 부트스트랩 기법으로 4가지 귀무 모형(랜덤 워크, AR(1), GARCH-M, Exponential GARCH) 대비 검증했다. 매수 신호 이후 수익률이 매도 신호 이후 수익률보다 일관되게 높았으며, 테스트한 26개 규칙 모두 벤치마크를 상회했다. 기술적 분석 분야에서 가장 영향력 있는 논문 중 하나다.

3. Sullivan, Timmermann & White (1999) -- 데이터 스누핑 보정7

White's Reality Check 부트스트랩을 적용하여 데이터 스누핑(data-snooping) 편향을 통제했다. Brock et al.(1992)의 표본 내(in-sample) 기간에서는 최고 성과 규칙이 보정 후에도 유의미했으나, 10년 표본 외(out-of-sample) 기간에서는 수익성이 현저히 감소했다. 다수 규칙을 동시에 테스트할 때 발생하는 데이터 스누핑 편향을 최초로 체계적으로 통제한 방법론적 이정표다.

4. Lo, Mamaysky & Wang (2000) -- 기술적 분석의 수학적 기초8

1962~1996년 미국 주식 대규모 종목군을 대상으로, 비모수 커널 회귀(nonparametric kernel regression)를 이용하여 기술적 패턴을 자동 인식하는 알고리즘을 개발했다. 31년 표본 기간 동안 여러 기술적 지표가 증분적(incremental) 정보를 제공함을 확인했다. 기술적 분석을 주관적 판단이 아닌 객관적 통계 추론 프레임워크로 격상시킨 연구다.

5. Han, Yang & Zhou (2013) -- 횡단면 수익성의 새로운 이상현상9

기업 수준 수익률 변동성(정보 불확실성의 대리 변수)으로 포트폴리오를 분류한 뒤, 이동평균 타이밍 전략을 적용했다. 고변동성 포트폴리오에서 이동평균 전략이 매수-보유 전략을 대폭 상회했으며, CAPM 및 Fama-French 3요인 모형 대비 경제적으로 유의미한 비정상 수익률을 확인했다. 이동평균의 횡단면 수익성을 최초로 입증한 연구로, "노이즈가 많은 환경에서 신호를 추출하는 도구"라는 SMA의 본질에 부합하는 결과다.

통계적 유효성 요약

연구시장/기간핵심 발견EMH 관점
Fama & Blume (1966)6미국 Dow 30, 1950s거래 비용 후 초과 수익 없음EMH 지지
Brock et al. (1992)3미국 DJIA, 1897~1986매수 신호 > 매도 신호, 4가지 귀무 모형 기각EMH 반박
Sullivan et al. (1999)7미국 DJIA, ~100년표본 내 유의미, 표본 외 수익성 감소조건부
Lo et al. (2000)8미국 주식, 1962~1996기술적 패턴에 유의미한 증분 정보 존재EMH 반박(부분적)
Han et al. (2013)9미국 주식(변동성별)고변동성 포트폴리오에서 MA 타이밍이 모멘텀보다 우수EMH 반박(새로운 이상현상)

효율적 시장 가설(EMH)과의 관계

SMA 전략은 과거 가격 데이터만을 입력으로 사용하므로, 약형 효율적 시장 가설(Weak-form EMH)과 직접적으로 충돌한다.

EMH를 지지하는 증거: Fama & Blume(1966)는 거래 비용 차감 후 초과 수익 소멸을 보였고6, Sullivan et al.(1999)는 시간이 지남에 따라 기술적 트레이딩 규칙의 수익성이 감소하는 것을 관찰했다7.

EMH에 대한 반례: Brock et al.(1992)의 90년 데이터에서 4가지 표준 모형으로 설명할 수 없는 초과 수익을 보였고3, Han et al.(2013)은 이동평균의 횡단면 수익성이 CAPM 및 Fama-French 3요인 모형으로도 설명되지 않는 "새로운 이상현상"임을 주장했다9.

메타 분석적 시각: 5개 연구를 종합하면 일관된 패턴이 관찰된다. (1) 시간적 감쇠 -- 과거로 갈수록 유효성이 높고 최근으로 올수록 감소한다. (2) 시장 효율성과의 반비례 -- 비효율적 시장(높은 변동성, 높은 정보 불확실성)에서 이동평균 전략의 가치가 더 크다. (3) SMA 전략은 "시장을 이기는 도구"보다는 "하방 리스크를 관리하는 도구"로서의 가치가 더 일관되게 지지된다.


한계점

1. 후행성 (Lagging Nature)

SMA는 본질적으로 후행 지표(lagging indicator)다. 과거 nn개의 가격을 동일 가중 평균하므로, 현재 가격 변화에 대한 반응이 구조적으로 지연된다1. 수학적으로 SMA의 평균 지연은 정확히 n12\frac{n-1}{2} 기간이다4.

SMA 기간평균 지연실무적 의미
20일9.5일추세 전환을 약 10일 후에야 반영
50일24.5일약 한 달의 지연
200일99.5일약 3개월 이상의 지연

대안/보완: EMA는 최근 가격에 더 높은 가중치를 부여하여 후행성을 줄인다. KAMA(Kaufman Adaptive Moving Average)는 시장 효율성(noise ratio)에 따라 반응 속도를 자동 조절한다4.

2. 횡보장 취약성 (Whipsaw)

추세가 없는 횡보(range-bound) 구간에서 가격이 SMA를 빈번하게 교차하며 허위 신호(whipsaw)가 반복된다. Kaufman(2013)은 이를 "추세추종 전략의 가장 큰 약점"으로 지적한다4.

대안/보완: ADX(Average Directional Index)로 추세 유무를 먼저 판단(ADX < 20이면 횡보로 판단)하고, 횡보 구간에서는 SMA 신호를 무시한다. Kaufman의 KAMA는 횡보 구간에서 자동으로 반응을 둔화시켜 whipsaw를 줄인다4.

3. 동일 가중치 문제 (Equal Weighting)

SMA는 윈도우 내 모든 가격에 동일한 가중치 1n\frac{1}{n}을 부여한다. 20일 전의 가격과 오늘의 가격이 똑같은 중요도로 평균에 반영된다4.

유령 효과(Ghost Effect): 20일 SMA에서 20일 전 가격이 비정상적으로 높았다면, 오늘 가격이 전혀 변하지 않아도 SMA가 하락한다. 이 가격이 윈도우에서 빠지는 순간 SMA가 현재 시장 상태와 무관하게 급변하는 현상이다.

대안/보완: EMA는 지수적으로 감소하는 가중치를 사용하여 최근 데이터를 더 중시한다. WMA는 선형적으로 감소하는 가중치를 사용한다.

4. 기간 최적화의 함정 (Overfitting)

백테스트에서 최적의 SMA 기간을 찾더라도, 이것이 미래 수익을 보장하지 않는다. Kaufman(2013)은 "최적화된 시스템은 과거에는 완벽하지만, 미래에는 최악일 수 있다"고 경고한다4. Sullivan et al.(1999)는 데이터 스누핑의 위험을 체계적으로 입증했다7.

대안/보완: 표준 파라미터(20/50/200)를 기본으로 사용한다. 널리 사용되므로 자기실현적 효과가 있으며, 특정 시장에 과적합되지 않은 범용 설정이다.

5. 이상값(Outlier) 민감성

SMA는 산술 평균이므로, 단일 극단적 가격 변동이 평균에 1n\frac{1}{n}만큼 반영된다. n=10n=10이면 왜곡이 10%, n=200n=200이면 0.5%다. 암호화폐 시장에서 일일 10~30% 급등락은 단기 SMA를 심각하게 왜곡시킬 수 있다.

대안/보완: 중앙값(Median) 기반 이동평균은 이상값에 강건(robust)하다. Trimmed Mean(상하 극단값 제거 후 평균)도 대안이다. 다만 이들은 SMA의 수학적 단순성을 희생한다.

6. 추세 전환 초기 진입 불가

SMA 교차 전략은 추세가 이미 상당 부분 진행된 후에야 신호를 발생시킨다. Brock et al.(1992)의 연구에서 50/200 SMA 교차 전략은 90년간 유의미한 초과 수익을 보였지만, 각 개별 추세에서 초반 1015%의 움직임은 신호 발생 전에 이미 진행되었다3. 이는 SMA 교차의 구조적 특성이다 -- 추세의 중반후반을 포착하는 것이 SMA의 역할이다.

흔한 오용

  • "골든크로스 = 반드시 상승, 데드크로스 = 반드시 하락": 골든크로스와 데드크로스는 확률적 신호이지 결정적 예측이 아니다. 교차 시점의 추세 환경과 거래량을 함께 평가해야 한다.
  • 과최적화된 기간으로 실전 매매: 백테스트에서 발견한 비표준 조합(예: "17일/43일")을 그대로 적용하는 것은 데이터 스누핑의 전형적 함정이다7.
  • 단일 타임프레임만으로 판단: 일봉 SMA 교차만 보고 진입하면, 주봉의 추세와 충돌할 수 있다. 최소 2개 타임프레임에서 추세 방향이 일치하는지 확인해야 한다.
  • SMA를 "예측" 도구로 착각: SMA는 과거 데이터의 평활화된 요약이지 미래 가격의 예측이 아니다. SMA의 기울기 상승은 "지난 nn기간의 평균 가격이 올랐다"는 사실의 기술(description)이지 예측(prediction)이 아니다.
  • SMA 단독으로 매매 의사결정: SMA는 가격의 추세만 측정하며, 거래량/변동성/모멘텀 정보를 제공하지 않는다. 추세 확인의 "첫 번째 필터"로 사용하고, 다른 차원의 지표를 추가해야 한다.

구현 예시

Kaufman(2013)의 재귀적 계산 공식과 Murphy(1999)의 골든크로스/데드크로스 정의에 충실한 구현이다41. 교육 목적이므로 가독성을 우선한다.

// --- 타입 정의 ---

interface SMAInput {
  /** 종가(close price) 배열. 시간순 정렬 (오래된 것부터) */
  prices: number[];
  /** 이동평균 기간. 양의 정수여야 한다 */
  period: number;
}

interface SMAResult {
  /** SMA 값 배열. 길이 = prices.length - period + 1 */
  values: number[];
}

interface CrossSignal {
  /** 교차가 발생한 인덱스 (shortSMA 배열 기준) */
  index: number;
  /** 'golden' = 단기가 장기를 상향 돌파, 'dead' = 단기가 장기를 하향 돌파 */
  type: 'golden' | 'dead';
}

// --- 입력 검증 ---

function validateInput(prices: number[], period: number): void {
  if (!Number.isInteger(period) || period <= 0) {
    throw new Error(
      `Invalid period: ${period}. Period must be a positive integer.`
    );
  }

  for (let i = 0; i < prices.length; i++) {
    if (
      prices[i] === undefined ||
      prices[i] === null ||
      !Number.isFinite(prices[i])
    ) {
      throw new Error(
        `Invalid price at index ${i}: ${prices[i]}. All prices must be finite numbers.`
      );
    }
  }
}

// --- 기본 구현: O(n * period) ---

/**
 * SMA 기본 구현.
 * 매 시점마다 period개의 가격을 합산하여 평균을 구한다.
 * 수식: SMA_n = (1/n) * Sigma P_{t-i}  (i = 0 to n-1)
 */
function calculateSMA(input: SMAInput): SMAResult {
  const { prices, period } = input;

  validateInput(prices, period);

  if (prices.length < period) {
    return { values: [] };
  }

  const values: number[] = [];

  for (let i = period - 1; i < prices.length; i++) {
    let sum = 0;
    for (let j = i - period + 1; j <= i; j++) {
      sum += prices[j];
    }
    values.push(sum / period);
  }

  return { values };
}

// --- 효율적 구현: O(n) 슬라이딩 윈도우 ---

/**
 * SMA 재귀적 구현 (슬라이딩 윈도우).
 * 첫 SMA만 직접 계산하고, 이후는 이전 값을 활용한다.
 * 수식: SMA_t = SMA_{t-1} + (P_t - P_{t-n}) / n
 */
function calculateSMAEfficient(input: SMAInput): SMAResult {
  const { prices, period } = input;

  validateInput(prices, period);

  if (prices.length < period) {
    return { values: [] };
  }

  const values: number[] = [];

  let sum = 0;
  for (let i = 0; i < period; i++) {
    sum += prices[i];
  }
  values.push(sum / period);

  for (let i = period; i < prices.length; i++) {
    sum = sum + prices[i] - prices[i - period];
    values.push(sum / period);
  }

  return { values };
}

// --- 골든크로스 / 데드크로스 감지 ---

/**
 * 두 SMA의 교차(crossover)를 감지한다.
 * - 골든크로스: 단기 SMA가 장기 SMA를 아래에서 위로 돌파
 * - 데드크로스: 단기 SMA가 장기 SMA를 위에서 아래로 돌파
 */
function detectCrossovers(
  shortSMA: number[],
  longSMA: number[]
): CrossSignal[] {
  if (shortSMA.length !== longSMA.length) {
    throw new Error(
      `Array length mismatch: shortSMA(${shortSMA.length}) !== longSMA(${longSMA.length}).`
    );
  }

  if (shortSMA.length < 2) {
    return [];
  }

  const signals: CrossSignal[] = [];

  for (let i = 1; i < shortSMA.length; i++) {
    const prevDiff = shortSMA[i - 1] - longSMA[i - 1];
    const currDiff = shortSMA[i] - longSMA[i];

    if (prevDiff <= 0 && currDiff > 0) {
      signals.push({ index: i, type: 'golden' });
    } else if (prevDiff >= 0 && currDiff < 0) {
      signals.push({ index: i, type: 'dead' });
    }
  }

  return signals;
}

엣지 케이스

케이스입력출력설명
빈 배열{ prices: [], period: 5 }{ values: [] }에러 없이 빈 결과 반환
데이터 부족{ prices: [100, 101, 102], period: 5 }{ values: [] }prices.length < period이면 계산 불가
period = 1{ prices: [10, 20, 30], period: 1 }{ values: [10, 20, 30] }원래 가격과 동일 (평활화 없음)
period = 0{ prices: [10], period: 0 }Error"Period must be a positive integer"
NaN 포함{ prices: [10, NaN, 30], period: 2 }Error"Invalid price at index 1: NaN"
모든 가격 동일{ prices: [50, 50, 50, 50], period: 3 }{ values: [50, 50] }SMA = 가격 그 자체
정확히 period개{ prices: [10, 20, 30], period: 3 }{ values: [20] }단 하나의 SMA 값

라이브러리 참조

technicalindicators npm 패키지(anandanand84)의 SMA 구현과의 주요 차이점:

항목이 구현technicalindicators
API함수형 (calculateSMA(input))클래스 기반 (SMA.calculate(input))
스트리밍미지원 (배치 전용)nextValue() 메서드로 실시간 추가 가능
입력 검증NaN/Infinity/period 검증 포함별도 검증 없음 (잘못된 입력 시 NaN 전파)
알고리즘슬라이딩 윈도우 (O(n))동일한 슬라이딩 윈도우 방식

프로덕션 환경에서는 검증된 라이브러리 사용을 권장한다.


요약

항목내용
기원통계학 시계열 분석 (1833~), 금융 적용: Richard Donchian (1940s~)
유형추세 지표, 후행 지표, 저역통과 필터
계산nn기간 균등 가중 산술 평균
기본 기간20 (단기), 50 (중기), 200 (장기)
주요 신호추세 방향, 동적 지지/저항, 골든크로스/데드크로스, 삼중 정렬
검증Brock et al.(1992): 90년 DJIA 데이터에서 유의미한 초과 수익3
장점수학적 단순성, 해석 용이, 노이즈 제거, 자기실현적 효과
한계후행성(n12\frac{n-1}{2} 지연), 횡보장 whipsaw, 동일 가중치, 이상값 민감
적합한 시장명확한 추세가 있는 시장, 고변동성 자산9
오버레이예 (가격 차트 위에 표시)

Footnotes

  1. Murphy, J.J. (1999). Technical Analysis of the Financial Markets. New York Institute of Finance. ISBN: 978-0735200661. pp. 195-208. 2 3 4 5 6 7 8 9 10 11

  2. Klein, J.L. (1997). Statistical Visions in Time: A History of Time Series Analysis, 1662-1938. Cambridge University Press. ISBN: 978-0521420464. 2 3

  3. Brock, W., Lakonishok, J. & LeBaron, B. (1992). Simple Technical Trading Rules and the Stochastic Properties of Stock Returns. The Journal of Finance, 47(5), 1731-1764. DOI: 10.1111/j.1540-6261.1992.tb04681.x. 2 3 4 5 6 7 8 9

  4. Kaufman, P.J. (2013). Trading Systems and Methods (5th ed.). Wiley. ISBN: 978-1118043561. pp. 253-280. 2 3 4 5 6 7 8 9 10 11 12

  5. Appel, G. (2005). Technical Analysis: Power Tools for Active Investors. FT Press. ISBN: 978-0131479029. pp. 45-62. 2 3 4 5

  6. Fama, E.F. & Blume, M.E. (1966). Filter Rules and Stock-Market Trading. The Journal of Business, 39, 226-241. DOI: 10.1086/294849. 2 3

  7. Sullivan, R., Timmermann, A. & White, H. (1999). Data-Snooping, Technical Trading Rule Performance, and the Bootstrap. The Journal of Finance, 54(5), 1647-1691. DOI: 10.1111/0022-1082.00163. 2 3 4 5

  8. Lo, A.W., Mamaysky, H. & Wang, J. (2000). Foundations of Technical Analysis: Computational Algorithms, Statistical Inference, and Empirical Implementation. The Journal of Finance, 55(4), 1705-1765. DOI: 10.1111/0022-1082.00265. 2

  9. Han, Y., Yang, K. & Zhou, G. (2013). A New Anomaly: The Cross-Sectional Profitability of Technical Analysis. Journal of Financial and Quantitative Analysis, 48(5), 1433-1461. DOI: 10.1017/S0022109013000586. 2 3 4

참고 문헌 및 출처

[1]

Statistical Visions in Time: A History of Time Series Analysis, 1662-1938

Judy L. Klein

1997Cambridge University PressISBN: 978-0521420464

이동평균의 통계학적 기원을 1662년부터 추적한 역사서. 영란은행 1833년 사용, Hooker 1901 등 핵심 역사 포함.

[2]

Technical Analysis of the Financial Markets: A Comprehensive Guide to Trading Methods and Applications

John J. Murphy

1999New York Institute of Financepp. 195-208ISBN: 978-0735200661

기술적 분석의 바이블. 이동평균의 기본 개념과 활용법을 체계적으로 정리.

[3]

Trading Systems and Methods

Perry J. Kaufman

2013Wileypp. 253-280ISBN: 978-1118043561

이동평균의 수학적 특성과 시스템 설계 방법. KAMA 소개. 시장 사이클 주기와 이동평균 기간의 관계.

[4]

Technical Analysis: Power Tools for Active Investors

Gerald Appel

2005FT Presspp. 45-62ISBN: 978-0131479029

MACD 개발자가 저술. 이동평균의 실전 활용과 다양한 기간 조합 전략.

[5]

Filter Rules and Stock-Market Trading

Eugene F. Fama, Marshall E. Blume

1966The Journal of Businesspp. 226-241DOI: 10.1086/294849

필터 규칙 기반 트레이딩의 수익성을 검증한 초기 연구. 거래 비용 고려 시 초과 수익 부재를 보고하여 EMH를 지지.

[6]

Simple Technical Trading Rules and the Stochastic Properties of Stock Returns

William Brock, Josef Lakonishok, Blake LeBaron

1992The Journal of Financepp. 1731-1764DOI: 10.1111/j.1540-6261.1992.tb04681.x

1897-1986년 DJIA 90년 데이터로 이동평균 교차 전략의 통계적으로 유의미한 초과 수익을 입증. 기술적 분석 분야에서 가장 영향력 있는 논문.

[7]

Data-Snooping, Technical Trading Rule Performance, and the Bootstrap

Ryan Sullivan, Allan Timmermann, Halbert White

1999The Journal of Financepp. 1647-1691DOI: 10.1111/0022-1082.00163

White's Reality Check 부트스트랩으로 데이터 스누핑 편향을 통제한 기술적 트레이딩 규칙 평가. Brock et al.(1992) 결과의 강건성 재검증.

[8]

Foundations of Technical Analysis: Computational Algorithms, Statistical Inference, and Empirical Implementation

Andrew W. Lo, Harry Mamaysky, Jiang Wang

2000The Journal of Financepp. 1705-1765DOI: 10.1111/0022-1082.00265

비모수 커널 회귀를 이용한 기술적 분석의 체계적 접근. 1962-1996년 미국 주식 대상. 기술적 패턴의 통계적 유의미성 확인.

[9]

A New Anomaly: The Cross-Sectional Profitability of Technical Analysis

Yufeng Han, Ke Yang, Guofu Zhou

2013Journal of Financial and Quantitative Analysispp. 1433-1461DOI: 10.1017/S0022109013000586

이동평균 전략의 횡단면 수익성을 최초 입증. 변동성이 큰 포트폴리오에서 이동평균 전략이 모멘텀보다 효과적.

* 모든 내용은 위 학술 자료 및 공식 문서를 기반으로 작성되었습니다.

Simple Moving Average 실전 분석 보기

메타지표 합의도에서 이 지표가 전략 유효성에 어떻게 기여하는지 확인하세요.

관련 키워드

SMA단순이동평균이동평균Moving Average추세trend골든크로스데드크로스Donchian저역통과 필터