// 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
→
→
Ollama AI 분석
EXAONE 3.5
7.8B
→
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 모델이 응답에 마크다운 볼드(**텍스트**)를 사용한다. 텔레그램은 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줄 등록하면 끝난다. 한 번 설정해두면 이후에는 손댈 게 없다.
# 미국 마감 리포트 — 매일 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.py─Flask 대시보드 서버
│ ├─ save_hook.py─리포트 DB 저장 모듈
│ ├─ reports.db─SQLite 리포트 아카이브
│ └─ 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자동화
#프롬프트엔지니어링