한국 주식 단기 모멘텀 돌파 예측 엔진
KR STOCK MOMENTUM BREAKOUT ENGINE
Python + XGBoost 기반 단기 돌파 종목 자동 선별 시스템
📋 목차
- 개발 배경과 동기
- 전일 급등 전략의 논리
- XGBoost 모델 원리
- 엔진 작동 방식
- 핵심 코드
- 실제 결과
1. 개발 배경과 동기
주식 투자를 하다 보면 누구나 한 번쯤 이런 경험을 한다. 어제 급등한 종목을 뒤늦게 발견하고 "왜 나는 몰랐을까"라는 아쉬움이다. 코스피·코스닥에는 2,700개가 넘는 종목이 있고, 그 중에서 내일 오를 종목을 매일 수작업으로 찾는 것은 사실상 불가능하다.
이 엔진을 만든 이유는 단순하다. 사람이 할 수 없는 전수 탐색을 기계가 대신하게 하자.
처음에는 단순한 조건 필터링(거래량 급증 + 양봉)으로 시작했다. 그런데 필터를 통과하는 종목이 너무 많았고, 막상 다음 날 성과는 들쭉날쭉했다. 단순 규칙만으로는 한계가 있었다. 그래서 머신러닝을 도입하기로 했다.
수십 가지 지표를 조합해 복잡한 모델을 만들어 보기도 했다. 하지만 피처가 많아질수록 오히려 예측이 불안정해졌다. 결국 단순하고 해석 가능한 피처 + 강력한 모델의 조합이 가장 효과적이라는 결론에 도달했고, 지금의 구조가 탄생했다.
2. 전일 급등 전략의 논리
이 엔진의 핵심 전략은 "전일 급등 후 당일 추가 상승"을 노리는 모멘텀 추종 전략이다.
왜 전일 급등 종목인가?
주식 시장에는 모멘텀 효과(Momentum Effect)라는 현상이 있다. 한 번 강하게 오른 종목은 며칠간 계속 오르는 경향이 있다는 것이다. 이는 여러 이유로 설명된다.
📰 뉴스/재료 확산
급등의 원인이 된 뉴스나 재료가 다음 날에도 계속 퍼지며 추가 매수를 유발한다.
👥 투자자 심리
급등 종목은 관심을 받고, 관심은 추가 매수로 이어진다. FOMO(놓칠까봐 두려운 심리)가 작동한다.
📊 기술적 돌파
20일 고점을 넘으면 저항선 돌파로 해석되어 추가 매수 신호로 작동한다.
🏦 기관/외국인 유입
강한 거래량을 동반한 급등은 큰 손의 진입 신호일 수 있으며, 다음 날에도 매수가 이어질 수 있다.
전일 급등의 정의
단순히 전일에 올랐다고 해서 다 잡지 않는다. 다음 두 조건을 동시에 만족해야 한다.
거래량 없이 오른 종목은 언제든 빠질 수 있다. 거래량은 시장 참여자들의 확신을 나타내는 지표다. 거래량이 크게 터지며 올랐다면, 그 방향에 강한 힘이 실렸다는 의미다.
3. XGBoost 모델 원리
이 엔진의 두뇌는 XGBoost(eXtreme Gradient Boosting)다. 이름이 어렵게 들리지만 원리는 직관적이다.
결정 트리부터 시작
XGBoost의 기본 단위는 결정 트리(Decision Tree)다. 결정 트리는 "거래량 비율이 1.5 이상인가? → Yes면 오른쪽, No면 왼쪽"처럼 조건을 계속 분기해 최종 판단을 내리는 구조다.
그런데 결정 트리 하나만으로는 정확도가 낮다. 그래서 XGBoost는 수백 개의 트리를 순서대로 만들면서 이전 트리가 틀린 부분을 다음 트리가 보완하는 방식(Gradient Boosting)을 사용한다.
XGBoost 학습 과정
첫 번째 예측
오차 보완
추가 보완
최종 예측
이 엔진은 최대 700개의 트리를 사용하며, 검증 데이터 기준으로 성능이 개선되지 않으면 조기 종료(Early Stopping)한다.
왜 XGBoost인가?
| 장점 | 주식 데이터에서의 의미 |
|---|---|
| 비선형 패턴 학습 | 거래량 3배 + 고점 근접처럼 피처 간 복잡한 상호작용을 포착 |
| 피처 중요도 제공 | 어떤 지표가 예측에 가장 영향을 미치는지 수치로 확인 가능 |
| 불균형 데이터 처리 | 돌파 성공 종목이 전체의 20~30%뿐이어도 자동 가중치 보정 |
| 빠른 학습 속도 | 100만 행 이상의 데이터도 수 분 내 학습 완료 |
4. 엔진 작동 방식
전체 흐름
핵심 피처 상세 설명
| 피처명 | 의미 | 높을수록 |
|---|---|---|
| close_to_20d_high_ratio | 현재 종가 ÷ 최근 20일 최고가. 1에 가까울수록 고점 근처에 있다는 뜻 | 돌파 임박 |
| volume_ratio | 당일 거래량 ÷ 20일 평균 거래량. 시장의 관심도 측정 | 강한 매수 압력 |
| momentum_5d | 5일 전 대비 현재 가격 비율. 단기 추세 강도 | 상승 추세 강함 |
| body_ratio | 캔들 몸통 길이 ÷ 전체 범위. 양봉의 강도 측정 | 매수 세력 강함 |
| gap_ratio | 당일 시가 - 전일 종가의 비율. 갭 상승 여부 | 강한 상승 기대감 |
| prev_return | 전일 수익률. 전일 얼마나 올랐는지 | 강한 전일 모멘텀 |
| prev_volume_ratio | 전일 거래량 ÷ 20일 평균 거래량 | 전일 거래 활발 |
| prev_day_surge | 전일 +3% 이상 AND 거래량 2배 이상이면 1, 아니면 0 | 급등 신호 있음 |
5. 핵심 코드
① 종목 리스트 자동 로드
CSV 파일 없이 FinanceDataReader로 코스피·코스닥 전 종목을 실시간으로 불러옵니다. 상장 폐지·신규 상장이 자동 반영됩니다.
import FinanceDataReader as fdr
kospi = fdr.StockListing('KOSPI')[['Code','Name']]
kosdaq = fdr.StockListing('KOSDAQ')[['Code','Name']]
stock_list = pd.concat([kospi, kosdaq], ignore_index=True)
# 코스피 + 코스닥 약 2,700개 종목 자동 로드
② 캐시 기반 가격 데이터 수집
첫 실행 시 전체 데이터를 수집하고, 이후에는 마지막 캐시 날짜 이후 데이터만 추가로 받습니다. 2,700개 종목 기준 첫 실행 20~40분 → 이후 1~5분으로 단축됩니다.
if os.path.exists(cache_path):
cached = pd.read_csv(cache_path, parse_dates=['Date'])
last_date = cached['Date'].max()
# 오늘 날짜 이전이면 새 데이터만 추가
if last_date.normalize() < today:
new_df = fdr.DataReader(code, new_start, end)
cached = pd.concat([cached, new_df])
cached.to_csv(cache_path, index=False) # 캐시 업데이트
return cached
③ 전일 급등 필터
모멘텀 전략의 핵심입니다. 전일 +3% 이상 상승 AND 거래량 평균의 2배 이상인 종목만 통과시킵니다.
PREV_SURGE_RETURN = 0.03 # 전일 +3% 이상
PREV_SURGE_VOLUME = 2.0 # 전일 거래량 평균의 2배 이상
prev_day_surge = float(
prev_return >= PREV_SURGE_RETURN and
prev_volume_ratio >= PREV_SURGE_VOLUME
)
④ 최종 필터링
모델 확률 + 5가지 실전 조건을 동시에 만족하는 종목만 추려 상위 5개를 출력합니다.
top_preds = latest_features[
(pred_prob >= 0.5 ) & # 모델 확률 50% 이상
(close_to_20d_high_ratio >= 0.95) & # 20일 고점의 95% 이상
(volume_ratio >= 1.5 ) & # 거래량 평균 1.5배 이상
(liquidity_ok == 1 ) & # 거래대금 10억 이상
(is_positive == 1 ) & # 양봉 마감
(prev_day_surge == 1 ) # 전일 급등 조건 충족
].sort_values('pred_prob', ascending=False).head(5)
6. 실제 결과
다음은 실제 실행으로 얻은 결과 예시입니다. 모델이 가장 높은 확률로 선별한 종목들입니다.
| 종목 | 확률 | 거래량 비율 | 신호 해석 |
|---|---|---|---|
| 우리로 | 94.5% | 4.8배 | 20일 고점 돌파 + 거래량 급증, 강한 상승 모멘텀 |
| 한신공영 | 90.9% | 5.0배 | 동일 패턴, 거래량 5배 이상 급증 |
| SK오션플랜트 | 86.9% | 11.0배 | 거래량 폭발적, 세력 진입 가능성 |
| 하이텍팜 | 85.2% | 6.0배 | 강한 신호, 고점 근접 + 거래량 확인 |
| DL | 85.1% | 4.1배 | 고점 근접, 추가 상승 여력 존재 |
KR STOCK MOMENTUM BREAKOUT ENGINE
본 내용은 투자 참고용입니다. 실제 투자 결정은 본인의 판단과 책임하에 이루어져야 합니다.
'모멘텀 돌파 엔진' 카테고리의 다른 글
| 3월26일 돌파 예상 종목 (0) | 2026.03.25 |
|---|---|
| 3월25일 돌파 예상 종목 (0) | 2026.03.24 |
| 3월23일 투자 결과 (0) | 2026.03.23 |
| AI가 전날 밤 알려준 종목을 다음 날 샀더니 생긴 일 (0) | 2026.03.21 |
| 3월23일 돌파 예상 종목 (0) | 2026.03.21 |