이 블로그에서 매주 올리는 ETF 주봉 MACD 점검 글은 ETF 24개의 주간 종가로 MACD를 직접 계산해서 만듭니다. 이번 글에서는 그 계산을 파이썬 코드 30줄 정도로 누구나 직접 해 볼 수 있게 공개합니다. 설정값은 주봉 MACD 6·13·5 글에서 설명한 값을 그대로 씁니다.
1. 준비: yfinance 설치
주간 종가는 야후 파이낸스 데이터를 받아 주는 yfinance 라이브러리로 가져옵니다. 국내 ETF는 종목코드 뒤에 .KS를 붙이면 됩니다(예: KODEX 200 → 069500.KS).
pip install yfinance pandas
2. MACD 계산 원리 (코드로 옮기기 전에)
| 값 | 계산 | pandas 코드 |
| 빠른 평균 | 주간 종가의 6주 지수이동평균 | close.ewm(span=6, adjust=False).mean() |
| 느린 평균 | 주간 종가의 13주 지수이동평균 | close.ewm(span=13, adjust=False).mean() |
| MACD | 빠른 평균 − 느린 평균 | ema6 - ema13 |
| 시그널 | MACD의 5주 지수이동평균 | macd.ewm(span=5, adjust=False).mean() |
adjust=False를 넣으면 “오늘 값 × 2/(n+1) + 어제 평균 × (1 − 2/(n+1))”이라는 우리가 아는 지수이동평균 공식과 같아집니다. 증권사 차트와 비교할 때 이 옵션이 빠지면 값이 조금씩 달라질 수 있습니다.
3. 전체 코드: 여러 ETF를 한 번에 점검
import yfinance as yf
import pandas as pd
ETFS = {
"069500.KS": "KODEX 200",
"091160.KS": "KODEX 반도체",
"266420.KS": "KODEX 헬스케어",
"360750.KS": "TIGER 미국S&P500",
}
def weekly_macd(code):
df = yf.Ticker(code).history(period="3y", interval="1wk")
close = df["Close"].dropna()
ema6 = close.ewm(span=6, adjust=False).mean()
ema13 = close.ewm(span=13, adjust=False).mean()
macd = ema6 - ema13
signal = macd.ewm(span=5, adjust=False).mean()
return close, macd, signal
rows = []
for code, name in ETFS.items():
close, macd, signal = weekly_macd(code)
now_up = macd.iloc[-1] > signal.iloc[-1]
prev_up = macd.iloc[-2] > signal.iloc[-2]
if now_up and not prev_up:
state = "골든크로스(이번 주)"
elif not now_up and prev_up:
state = "데드크로스(이번 주)"
else:
state = "시그널 위" if now_up else "시그널 아래"
rows.append([name, round(close.iloc[-1]), state,
"0선 위" if macd.iloc[-1] > 0 else "0선 아래"])
result = pd.DataFrame(rows, columns=["ETF", "종가", "MACD 상태", "0선"])
print(result.to_string(index=False))
4. 결과 읽는 법
- 골든크로스(이번 주): 이번 주에 MACD가 시그널선을 아래에서 위로 넘었습니다. 다음 주에도 위에 남아 있는지가 중요합니다.
- 0선 아래 골든크로스: 하락 추세 안에서의 반등 시도로 봅니다. 0선 위에서 나온 골든크로스보다 신호가 약합니다.
- 시그널 아래가 계속되는 종목은 MACD와 시그널선의 간격이 줄어드는 주가 오는지 지켜봅니다.
실제 결과를 매주 정리한 기록은 ETF 24개 주봉 MACD 점검 (10월 4주차)처럼 ETF주간점검 라벨에 모아 두고 있습니다.
5. 주의할 점
- 금요일 장 마감 뒤에 실행하세요. 주중에 돌리면 마지막 행이 아직 끝나지 않은 이번 주 값이라, 주말에 다시 돌렸을 때 결과가 바뀔 수 있습니다.
- 데이터가 비는 날이 있습니다. 야후 파이낸스 데이터는 가끔 일부 주가 빠지거나 늦게 반영됩니다. 중요한 판단 전에는 증권사 차트와 한 번 맞춰 보세요.
- MACD는 늦게 반응하는 지표입니다. 이미 지나간 가격의 평균으로 만들기 때문에, 바닥과 꼭지를 정확히 잡아 주지 않습니다.
한 줄 정리
yfinance로 주간 종가를 받고, pandas의 ewm 세 줄로 MACD와 시그널을 만들면 주봉 골든크로스 점검을 직접 할 수 있습니다. ETFS 목록에 관심 ETF 코드만 추가하면 나만의 스캐너가 됩니다.
※ 이 글은 프로그래밍과 투자 공부를 위한 정보 공유이며, 특정 종목의 매수·매도를 권유하지 않습니다.
댓글
댓글 쓰기