AI 배당성장주 분석 시스템 만들기
16편 / 다중 조건 확장 2편
15편에서는 외국인·기관 수급을 절대금액과 거래대금 대비 강도로 나누는 방법을 설계했습니다. 이번 편에서는 “차트가 좋다”는 모호한 표현을 줄이기 위해 이동평균·기간 수익률·변동성·최대 낙폭을 같은 계산식으로 기록하는 차트 추세 점수를 설계합니다.
작성 기준일: 2026년 8월 22일
현재 공개 프로그램에는 실제 차트 점수가 아직 포함되지 않았습니다. 이번 글은 수정주가 자료와 시간 순서 검증을 위한 구현 명세입니다.
차트 점수는 미래 가격을 맞히는 예언이 아닙니다
장기계좌 분석에서 차트를 넣는 목적은 단기 매매 신호를 만들기 위해서가 아닙니다. 재무가 좋은 기업이라도 최근 가격 변동이 지나치게 크거나 장기 추세가 무너졌다면 추가 검토가 필요하다는 사실을 표시하기 위해서입니다.
같은 이유로 골든크로스 하나만으로 높은 점수를 주지 않습니다. 가격 위치·수익률·변동성·낙폭을 함께 기록하고 서로 충돌하면 중립 또는 검토 필요 상태로 남깁니다.
차트 데이터는 여섯 단계로 처리합니다

- 수정주가 수집: 종목코드별 거래일·시가·고가·저가·종가·거래량과 수정계수를 가져옵니다.
- 거래일 정렬: 휴장일과 중복 행을 제거하고 날짜순으로 정렬합니다.
- 추세 계산: 20일·60일·120일 이동평균과 현재 가격의 위치를 계산합니다.
- 모멘텀 계산: 20일·60일·120일 수익률을 계산합니다.
- 위험 계산: 20일 변동성과 120일 최대 낙폭을 계산합니다.
- 상태 저장: 상승 추세·중립·약세·자료 부족으로 구분하고 기준일과 계산 가능 여부를 남깁니다.
첫 버전은 여섯 지표만 사용합니다
| 영역 | 지표 | 확인하는 질문 |
|---|---|---|
| 단기 위치 | 종가 ÷ 20일 이동평균 | 최근 평균 가격보다 위에 있는가? |
| 중기 위치 | 20일·60일·120일 이동평균 배열 | 짧은 평균이 긴 평균보다 높은가? |
| 단기 수익률 | 20거래일 가격 변화율 | 최근 한 달 흐름은 어떤가? |
| 중기 수익률 | 60거래일 가격 변화율 | 약 한 분기 동안 추세가 유지됐는가? |
| 변동성 | 20일 일간 수익률 표준편차 | 가격이 지나치게 흔들리는가? |
| 낙폭 | 최근 120일 최대 낙폭 | 고점 대비 얼마나 크게 하락했는가? |
이동평균 배열은 가격 위치를 요약합니다
ma20 = adjusted_close.rolling(20).mean()
ma60 = adjusted_close.rolling(60).mean()
ma120 = adjusted_close.rolling(120).mean()
trend_aligned = adjusted_close > ma20 > ma60 > ma120
정배열은 최근 가격이 과거 평균보다 높다는 뜻이지 앞으로 계속 오른다는 보장이 아닙니다. 급등 직후에도 정배열이 나타날 수 있으므로 변동성과 평균선 이격도를 함께 확인합니다.
최대 낙폭은 고점에서 겪은 손실 폭을 봅니다
running_peak = adjusted_close.cummax()
drawdown = adjusted_close / running_peak - 1
max_drawdown_120d = drawdown.tail(120).min()
최대 낙폭이 -25%라면 최근 관찰구간의 고점에서 저점까지 25% 하락한 적이 있다는 의미입니다. 현재가가 이미 회복됐는지 여부는 별도 지표로 확인해야 합니다.
수정주가를 쓰지 않으면 배당락과 액면분할이 왜곡됩니다
현금배당을 지급한 다음 날이나 액면분할·무상증자 같은 기업행사가 발생하면 단순 종가만으로 계산한 수익률이 실제 투자 성과와 다를 수 있습니다. 따라서 원천 가격과 수정계수, 기업행사 정보를 보존하고 어떤 가격 열로 계산했는지 기록합니다.
- 원천 종가와 수정종가를 서로 다른 열로 저장합니다.
- 배당락·분할·병합 기준일을 별도 이벤트 표에 남깁니다.
- 우선주와 보통주의 가격 시계열을 종목코드별로 분리합니다.
- 거래 정지 기간을 0% 수익률로 임의 채우지 않습니다.
차트 상태는 점수보다 해석 가능한 문장으로 남깁니다
| 상태 | 예시 조건 | 표시할 문장 |
|---|---|---|
| 상승 추세 | 가격이 주요 평균 위, 중기 수익률 양수 | 중기 가격 흐름이 상대적으로 강함 |
| 중립 | 추세와 수익률이 서로 충돌 | 방향이 뚜렷하지 않아 추가 관찰 |
| 약세 | 주요 평균 아래, 중기 수익률 음수 | 가격 약세가 이어지는지 점검 |
| 위험 변동 | 변동성·낙폭이 상위 위험 구간 | 가격 위험이 커 비중 결정에 주의 |
| 계산 보류 | 상장 기간·거래일·가격 자료 부족 | 120일 계산에 필요한 자료가 부족함 |
업종별로 다른 변동성을 같은 절대값으로 비교하지 않습니다
금융·통신처럼 상대적으로 변동성이 낮은 업종과 성장 산업을 동일한 절대 구간으로 평가하면 특정 업종이 구조적으로 유리해질 수 있습니다. 실제 구현에서는 전체시장 백분위와 업종 내 백분위를 함께 저장하고 어느 기준을 사용했는지 표시합니다.
시간 분리 검증을 다시 적용합니다
차트 지표는 미래 가격이 한 행만 섞여도 성과가 크게 부풀려질 수 있습니다. 2025년 말 기준으로 종목을 고른다면 그날까지의 가격만으로 이동평균과 변동성을 계산하고, 이후 구간은 성과 평가에만 사용합니다.
- 학습·선정 기간이 평가 기간보다 항상 앞서는지 검사합니다.
- 수정주가 파일이 나중에 갱신되었는지 버전을 기록합니다.
- 상장폐지·거래정지 종목도 과거 모집단에서 임의 삭제하지 않습니다.
- 거래비용과 매수 가능 가격을 백테스트에 반영합니다.
16편에서 확정한 설계
- 20일·60일·120일 이동평균과 기간 수익률을 계산합니다.
- 20일 변동성과 120일 최대 낙폭을 위험 지표로 사용합니다.
- 기업행사를 반영한 수정주가와 계산 기준일을 보존합니다.
- 자료가 부족한 종목은 낮은 점수가 아니라 계산 보류로 남깁니다.
- 차트 점수는 매매 신호가 아니라 재무 후보의 가격 상태를 설명합니다.
다음 편에서는 네 영역을 하나의 검토 순서로 묶습니다
17편에서는 재무·수급·뉴스·차트 점수를 단순히 모두 통과시키는 방식과 목적별 가중치 방식의 차이를 설명하고, 결측과 위험을 먼저 거르는 다중 조건 스크리닝 구조를 설계합니다.
이전 글
15편. 외국인·기관 수급 강도 계산하기 | 5일·20일 순매수 분석
공개 프로그램
KOSPI 장기계좌 분석 웹 프로그램
다음 글
17편. 뉴스·재무·수급·차트 종합점수 만들기 | 다중 조건 스크리닝
이 글은 데이터 분석 설계를 기록한 학습 콘텐츠이며 기술적 지표는 미래 가격이나 수익을 보장하지 않습니다. 특정 종목의 매수·매도를 권유하지 않으며 투자 판단과 책임은 투자자 본인에게 있습니다.
'AI 배당투자 프로젝트' 카테고리의 다른 글
| AI 주식 분석 리포트 자동화하기 | 갱신·품질검사·웹 배포 (1) | 2026.08.23 |
|---|---|
| 뉴스·재무·수급·차트 종합점수 만들기 | 다중 조건 스크리닝 (0) | 2026.08.23 |
| 외국인·기관 수급 강도 계산하기 | 5일·20일 순매수 분석 (0) | 2026.08.23 |
| 종목별 최신 뉴스 5건 분석하기 | 호재·악재·중립 신호 붙이기 (0) | 2026.08.23 |
| 실제 KOSPI 데이터로 장기계좌 분석 프로그램 만들기 | 웹 프로그램 공개 (0) | 2026.08.22 |