클릭하여 터미널 활성화

Python 주식 시황 자동화 | 텔레그램으로 하루 3번 리포트 받기

// Python · Ollama · Telegram · Flask · yfinance · 시황자동화
로컬 AI로 매일 3번 시황 리포트 받기 — 텔레그램 봇 구축 전 과정, 월 운영비용 0원

매일 아침 8시 30분, 텔레그램에 시황 리포트가 온다

미국 장 마감 후 다음 날 아침, 한국 장이 끝나는 오후 3시 반, 미국 장이 열리기 30분 전 밤 10시. 하루 세 번 텔레그램으로 시황 분석 리포트가 자동으로 날아온다.

"매일 아침 증권사 앱 켜서 수치 확인하고, 뉴스 읽고 정리하는 게 너무 귀찮았다."

그 귀찮음을 자동화했다. 외부 유료 AI API 없이 로컬 모델 하나로. 월 운영비용은 전기료 외 0원이다. 이 글은 그 전체 구축 과정이다.

운영 환경
하드웨어   : Mac Mini M2, 16GB Unified Memory
OS         : macOS
AI 런타임  : Ollama + EXAONE 3.5:7.8B
언어       : Python 3
메시징     : Telegram Bot API
웹 프레임워크: Flask
월 운영비용 : 0원 (전기료 제외 전부 무료)

1. 프로젝트 목표와 전체 구성

목표는 네 가지였다.

미국·한국 주식시장 데이터를 실시간으로 수집
로컬 AI 모델로 전문 애널리스트 수준의 시황 분석 생성
텔레그램 봇을 통해 하루 3회 자동 브리핑 전송
웹 대시보드에서 실시간 시세 확인 및 리포트 아카이브 조회

전체 흐름은 단순하다.

시스템 흐름도
실시간 API
yfinance
Finnhub
CoinGecko
FRED
Python 수집기
데이터 수집
가공·포맷팅
Ollama AI 분석
EXAONE 3.5
7.8B
텔레그램 봇 전송
Flask 대시보드 저장

2. 데이터 소스 — 전부 무료 API 4개로 커버

유료 구독 없이 무료 API 4개로 필요한 데이터를 전부 수집한다.

API 용도 비용
yfinance 미국·한국·글로벌 지수, 선물, 원자재, 채권 무료
Finnhub 미국 개별 종목 실시간 시세, 환율 무료 (기본)
CoinGecko 암호화폐 시세 (BTC, ETH) 무료
FRED 미국 경제지표 발표 캘린더 (CPI, FOMC 등) 무료

수집 범위는 꽤 넓다. 단순한 주가 데이터가 아니라 시장을 해석하는 데 필요한 거의 모든 데이터를 커버한다.

🇺🇸 미국 시장
선물 3종 (S&P·나스닥·다우)
주요 지수 7종 (S&P·나스닥·다우·러셀·필라델피아반도체·VIX 등)
개별 종목 10종 (애플·엔비디아·테슬라 등)
10년·2년 국채금리
🇰🇷 한국 시장
KOSPI / KOSDAQ
7개 테마 (반도체·2차전지·바이오·인터넷·자동차·조선·방산)
테마별 대표 종목 16개
달러/원 환율
🌍 글로벌 · 원자재
글로벌 지수 3종 (닛케이·상해·STOXX50)
환율 4종 (달러원·달러엔·EUR/USD·달러인덱스)
원자재 5종 (금·은·WTI·천연가스·구리)
📅 기타
BTC / ETH
경제 캘린더 15개 지표
(CPI·NFP·PPI·GDP·FOMC 등)

3. 봇 시스템 구성 — 하루 3번 자동 리포트 + 상시 챗봇

총 4개의 모듈로 구성된다. 각각 실행 시간과 역할이 다르다.

08:30 KST · 매일 미국 시장 마감 리포트

미국 장이 마감된 다음 날 아침에 실행된다. 한국 장이 열리기 전, 전날 미국 시장의 흐름을 정리하고 오늘 한국 시장에 미칠 영향을 예측해준다. 하루를 시작하기 전 가장 먼저 확인하는 리포트다.

분석 구조
수집S&P 500, 나스닥, 다우, VIX, 주요 종목 5종, 환율, 금, 유가, BTC
분석시장 마감 시황 → 주요 지수 분석 → 주목 종목 → 환율·원자재 동향 → 한국 시장 영향 예측
15:30 KST · 평일 한국 시장 마감 리포트

한국 장 마감 직후 실행된다. KOSPI·KOSDAQ 지수 분석과 함께 7개 테마의 흐름을 읽어준다. 반도체가 강했는지, 2차전지가 빠졌는지, 방산이 움직였는지 테마별로 짚어준다.

분석 구조
수집KOSPI, KOSDAQ, 7개 테마 16개 종목, 달러/원
분석시황 요약 → 지수 분석 → 강세/약세 테마 → 주목 종목 → 환율 영향 → 내일 전망
22:00 KST · 평일 미국 개장 전 브리핑

세 리포트 중 데이터 범위가 가장 넓다. 미국 장 개장 30분 전에 실행되어 선물 방향, 글로벌 자금 흐름, 채권 금리, 환율 매크로까지 종합해서 오늘 밤 미국 장의 방향을 예측한다. 시나리오별 투자 전략까지 포함한다.

분석 구조
수집선물 3종, 지수 7종, 종목 10종, 글로벌 5종, 채권 2종, 환율 3종, 원자재 5종, 암호화폐 2종, 경제 캘린더
분석선물 갭 분석 → 글로벌 자금 흐름 → 채권·금리 → 환율·원자재 매크로 → 시나리오별 투자 전략
상시 운영 대화형 챗봇

자동 리포트 외에도 텔레그램에서 직접 질문을 보낼 수 있다. "오늘 삼성전자 왜 빠졌어?", "BTC 지금 어때?" 같은 자유로운 질문에 로컬 AI가 실시간으로 응답한다. 별도 챗봇 서버가 상시 대기 중이다.

4. 프롬프트 엔지니어링 — 숫자 나열에서 진짜 분석으로

처음 프롬프트는 단순했다. "당신은 주식 전문 애널리스트입니다. 아래 데이터를 분석하세요." 결과는 기대 이하였다.

프롬프트 개선 전
"테슬라가 3.44% 상승했습니다. 전기차 시장의 성장이 주목됩니다."
숫자 나열 · 원인 없음 · 모호한 표현
프롬프트 개선 후
"테슬라는 전기차 수요 증가와 생산 능력 확대에 대한 긍정적 전망이 반영되며 3.44% 상승했다. 테슬라의 강세는 관련 부품 공급업체와 기술 기업들에게도 파급 효과를 줄 것으로 예상된다."
원인 포함 · 맥락 연결 · 구체적 판단

품질을 끌어올리기 위해 세 가지 핵심 기법을 적용했다.

역할 설정 강화

단순히 "애널리스트입니다"가 아니라, 경력 연차와 담당 업무·분석 특기까지 구체적으로 설정했다. AI가 단순 요약이 아닌 전문가 관점으로 접근하게 된다.

구체적 작성 규칙 7가지 명시
숫자를 나열하지 말고 데이터 간의 관계와 맥락을 연결해서 분석할 것
"왜" 움직였는지 배경과 원인을 반드시 포함할 것
변동률 ±2% 이상 항목을 핵심으로 다루고, 소폭 변동은 간략히 언급할 것
종목명은 한국어 이름만 사용하고 티커 기호는 생략할 것
각 섹션은 3~5문장으로 핵심만 작성할 것
추상적 표현 대신 구체적 판단을 제시할 것
선물과 전일 종가의 괴리가 있으면 그 의미를 해석할 것
섹션별 분석 프레임워크 제시

선물 동향, 채권·금리, 원자재 등 각 섹션마다 "무엇을 분석해야 하는지"를 구체적으로 지시했다. AI가 스스로 무엇을 써야 할지 판단하게 두지 않고, 분석의 방향을 명확히 제시한 것이 핵심이다.

5. 텔레그램 메시지 포맷팅

데이터를 잘 수집하고 AI가 분석을 잘 해줘도, 메시지 가독성이 나쁘면 읽기 싫어진다. 두 가지를 개선했다.

등락 표시 개선
변경 전 🔺 상승 / 🔻 하락 — 상승·하락 모두 빨간 계열, 직관적이지 않음
변경 후 📈 +1.66% 엔비디아 / 📉 -0.47% 나스닥 — 아이콘 + 부호로 즉시 구분
AI 분석 볼드 처리 자동화

AI 모델이 응답에 마크다운 볼드(**텍스트**)를 사용한다. 텔레그램은 HTML을 쓰기 때문에 그대로 보내면 별표가 그대로 노출된다. 전송 직전에 마크다운을 HTML 볼드로 자동 변환하는 후처리를 추가했다. 덕분에 리포트에서 주요 키워드가 굵게 강조되어 가독성이 크게 올라갔다.

💡
핵심 처리 방식
정규표현식으로 **텍스트** 패턴을 찾아 <b>텍스트</b>로 치환한 뒤, 텔레그램 전송 시 parse_mode: HTML로 설정해서 보낸다.

6. Flask 웹 대시보드

텔레그램 외에 로컬에서 접속하는 웹 대시보드도 만들었다. http://localhost:5050으로 접속하면 두 가지 탭이 있다.

📊 실시간 탭
핵심 5개 지표 서머리 바
(S&P 500, BTC, 달러원, 금, VIX)

31개 항목 카드
(미국·한국·원자재·환율·암호화폐)

등락률 막대 차트
클릭 시 캔들스틱 차트 팝업
60초마다 자동 갱신
📋 리포트 탭
필터: 전체 / 미국 / 한국 / 프리마켓

원시 데이터 + AI 분석 전문 조회

SQLite DB 자동 아카이브
(과거 리포트 전부 열람 가능)
캔들스틱 차트 타임프레임
타임프레임 데이터 범위 봉 개수
1시간봉 최근 5일 ~35봉
4시간봉 최근 1개월 ~38봉
일봉 최근 3개월 ~60봉
💡
4시간봉 구현 방법
yfinance는 4시간봉을 직접 지원하지 않는다. 1시간 데이터를 받아서 4봉 단위로 리샘플링해서 만들었다. 별도 유료 API 없이 구현 가능하다.
🎨
UI 디자인
다크 테마(배경 #0a0e17), 상승 청록·하락 빨강 대비, 카드 호버 시 부상 애니메이션, 블러 처리 탭바, 실시간 Live dot 인디케이터.

7. 자동 스케줄링 — cron 3줄

cron에 3줄 등록하면 끝난다. 한 번 설정해두면 이후에는 손댈 게 없다.

crontab -e
# 미국 마감 리포트 — 매일 08:30
30 8 * * *  python3 ~/market_report.py
# 한국 마감 리포트 — 평일 15:30
30 15 * * 1-5python3 ~/korea_market_report.py
# 개장 전 브리핑 — 평일 22:00
0 22 * * 1-5python3 ~/premarket_briefing.py

서비스 관리 스크립트도 따로 만들었다. Ollama·챗봇·대시보드를 한 번에 올리는 시작 스크립트, 전체 상태 확인 스크립트, 봇만 재시작하는 스크립트로 나눠서 운영한다.

8. 트러블슈팅 — 만들면서 막힌 것들

구축하면서 실제로 겪은 문제 5개다.

트러블슈팅 기록 (5건)
#01
AI 응답에 중국어 혼입
원인 — Qwen2.5 모델의 학습 데이터 구조상 중국어 토큰이 한국어 응답 중간에 생성됨
임시 조치 — 중국어 감지 함수 + 3회 재시도 로직 추가
최종 해결 — EXAONE 3.5 한국어 네이티브 모델로 교체, 방어 코드 전부 제거
#02
pip 패키지 설치 실패
원인 — macOS의 PEP 668 제한으로 시스템 Python에 직접 설치 불가
해결 — Python 가상환경(venv) 생성 후 패키지 설치
#03
FMP API 데이터 조회 실패
원인 — Financial Modeling Prep 레거시 엔드포인트 지원 종료
해결 — yfinance로 전환, 지수·선물·원자재 데이터 전부 커버 가능
#04
텔레그램 메시지 포맷 깨짐
원인 — HTML 태그 사용 시 parse_mode 미설정으로 태그가 그대로 노출
해결 — 전송 함수에 parse_mode: HTML 파라미터 추가
#05
AI 분석에 티커 기호 그대로 노출
원인 — AI가 입력 데이터의 "테슬라(TSLA)" 형식을 그대로 복사해서 출력
해결 — 프롬프트 작성 규칙에 "티커 기호 생략, 자연스러운 문장으로 작성" 명시

9. 전체 파일 구조

최종 파일 구조다. 홈 디렉토리에 스크립트 4개, 대시보드 폴더, 서비스 관리 스크립트 폴더로 구성된다.

~/
~/
├─ market_report.py미국 시장 마감 리포트 (08:30)
├─ korea_market_report.py한국 시장 마감 리포트 (15:30)
├─ premarket_briefing.py미국 개장 전 브리핑 (22:00)
├─ bot_chat.py대화형 텔레그램 챗봇 (상시)
├─ market_dashboard/
│  ├─ app.pyFlask 대시보드 서버
│  ├─ save_hook.py리포트 DB 저장 모듈
│  ├─ reports.dbSQLite 리포트 아카이브
│  └─ templates/index.html대시보드 프론트엔드
└─ Desktop/AI/
├─ start_all.sh서비스 일괄 시작
├─ status.sh전체 상태 확인
└─ restart_bot.sh봇만 재시작

10. 향후 개선 방향

단기
뉴스 헤드라인 RSS 크롤링 추가 — 시장 촉매 파악 강화
전일 브리핑 비교 데이터 제공 — 흐름의 일관성 분석
섹터별 자금 흐름 데이터 추가
중기
외부 AI API(Claude, GPT-4o) 연동으로 분석 품질 향상
기술적 분석 지표 추가 — RSI, MACD, 볼린저 밴드
대시보드 모바일 최적화 + PWA 지원
장기
포트폴리오 트래킹 기능
관심 종목별 알림 커스터마이징
AI 분석 정확도 백테스팅 시스템

11. 월 운영비용 — 0원

이 시스템의 핵심은 로컬 AI 모델을 쓴다는 것이다. 외부 AI API를 쓰면 하루 3번 리포트에 월 수만 원이 들 수 있다. 로컬에서 돌리면 전기료 외에 아무것도 안 든다.

항목 월 비용
Ollama (로컬 AI) 0원 (전기료만)
yfinance API 무료
Finnhub API 무료 (기본 플랜)
CoinGecko API 무료
FRED API 무료
Telegram Bot API 무료
합계 0원
// 결론
월 0원. 매일 아침 8시 30분, 오후 3시 30분, 밤 10시.
맥미니가 혼자 데이터 수집하고, AI가 분석하고, 텔레그램으로 보내준다.
Tags: #텔레그램봇 #로컬LLM #Ollama #EXAONE #Python자동화 #시황분석 #yfinance #Flask #주식자동화 #macOS자동화 #프롬프트엔지니어링