KRX(KOSPI/KOSDAQ) 시세 데이터를 수집하고, 이동평균 기반 돌파 스캔과 포지션 트래킹, 차트/리포트 생성을 수행하는 Python 프로젝트입니다.
- 국내 주식 종목의 일봉 데이터를 로컬에 축적
- 일봉을 기반으로 주봉/월봉 파생 데이터 및 이동평균 생성
- 주봉/월봉 10/240이평 상향 돌파 종목 자동 탐지
- 보유/관심 종목의 현재 상태(수익률, 이평 거리) 스냅샷 관리
- 차트/오버뷰/HTML로 결과를 한 번에 확인
config.py의 DATA_DIR, OUTPUT_DIR를 기준으로 아래 데이터를 저장합니다.
master/kospi_tickers.csv- KOSPI/KOSDAQ 종목 마스터
raw/daily/*.csv- 종목별 원시 일봉 OHLCV
- 실행 메타(
asof_datetime,asof_date,asof_time,price_status) 포함
derived/daily/*.csv- 일봉 + 이동평균(
ma5,ma10,ma20,ma120,ma180,ma240)
- 일봉 + 이동평균(
derived/weekly/*.csv- 주봉 집계 + 이동평균 +
is_final
- 주봉 집계 + 이동평균 +
derived/monthly/*.csv- 월봉 집계 + 이동평균 +
is_final
- 월봉 집계 + 이동평균 +
logs/raw_update_result_*.csv- 원시 데이터 업데이트 실행 결과 로그
logs/derived_update_result_*.csv- 파생 데이터 생성 실행 결과 로그
- 입력:
tracking/holdings.csv
- 출력 (
OUTPUT_DIR/position_tracking):position_snapshot_YYYYMMDD_HHMMSS.csvposition_history.csv
tracking/watch_YYYYMM.csv- 웹 앱 관심종목 월별 저장/조회 파일
- 예:
watch_202604.csv - (선택 조회용) 과거 파일 및
watch.csvlegacy 파일도 웹에서 조회 가능
tracking/MA10_J_Break.csv등- 웹 앱 패턴 기록 저장 파일 (
config.RECORD_FILE_OPTIONS)
- 웹 앱 패턴 기록 저장 파일 (
scan_result_YYYYMMDD_HHMMSS/all_breakouts.csvsummary.csv- 케이스별 CSV (
weekly_ma10_breakout.csv등) overview.pngcharts/<scan_case>/*.pngscan_overview_*.html
- FinanceDataReader 기반 KRX 종목/일봉 수집
- 증분 업데이트 + 재시도 로직
- 거래량 0 봉 보정 규칙 적용
volume == 0이면 OHLC를 마지막 거래일 종가로 보정
- 이동평균 계산 시 거래량 0 봉 제외
관련 모듈:
data_store.pydata_loader.py
- 케이스:
- 주봉 10이평 돌파
- 주봉 240이평 돌파
- 월봉 10이평 돌파
- 월봉 240이평 돌파
- 돌파 조건:
- 이전 봉
close <= MA - 현재 봉
close > MA
- 이전 봉
- 거래량 0 봉은 돌파 판정에서 제외
- 멀티프로세싱 스캔 지원
관련 모듈:
market_scanner.py
- 케이스별 캔들 차트 생성
- 오버뷰 이미지 생성
- 확대/탐색 가능한 HTML 결과 페이지 생성
- 자동 슬라이드 재생 기능
관련 모듈:
chart_viewer.pyreplay_latest_scan.pyhistorical_chart_viewer.py
- 보유 종목 CSV 컬럼 자동 인식
- 현재가, 손익, 손익률 계산
- 주/월봉 MA10/MA240 거리 지표 계산
- 스냅샷 + 히스토리 누적 저장
관련 모듈:
position_tracker.pyrun_position_tracking.py
- 저녁 배치 1회 실행 또는 스케줄 실행
run_evening_scan.py
- 데이터 업데이트 전용 실행
scripts/update_data.py
- 스캔 전용 실행
scripts/scan_market.py
- 3번 서칭 데이터 조회:
- 확대된(선택된) 종목을 관심종목으로 즉시 저장
- 5번 관심종목 조회:
- 월별 관심 파일 선택 조회
- 테이블 행 선택 + 차트/삭제 버튼 액션
- 차트 영역에서 메모 조회/수정/저장
- 7번 패턴 데이터 조회:
- 테이블 컬럼 폭 최적화(앞 5열 축소, 메모 열 확장)
- 8번 보유 종목 조회:
- 보유 종목 추가(코드/이름/매수가/수량/메모)
- 삭제 시 관심종목으로 전송(주봉/월봉, 분류, 메모 입력)
- 보유 CSV 메모 컬럼 자동 보강 + 차트 영역 메모 수정
실행 후 사용자가 주로 확인하는 최종 결과는 다음입니다.
all_breakouts.csv: 전체 돌파 종목 통합본summary.csv: 케이스별 종목 수 요약- 케이스별 상세 CSV
overview.png: 케이스별 전체/필터 요약 이미지charts/.../*.png: 종목별 돌파 차트scan_overview_*.html: 차트 갤러리형 리포트
position_snapshot_*.csv: 실행 시점 스냅샷position_history.csv: 스냅샷 누적 히스토리
config.py경로 설정 확인
- 기본값:
프로젝트/.app_data/{data,output} - 배포 환경:
APP_DATA_DIR또는DATA_DIR/OUTPUT_DIR환경변수 사용 권장
- 데이터 업데이트 실행
python scripts/update_data.py
- 스캔 실행
python run_evening_scan.py
- 포지션 트래킹만 실행(선택)
python run_position_tracking.py
- 웹 UI 실행(선택)
pip install streamlit streamlit run web_app.py
모듈별 상세 문서:
data_store.mddata_loader.mdmarket_scanner.mdchart_viewer.mdposition_tracker.mdrun_evening_scan.mdrun_position_tracking.mdhistorical_chart_viewer.mdreplay_latest_scan.mdscripts/*.md
__pycache__/및*.py[cod]는.gitignore로 제외되어 있습니다.