콘텐츠로 이동

이동평균 (Moving Averages)

이동평균은 가격 데이터를 평활화하여 추세를 파악하는 가장 기본적인 기술 지표입니다.

ta.sma()

단순이동평균 (Simple Moving Average)

지정한 기간 동안의 가격을 산술 평균한 값입니다.

ta.sma(source, period) → TSeries

파라미터:

이름 타입 설명
source TSeries 입력 시계열 (예: c.close)
period int 평균 기간

반환값: TSeries

계산식: SMA = (V₁ + V₂ + ... + Vₙ) / n

예제:

c = chart("1D")

sma5 = ta.sma(c.close, 5)     # 5일 SMA
sma20 = ta.sma(c.close, 20)   # 20일 SMA
sma60 = ta.sma(c.close, 60)   # 60일 SMA

# 현재 SMA 값 확인
log("SMA 5:", sma5[0], "SMA 20:", sma20[0])

# 차트에 표시
c.line("SMA 5", sma5, color="red")
c.line("SMA 20", sma20, color="blue")
c.line("SMA 60", sma60, color="green")

# 크로스오버 감지
if sma5.cross_up(sma20):
    buy(tag="5일선이 20일선 상향 돌파")

SMA 활용

  • 단기 SMA (5~10일): 빠른 추세 변화 포착
  • 중기 SMA (20~50일): 중기 추세 확인
  • 장기 SMA (60~200일): 장기 추세 방향 판단

ta.ema()

지수이동평균 (Exponential Moving Average)

최근 가격에 더 많은 가중치를 부여하는 이동평균입니다. SMA보다 가격 변화에 빠르게 반응합니다.

ta.ema(source, period) → TSeries

파라미터:

이름 타입 설명
source TSeries 입력 시계열
period int 평균 기간

반환값: TSeries

계산식: EMA = Price × k + EMA_prev × (1 - k), 여기서 k = 2 / (period + 1)

예제:

c = chart("1D")

ema12 = ta.ema(c.close, 12)
ema26 = ta.ema(c.close, 26)

c.line("EMA 12", ema12, color="orange")
c.line("EMA 26", ema26, color="purple")

# EMA 크로스
if ema12.cross_up(ema26):
    buy(tag="EMA 골든크로스")
elif ema12.cross_down(ema26):
    sell(tag="EMA 데드크로스")

SMA vs EMA

비교 SMA EMA
반응 속도 느림 빠름
노이즈 민감도 낮음 높음
적합한 상황 장기 추세 단기/중기 트레이딩
지연(Lag) 작음

ta.wma()

가중이동평균 (Weighted Moving Average)

최근 값에 선형적으로 높은 가중치를 부여합니다.

ta.wma(source, period) → TSeries

파라미터:

이름 타입 설명
source TSeries 입력 시계열
period int 평균 기간

반환값: TSeries

계산식: WMA = (V₁×n + V₂×(n-1) + ... + Vₙ×1) / (n×(n+1)/2)

예제:

c = chart("1D")

wma10 = ta.wma(c.close, 10)
c.line("WMA 10", wma10, color="cyan")

ta.rma()

윌더이동평균 (Wilder's Smoothed Moving Average)

RSI 계산의 내부에서 사용되는 이동평균입니다. EMA와 유사하지만 평활 계수가 다릅니다.

ta.rma(source, period) → TSeries

파라미터:

이름 타입 설명
source TSeries 입력 시계열
period int 평균 기간

반환값: TSeries

계산식: RMA = Price × (1/n) + RMA_prev × (1 - 1/n)

예제:

c = chart("1D")

rma14 = ta.rma(c.close, 14)
c.line("RMA 14", rma14, color="magenta")

RMA vs EMA

RMA의 평활 계수 1/n은 EMA의 2/(n+1)보다 작으므로 더 느리게 반응합니다. RMA(14)는 대략 EMA(27)과 비슷한 반응 속도를 가집니다.


이동평균 비교 전략

version("1.0")
description("4종 이동평균 비교 전략")
param("period", "period", 20)

c = chart("1D")
p = script_params["period"]

sma = ta.sma(c.close, p)
ema = ta.ema(c.close, p)
wma = ta.wma(c.close, p)
rma = ta.rma(c.close, p)

c.line("SMA", sma, color="red")
c.line("EMA", ema, color="blue")
c.line("WMA", wma, color="green")
c.line("RMA", rma, color="purple")

# EMA가 SMA 위로 올라가면 단기 모멘텀 강함
if ema > sma and c.close > ema:
    buy(tag="단기 모멘텀 강세")
elif ema < sma and c.close < ema:
    sell(tag="단기 모멘텀 약세")
else:
    hold()

관련 문서