이동평균 (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)
예제:
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)
예제:
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()
관련 문서¶
- 오실레이터 — RSI, MACD 등 (이동평균 기반)
- ta.* 전체 레퍼런스 — 모든 지표 시그니처
- 기본 전략 예제 — 이동평균 활용 전략