[퀀트] 배당을 반영한 조정 종가(Adj Price) 계산하기

 

배당을 반영한 조정 종가(Adj Price) 계산하기 – Python 예제

주식 투자나 포트폴리오 분석을 할 때, **배당을 반영한 조정 종가(Adjusted Close, Adj Price)**를 사용하는 것은 매우 중요합니다.
그 이유는 단순 종가(Close)만으로 수익률을 계산하면, 배당 지급으로 인한 가격 변동을 무시하게 되어 **총수익률(total return)**이 정확히 반영되지 않기 때문입니다.

이번 글에서는 CSV 파일에서 종가와 배당 데이터를 읽어와 Python으로 조정 종가를 계산하는 방법을 예제와 함께 소개합니다.


1️⃣ 왜 조정 종가(Adj Price)가 필요한가?

배당이 나오는 날, 주가는 배당만큼 하락하는 것이 일반적입니다. 예를 들어:

날짜종가(Close)배당(Dividend)
1월 1일1000
1월 2일9010
  • 단순 종가만 보면 100 → 90으로 10% 손실처럼 보이지만

  • 실제로는 배당 10을 받았기 때문에 총 자산 가치는 여전히 100입니다.

이처럼, 배당을 고려하지 않으면 로그 수익률 계산, 변동성 계산, 포트폴리오 최적화에서 왜곡이 생깁니다.
그래서 과거 가격을 배당 지급 기준으로 조정한 Adj Price가 필요합니다.


2️⃣ 조정 종가 계산 원리

배당일 tt에 배당금 DtD_t이 지급될 때:

factort=PtDtPt\text{factor}_t = \frac{P_t - D_t}{P_t}
  • PtP_t : 배당일 종가

  • DtD_t : 배당금

규칙

  • 배당일 이전의 모든 가격에 factor를 곱함

  • 배당일 이후 가격은 그대로 둠

  • 여러 배당이 나올 경우 factor를 누적 곱

이렇게 하면, 배당이 포함된 총수익률 기준 연속 가격 시계열을 만들 수 있습니다.


3️⃣ CSV 예제 구조

Date,Close,Dividend 2025-01-01,100,0 2025-01-02,105,0 2025-01-03,100,10 2025-01-04,102,5 2025-01-05,107,0
  • Close : 실제 종가

  • Dividend : 배당금

  • Date : 날짜


4️⃣ Python 코드 예제

import pandas as pd # CSV 읽기 df = pd.read_csv("price_dividend.csv", parse_dates=["Date"]) df.set_index("Date", inplace=True) # 종가와 배당 close = df["Close"] dividend = df["Dividend"] # Adj Price 계산 adj_price = close.copy() cum_factor = 1.0 # 배당일 기준으로 과거 가격 역순 스케일링 for date in reversed(df.index): adj_price.loc[date] = close.loc[date] * cum_factor if dividend.loc[date] > 0: factor = (close.loc[date] - dividend.loc[date]) / close.loc[date] cum_factor *= factor # 데이터프레임에 추가 df["AdjClose"] = adj_price print(df)

5️⃣ 출력 예시

DateCloseDividendAdjClose
2025-01-01100085.6
2025-01-02105089.9
2025-01-031001085.6
2025-01-04102597.0
2025-01-051070107.0
  • 배당 발생 시 과거 가격이 스케일링되어 총수익률 기준 연속 시계열 생성

  • 배당 이후 가격은 실제 종가 그대로 유지


6️⃣ 로그 수익률 계산

Adj Price를 기반으로 로그 수익률을 계산하면 배당을 포함한 총수익률이 정확하게 반영됩니다.

import numpy as np df["log_return"] = np.log(df["AdjClose"] / df["AdjClose"].shift(1))
  • shift(1) : 하루 전 Adj Price

  • 배당 지급, 주식 분할 등 고려된 정확한 연속 수익률 계산 가능


7️⃣ 마무리

  • 야후 파이낸스에서 Adj Close가 제공되지 않거나, 불완전할 때는 직접 조정 종가를 계산하는 것이 안전합니다.

  • 위 방법을 사용하면 배당 재투자 기준 총수익률을 손쉽게 계산할 수 있고, 포트폴리오 분석이나 MPT, 백테스트에도 활용할 수 있습니다.

댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

NPN, PNP 트랜지스터 차이점

공압 속도 제어: 미터인 vs 미터아웃

[PLC] PLC 센서 결선방법: NPN, PNP, SOURCING, SINK

[PLC] 센서 NPN, PNP 출력 타입별 결선방법 (OMRON E2E-X 시리즈 3선식 배선)

사각형의 넓이 공식의 증명

[전기 기초] 전력공식 P=VI 유도

커패시터에 저장된 에너지 계산