제 2의 네로 (AI)

머신러닝으로 주식투자하기 - 4편 로직 뼈대 세우기

Dr. 네로 2025. 8. 29. 18:20
반응형

이 글은 닥터 네로가 개조한 GPT와 함께 작성했습니다.🐾


주식 투자에서 정답은 없습니다. 그러나 방향은 있습니다. 이번 글에서는 닥터 네로가 세운 로직GPT가 세운 로직으로 각각의 장단점과 활용 방안을 비교해보겠습니다.

그리고 이를 바탕으로 머신러닝을 직접 진행해보도록 하겠습니다.


🎯 닥터 네로의 로직: 관심 + 가치 + 트렌드

닥터 네로가 제안한 로직은 이렇게 요약됩니다:

  1. 거래량 및 주가 변동 추이를 통한 관심도 확인
    • API + ML을 활용해 단기적으로 사람들이 몰리는 테마주 확인
    • 단기 매수세와 시장의 과열 신호를 빠르게 포착 가능
  2. 재무제표를 통한 저평가 회사 발굴
    • OpenDART, SEC API 등을 통해 분기별/연간 재무제표 분석
    • 성장 가능성이 있음에도 시장에서 저평가된 기업을 탐색
  3. 신기술 및 미래 수요를 통한 상승주 찾기
    • 웹 크롤링 + ML을 활용해 산업 트렌드 및 미래 수요 분석
    • AI, 2차전지, 반도체, 바이오 등 차세대 성장산업에 집중

강점: 중장기적 안정성, 성장주 발굴 능력
약점: 단기 급등락에 민감하지 못함


🤖 GPT의 로직: 패턴 + 이벤트 + 리스크 관리

GPT가 제안하는 로직은 데이터 중심적이고 수학적 접근입니다:

  1. 가격 행동 패턴 분석 (Technical ML)
    • RSI, MACD, 볼린저 밴드, 이동평균선 등을 활용
    • LSTM, Transformer 기반 시계열 예측 모델 적용
  2. 뉴스/이벤트 기반 감성 분석 (NLP + ML)
    • ChatGPT API를 활용해 뉴스와 공시를 요약 및 긍정/부정 분류
    • 이벤트 발생 시 단기 급등락 포착
  3. 리스크 관리 모델 (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) 프리미엄 통신사 — “신뢰 최고, 속도 최상(유료)”

장점: 커버리지·신뢰도 최상 / 단점: 비용

4) 국내 경제지 RSS(보조 채널)

  • 한국경제·매일경제·Pulse/KED Global 등은 RSS/영문판 채널을 운영(매체별 상이). 집계 보조로 사용. (KED Global, 매일경제, 10원 Tips)

🧭 추천 조합 (현실적인 베스트 프랙티스)

  1. 속보/사실 확인(정답지): OpenDART + SEC RSS
  2. 시장 반응 모니터링(기사/논조): 네이버 뉴스 API or Google News RSS
  3. 고급 소스(예산 있을 때): Reuters API
  4. 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 로직으로 알파(초과수익)를 노리는 것이 이상적입니다.

반응형