매일 오전 8시에 전날 한국 주식시장(KOSPI/KOSDAQ)에서 강세를 보인 종목과 테마를 자동으로 분석해 이메일 리포트로 발송하는 Python 기반 자동화 프로그램입니다.
이 프로젝트의 핵심은 단순 크롤링이 아니라, 요즘 널리 쓰이는 로컬 LLM인 qwen3.5:9b를 활용해 "어제 어떤 종목이 왜 올랐는지"를 자동으로 요약하고 정리하는 데 있습니다. 유료 외부 AI API 없이 내 컴퓨터에서 직접 모델을 돌려, 개인 투자용 시장 요약 리포트를 자동 생성하는 것이 주요 취지입니다.
- 급등주 데이터 수집: 한국 주식시장 급등 종목과 테마 데이터를 수집합니다.
- 주도주 필터링: 상승률 20% 이상, 거래대금 1,000억 원 이상 기준으로 실제 시장 주도 종목만 선별합니다.
- 로컬 LLM 기반 상승 원인 요약: 관련 뉴스 제목을 바탕으로
qwen3.5:9b모델이 상승 이유를 1~3문장으로 요약합니다. - 로컬 LLM 기반 시장 흐름 정리: 주도주와 테마를 함께 보고 당일 시장 핵심 흐름을 요약합니다.
- 리포트 생성 및 발송: Markdown 리포트를 생성하고 HTML 이메일로 변환해 Gmail SMTP로 발송합니다.
- 자동 실행:
cron또는launchd로 매일 아침 자동 실행할 수 있습니다.
- 핵심 요약 엔진은
qwen3.5:9b입니다. - 요즘 많이 활용되는 Qwen 3.5 계열 모델 중 비교적 가볍게 돌릴 수 있는 9B 모델을 사용합니다.
- 외부 유료 AI API 없이 로컬 환경에서 직접 실행해 종목별 상승 원인과 시장 흐름을 요약합니다.
현재 코드 기준으로 주로 아래 소스를 사용합니다.
- 네이버 금융: 상승률 상위 종목, 테마 정보
- Google News RSS: 종목별 관련 뉴스
- Telegram 공개 채널: 보조 참고 메시지
- 로컬 LLM (
qwen3.5:9b): 종목별 상승 원인 및 시장 요약 생성
.
├── analyzers/ # 테마 분석, Ollama 요약
├── collectors/ # 종목/테마/뉴스/텔레그램 수집
├── data/ # 날짜별 원본 데이터(JSON)
├── filters/ # 주도주 필터링 로직
├── logs/ # 날짜별 실행 로그
├── reporters/ # Markdown 리포트 생성, 이메일 발송
├── reports/ # 날짜별 Markdown 리포트
├── scripts/ # 자동 실행 스크립트
├── config.py # 환경변수/기본 설정
└── main.py # 메인 실행 진입점
- 전일 영업일 기준으로 분석 대상을 결정합니다.
- 네이버 금융에서 상승률 상위 종목을 수집합니다.
- 거래대금과 종목명을 기준으로 ETF/스팩 등을 제외하고 주도주를 선별합니다.
- 테마 데이터와 관련 뉴스 데이터를 수집합니다.
- 로컬 LLM
qwen3.5:9b로 종목별 상승 원인과 시장 전체 흐름을 요약합니다. - Markdown 리포트와 JSON 데이터를 저장합니다.
- HTML 이메일로 변환해 지정한 수신자에게 발송합니다.
- Python 3.11+
- macOS 또는 Linux 권장
- 로컬 LLM 실행 환경
- Gmail SMTP 사용 가능한 계정
git clone https://github.com/junbit/market-leader.git
cd market-leaderpython3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt이 프로젝트는 로컬에서 직접 실행하는 경량 LLM을 활용해 뉴스 요약과 시장 흐름 정리를 자동화합니다.
권장 모델은 qwen3.5:9b 입니다.
- 최근 많이 활용되는 Qwen 3.5 계열 모델
- 로컬에서 돌리기 부담이 비교적 적은 9B 규모
- 이 프로젝트의 종목 뉴스 요약, 시장 흐름 요약 용도에 적합한 균형형 모델
예시:
ollama pull qwen3.5:9b
ollama serve기본 설정은 http://127.0.0.1:11434 를 사용합니다.
.env.example을 복사해 .env 파일을 만든 뒤 값을 채워주세요.
cp .env.example .env필수 항목:
OLLAMA_BASE_URLOLLAMA_MODELSMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASSWORDMAIL_FROMMAIL_TO
python3 main.py기본적으로 가장 최근 영업일을 기준으로 분석하고 이메일까지 발송합니다.
python3 main.py --date 2026-03-23
python3 main.py --no-email
python3 main.py --skip-ai--date: 특정 날짜를 직접 지정합니다.--no-email: 리포트는 저장하지만 이메일은 보내지 않습니다.--skip-ai: 로컬 LLM 요약을 생략합니다.
예시 스크립트는 scripts/run_daily.sh에 있습니다.
30 7 * * 1-5 /path/to/market-leader/scripts/run_daily.sh평일 오전 7시 30분에 실행해 전일 데이터를 수집하고, 오전 8시 전후 리포트 발송을 목표로 합니다.
reports/YYYY-MM-DD.md: 사람이 읽는 Markdown 리포트data/YYYY-MM-DD.json: 분석 결과 원본 데이터logs/YYYY-MM-DD.log: 실행 로그
기본 필터 기준은 config.py에 정의되어 있습니다.
- 최소 상승률:
20.0% - 최소 거래대금:
1000억 원
- 이 프로젝트는 외부 웹페이지 구조에 의존하는 스크래핑 기반 도구입니다. 사이트 구조가 바뀌면 수집이 깨질 수 있습니다.
- 뉴스 제목 기반 요약과 LLM 생성 결과에는 부정확함이나 과도한 추론이 포함될 수 있습니다.
- 이 프로젝트는 투자 자문 도구가 아니라 정보 정리 자동화 도구입니다.
- 유료 API 없이 웹 스크래핑과 로컬 LLM을 사용하므로 운영 비용이 낮습니다.
qwen3.5:9b같은 경량 로컬 모델을 활용해 네트워크 AI API 비용 없이 요약 기능을 사용할 수 있습니다.- 이메일 발송은 Gmail SMTP 설정이 필요합니다.
MIT