제 2의 네로 (AI)
머신러닝으로 주식투자하기 - 4편 로직 뼈대 세우기
Dr. 네로
2025. 8. 29. 18:20
반응형
이 글은 닥터 네로가 개조한 GPT와 함께 작성했습니다.🐾
주식 투자에서 정답은 없습니다. 그러나 방향은 있습니다. 이번 글에서는 닥터 네로가 세운 로직과 GPT가 세운 로직으로 각각의 장단점과 활용 방안을 비교해보겠습니다.
그리고 이를 바탕으로 머신러닝을 직접 진행해보도록 하겠습니다.
🎯 닥터 네로의 로직: 관심 + 가치 + 트렌드
닥터 네로가 제안한 로직은 이렇게 요약됩니다:
- 거래량 및 주가 변동 추이를 통한 관심도 확인
- API + ML을 활용해 단기적으로 사람들이 몰리는 테마주 확인
- 단기 매수세와 시장의 과열 신호를 빠르게 포착 가능
- 재무제표를 통한 저평가 회사 발굴
- OpenDART, SEC API 등을 통해 분기별/연간 재무제표 분석
- 성장 가능성이 있음에도 시장에서 저평가된 기업을 탐색
- 신기술 및 미래 수요를 통한 상승주 찾기
- 웹 크롤링 + ML을 활용해 산업 트렌드 및 미래 수요 분석
- AI, 2차전지, 반도체, 바이오 등 차세대 성장산업에 집중
✅ 강점: 중장기적 안정성, 성장주 발굴 능력
❌ 약점: 단기 급등락에 민감하지 못함
🤖 GPT의 로직: 패턴 + 이벤트 + 리스크 관리
GPT가 제안하는 로직은 데이터 중심적이고 수학적 접근입니다:
- 가격 행동 패턴 분석 (Technical ML)
- RSI, MACD, 볼린저 밴드, 이동평균선 등을 활용
- LSTM, Transformer 기반 시계열 예측 모델 적용
- 뉴스/이벤트 기반 감성 분석 (NLP + ML)
- ChatGPT API를 활용해 뉴스와 공시를 요약 및 긍정/부정 분류
- 이벤트 발생 시 단기 급등락 포착
- 리스크 관리 모델 (Portfolio Optimization)
- 마코위츠 포트폴리오 이론 적용
- 분산-공분산 행렬을 활용해 위험 최소화 포트폴리오 설계
✅ 강점: 단기 매매 성과 극대화, 리스크 관리 최적화
❌ 약점: 데이터 노이즈에 과적합 위험, 안정성 부족
⚔️ 두 로직의 비교
항목 | 닥터 네로가 세운 로직 | GPT가 세운 로직 |
접근 | 가치 + 성장 중심 | 패턴 + 리스크 관리 중심 |
장점 | 안정적, 장기 성장 포착 | 단기 수익률 극대화 |
단점 | 단기 변동성에 약함 | 노이즈에 과적합 위험 |
추천 투자자 | 가치투자자, 장기투자자 | 트레이더, 퀀트 투자자 |
🧪 Colab으로 두 로직 백테스트하기
실제로 어떤 로직이 더 유효할까요? Colab에서 데이터를 불러와 간단히 백테스트할 수 있습니다.
🔹 데이터 수집 (yfinance 활용)
import yfinance as yf
df = yf.download('005930.KS', start='2020-01-01', end='2023-12-31')
🔹 닥터 네로의 로직 (장기 이동평균 + 거래량 확인)
import pandas as pd
# 이동평균 계산
df['MA20'] = df['Close'].rolling(20).mean()
df['MA60'] = df['Close'].rolling(60).mean()
# 매수 신호: 단기 MA > 장기 MA & 거래량 증가
buy_signal = (df['MA20'] > df['MA60']) & (df['Volume'] > df['Volume'].rolling(20).mean())
🔹 GPT의 로직 (볼린저 밴드 돌파 전략)
# 볼린저 밴드 계산
n = 20
k = 2
df['MA'] = df['Close'].rolling(n).mean()
df['STD'] = df['Close'].rolling(n).std()
df['Upper'] = df['MA'] + (k * df['STD'])
df['Lower'] = df['MA'] - (k * df['STD'])
# 매수 신호: 종가가 하단 밴드 돌파 후 반등
buy_signal_gpt = (df['Close'] < df['Lower']).shift(1) & (df['Close'] > df['Lower'])
📰 주식 자료는 어디서 가져오면 빠르고 믿을만한가?
1) 공시(Disclosure) — “가장 빠르고 가장 신뢰”
- 국내: OpenDART API(금융감독원) — 공식 API, 공시 뜨자마자 제공. 실무 신뢰도 최상. (EngOpenDart)
- 미국: SEC EDGAR RSS/API — 10-Q/10-K 등 분기·연간보고서 실시간에 가깝게 확인.
장점: 속도·권위·정확성 최고 / 단점: 기사(해설)보다 “원문”이라 해석 필요
GPT에게 맡기자!
2) 포털/집계형 뉴스 — “빠르고 폭넓음”
- 네이버 뉴스 검색 API(공식) — 키워드 기반 뉴스 검색을 JSON/XML로 제공, 하루 호출 한도 명시. Colab에서 사용 쉬움. (NAVER Developers)
- Google News RSS(비공식 문서/파라미터 가이드) — 키워드·언어·국가 필터로 신속한 집계. RSS라서 가볍고 빠름. (NewsCatcher, Feedly 문서, Stack Overflow)
- NewsAPI.org(상업 API) — 전세계 다수 매체를 단일 REST로 제공(무료/유료). 샘플·문서 훌륭. (뉴스 API)
장점: 세팅 빨라서 실전 투입 쉬움 / 단점: 일부 소스 저작권·요약 제한, 무료 플랜은 레이트 리밋
3) 프리미엄 통신사 — “신뢰 최고, 속도 최상(유료)”
- Reuters API — 신속·신뢰 언론 대표, 상업용 API 제공(유료 계약). (reutersagency.com, developerportal.thomsonreuters.com)
장점: 커버리지·신뢰도 최상 / 단점: 비용
4) 국내 경제지 RSS(보조 채널)
- 한국경제·매일경제·Pulse/KED Global 등은 RSS/영문판 채널을 운영(매체별 상이). 집계 보조로 사용. (KED Global, 매일경제, 10원 Tips)
🧭 추천 조합 (현실적인 베스트 프랙티스)
- 속보/사실 확인(정답지): OpenDART + SEC RSS
- 시장 반응 모니터링(기사/논조): 네이버 뉴스 API or Google News RSS
- 고급 소스(예산 있을 때): Reuters API
- ML 입력값:
- 공시: 종류(합병, 실적, CB 등), 금액, 가이던스 여부
- 뉴스: 감성 점수(긍/부정/중립), 키워드(“contract”, “earnings beat” 등), 매체 신뢰도 가중치
⚖️ 신속성/신뢰성/난이도 비교
채널 | 신속성 | 신뢰성 | 설정 난이도 | 비용 |
OpenDART / SEC | ★★★★☆ | ★★★★★ | ★★☆☆☆ | 무료 |
Naver News API | ★★★★☆ | ★★★★☆ | ★★☆☆☆ | 무료(쿼터) |
Google News RSS | ★★★★☆ | ★★★☆☆ | ★☆☆☆☆ | 무료 |
NewsAPI.org | ★★★★☆ | ★★★★☆ | ★☆☆☆☆ | 무료/유료 |
Reuters API | ★★★★★ | ★★★★★ | ★★★☆☆ | 유료 |
🧪 Colab 빠른 스타터 (Disclosure + News 동시 수집)
1) 공시: OpenDART (국내)
!pip install OpenDartReader feedparser
import OpenDartReader, pandas as pd
DART_API_KEY = "YOUR_API_KEY"
dart = OpenDartReader.OpenDartReader(DART_API_KEY)
# 삼성전자 2024~2025 공시 헤더
items = dart.list('005930', start='20240101', end='20251231')
disclosures = pd.DataFrame(items)
disclosures[['rpt_nm','rcp_no','rpt_dt']].head()
2) 공시: SEC EDGAR RSS (미국)
import feedparser
rss = feedparser.parse("https://www.sec.gov/cgi-bin/browse-edgar?action=getcurrent&type=10-Q&output=atom")
[(e.title, e.link) for e in rss.entries[:5]]
3) 뉴스: 네이버 뉴스 검색 API
import requests, pandas as pd
NAVER_CLIENT_ID = "YOUR_ID"
NAVER_SECRET = "YOUR_SECRET"
q = "반도체 실적" # 키워드
url = "https://openapi.naver.com/v1/search/news.json"
headers = {"X-Naver-Client-Id": NAVER_CLIENT_ID, "X-Naver-Client-Secret": NAVER_SECRET}
params = {"query": q, "display": 20, "sort": "date"} # 최신순
res = requests.get(url, headers=headers, params=params).json()
news = pd.DataFrame(res["items"])[["title","link","pubDate","description"]]
news.head()
4) 뉴스: Google News RSS (가볍게)
import feedparser, pandas as pd, urllib.parse as up
q = up.quote("삼성전자 실적 OR 공급계약")
rss = feedparser.parse(f"https://news.google.com/rss/search?q={q}&hl=ko&gl=KR&ceid=KR:ko")
gn = pd.DataFrame([{"title":e.title, "link":e.link, "published":e.published} for e in rss.entries])
gn.head()
5) 간단한 전처리 & 중복 제거
def normalize_title(t):
return t.replace("[단독]","").replace("[속보]","").strip().lower()
news["norm"] = news["title"].map(normalize_title)
gn["norm"] = gn["title"].map(normalize_title)
all_news = pd.concat([news[["norm","title","link","pubDate"]],
gn[["norm","title","link","published"]]], ignore_index=True)
all_news = all_news.drop_duplicates(subset=["norm"])
all_news.head()
이후 단계: ChatGPT/감성분석으로 감성 점수·키워드 벡터를 만들고, 주가 라벨(급등일)과 시간 매칭하여 ML 피처화.
- “최대한 빠르고 정확하게”: 공시는 OpenDART·SEC(공식)로, 뉴스는 네이버 API/Google News RSS로 보완.
- Colab 호환성: 위 4종은 모두 Colab에서 바로 사용 가능(키 발급만 있으면 끝).
- 확장: 예산 생기면 Reuters API를 붙여 품질 업그레이드.
✅ 결론
- 닥터 네로의 로직: 중장기 가치 + 성장을 중시 → 비교적 안정적인 수익 추구
- GPT의 로직: 단기 패턴 + 이벤트 + 리스크 관리를 중시 → 높은 변동성을 활용한 수익 추구
이처럼 가장 현명하다 생각되는 로직 또는 자신만의 로직을 GPT에게 부탁하면
이 두 로직은 경쟁 관계가 아니라, 서로 보완 관계입니다.
장기적으론 네로 로직으로 포트폴리오의 뼈대를 잡고, 단기적으론 GPT 로직으로 알파(초과수익)를 노리는 것이 이상적입니다.
반응형