전자공시(DART)란? 초보자가 먼저 볼 공시 5가지와 보는 법

이미지
전자공시(DART)란 상장회사가 법에 따라 내야 하는 보고서와 중요한 소식을 누구나 무료로 볼 수 있게 모아 둔 금융감독원의 온라인 공시 시스템입니다. 뉴스 기사나 커뮤니티 글은 결국 이 공시를 누군가 한 번 옮겨 적은 것이라, 원문을 직접 볼 줄 알면 정보가 왜곡될 틈이 줄어듭니다. 처음 들어가면 메뉴도 많고 보고서 이름도 낯설어서 막막한데, 초보자는 다섯 가지만 먼저 익히면 충분합니다. 1. 공시는 왜 봐야 할까? 주가는 회사에 대한 정보가 나올 때마다 움직입니다. 그런데 그 정보의 '공식 원본'은 대부분 공시입니다. 기사 제목이 "대규모 계약 체결"이라고 해도, 공시를 열어 보면 계약 금액이 매출액의 몇 퍼센트인지, 계약 기간이 몇 년인지까지 나와 있습니다. 같은 소식이라도 숫자를 직접 보면 판단이 달라지는 경우가 많습니다. 비유하자면 공시는 회사가 직접 쓴 '공식 알림장'이고, 기사는 그 알림장을 읽고 쓴 '후기'입니다. 후기도 도움이 되지만, 중요한 결정을 할 때는 알림장을 직접 읽는 편이 안전합니다. 2. DART 공시 유형 한눈에 보기 DART(dart.fss.or.kr)의 공시 통합검색 화면에서는 공시를 정기공시, 주요사항보고, 발행공시, 지분공시, 기타공시, 외부감사관련, 펀드공시, 자산유동화, 거래소공시, 공정위공시로 나눠 고를 수 있습니다. 초보자가 자주 보게 되는 것만 추리면 아래와 같습니다. 공시 유형 대표 보고서 이럴 때 확인 정기공시 사업보고서, 반기보고서, 분기보고서 회사가 무슨 일로 돈을 버는지, 실적이 어떤지 주요사항보고 주요사항보고서 (유상증자, 자기주식 취득 결정 등) 주식 수나 회사 구조가 바뀌는 큰 결정 발행공시 증권신고서 새 주식이나 채권을 발행할 때 조건 지분공시 주식등의대량보유상황보고서, 임원·주요주주 소유상황보고서 누가 지분을 사고팔았는지 거래소공시 수시공시, 공정공시 계약 체결, 실적 잠정치 등 그때그때 나오는 소식 3. 초보자가 먼저 볼 ...

파이썬 yfinance로 ETF 주봉 MACD 직접 계산하기 (6·13·5 골든크로스 찾는 코드)

ETF 주봉 MACD 파이썬으로 계산하기 - yfinance + pandas · 6·13·5 골든크로스


이 블로그에서 매주 올리는 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 코드만 추가하면 나만의 스캐너가 됩니다.


※ 이 글은 프로그래밍과 투자 공부를 위한 정보 공유이며, 특정 종목의 매수·매도를 권유하지 않습니다. 

댓글

이 블로그의 인기 게시물

파이썬 주식 자동매매 1편: 키움증권 OpenAPI+ 신청과 개발 환경 세팅

파이썬 주식 자동매매 4편: SendOrder로 매수·매도 주문 넣기

파이썬 주식 자동매매 3편: TR 요청(opt10001)으로 현재가 조회하기