2026-07-12에
Dacon-Organization/Dacon모노레포에서 독립 저장소로 이관했습니다. 새 개발과 이슈는 이 저장소에서 관리하며, 과거 PR·브랜치 이력은 umbrella 저장소에 보존됩니다.
Skills.md 기반 투자 대시보드 설계 대회
AlphaFolio · 개인 투자자를 위한 분석 & 회고 대시보드
🔗 라이브 데모 ·
🧭 시스템 구성도 ·
🖼️ 화면 미리보기 ·
⚙️ 실행 방법
한 줄 요약 — 증권사 CSV·샘플·직접 입력 등 어떤 채널로 투자 데이터를 올려도, 30개 Skills 문서에 선언적으로 정의된 규칙대로 파싱→분석→시각화→리포트가 자동 실행되어 7개 페이지 대시보드가 생성됩니다. 분석 로직이 코드가 아닌 문서에 있어, 문서만 교체하면 다른 자산군(채권·코인 등)으로 확장됩니다.
| 무대 | 결과 | 비고 |
|---|---|---|
| PLAF Demo Day | 🏆 대상 수상 | Dacon 제출 이후 기능·발표 산출물을 추가 보강하여 발표 |
| Dacon 월간 해커톤 (본 대회) | 아쉽게 예선 탈락 | 1차 대중 투표 단계 · 본선 진출 실패 |
이 저장소는 Dacon 제출 시점의 결과물을 기준으로 하며, 이후 PLAF Demo Day를 위해 추가된 기능(시계열 분석, HTML 리포트, 관리자 모드 등)이 누적되어 있습니다. 아래 대회 정보는 원 제출 대회(Dacon) 기준으로 유지합니다.
| 항목 | 내용 |
|---|---|
| 대회명 | 월간 해커톤 : 투자 데이터를 시각화하라 |
| 플랫폼 | Dacon |
| 기간 | 2025년 4월 |
| 핵심 과제 | Skills.md 기반으로 투자 데이터 분석·시각화 규칙을 설계하고, 이를 기반으로 대시보드를 자동 생성하는 시스템 구축 |
| 항목 | 배점 | 핵심 포인트 |
|---|---|---|
| 범용성 | 25점 | 다양한 투자 데이터 구조에 대응, 재사용 가능성 |
| Skills.md 설계 | 25점 | 분석 규칙 명확성, 시각화 기준, 인사이트 생성 규칙의 체계성 |
| 대시보드 자동 생성 | 25점 | 자동 분석, 시각화 적절성, UI 완성도 |
| 바이브코딩 활용 | 15점 | Skills.md → 코드 자동 생성 구조, AI 친화적 문서 설계 |
| 실용성 및 창의성 | 10점 | 실제 활용 가능성, 확장 기능, UX |
- 기획서 (PDF) — 서비스 개요, 분석 흐름, 대시보드 구성, Skills.md 설계 방향, 확장 기능
- Skills 문서 (5개 도메인 30개 파일, PDF 변환 제출) — 파싱/분석/시각화/인사이트/리포트 규칙 문서
- 웹 페이지 (배포 URL) — Skills.md 기반 바이브코딩으로 구현한 Streamlit 대시보드
라이브 데모: https://alphafolio.streamlit.app (Streamlit Cloud 배포 예정 — 아래 배포 방법 참고)
"투자 데이터를 올리면, AI가 분석하고 대시보드를 자동으로 만들어주는 서비스"
핵심 차별화: 분석 로직을 코드가 아닌 **Skills 문서(30개 파일)**에 선언적으로 정의하여, 문서만 교체하면 다른 자산군(채권, 암호화폐 등)에도 대응 가능한 구조.
주요 분석 기능: 수익률·샤프·MDD 등 기본/고급 지표 | 상관관계·분산 분석 | 배당·인컴 분석 | 회전율·보유기간 탐지 | 규제 준수 안전 고지 | 다중 벤치마크 비교 | 세금·수수료 영향 분석
투자 데이터가 들어오면 5개 도메인 30개 Skills 문서가 정의한 규칙대로 단방향 파이프라인을 따라 흐릅니다. 각 단계의 함수는 @uses_skill 데코레이터로 계측되어, 런타임에 "어떤 Skill이 어떤 분석에 쓰였는지"가 사이드바·카드 뱃지·리포트에 그대로 노출됩니다.
| 레이어 | 역할 | 핵심 산출물 |
|---|---|---|
| ① 입력 채널 | 파일 업로드 · 샘플 3종 · 직접 입력(ticker_master 2,768종) | 원천 데이터 |
| ② parsing (5) | 파일 인식·컬럼 매핑·정규화·증권사 프리셋·무결성 검사 | 표준 스키마 DataFrame |
| ③ analysis (10) + 시계열 | 수익률·샤프·MDD·베타·HHI·자산곡선·상관·배당·회전율 | 지표 · 시계열 메트릭 |
| ④a viz (3) | 조건 기반 차트 자동 선택 · 스타일 · 레이아웃 | Plotly 인터랙티브 차트 |
| ④b insight (3) | 패턴 감지 · 인사이트 카드 · 투자 안전 고지 | 인사이트 카드 |
| ⑤ report (4) | 섹션 구성 · 내보내기 · 에러 처리 | 대시보드 / MD / CSV / HTML |
텍스트 기반 파이프라인 의존도(상세)는 아래 Skills 파이프라인 섹션을 참고하세요.
| 🏠 홈 — 개요 & 인사이트 | 📋 종목 상세 — 보유 테이블 |
|---|---|
![]() |
![]() |
| KPI 카드(평가금액·수익률·종목 수) + 핵심 인사이트 + 비중 도넛·수익률 차트 | 검색·정렬 가능한 보유 종목 테이블, 수익률·평가금액·비중 미니바 |
| 📈 성과분석 | 📄 리포트 | |
|---|---|---|
![]() |
![]() |
![]() |
모든 화면은 다크 테마 기반이며, 모바일 반응형 레이아웃을 지원합니다. (위 이미지는
data/sample_full.csv로드 후 캡처)
investment-dashboard-hackathon/
├── README.md ← 이 파일
├── AlphaFolio_기획서_이동원.pdf ← 제출용 기획서
├── docs/ ← Phase별 설계 문서
│ ├── phase1_service_concept.md ← 서비스 컨셉 정의
│ ├── phase2_analysis_flow.md ← 분석 파이프라인 흐름
│ ├── phase3_skills_design.md ← Skills.md 설계 전략
│ ├── phase4_dashboard_design.md ← 대시보드 UI 설계
│ └── phase5_vibecoding_extension.md ← 바이브코딩 & 확장 기능
├── skills/ ← Skills 규칙 문서 (핵심, 30개 파일)
│ ├── parsing/ ← 데이터 파싱 규칙 (5개)
│ │ ├── file-detection.md ← 파일 인식·인코딩 감지
│ │ ├── column-mapping.md ← 컬럼 동의어 매핑
│ │ ├── normalization.md ← 숫자·날짜·마켓 정규화
│ │ ├── broker-presets.md ← 증권사별 CSV 프리셋
│ │ └── data-integrity-check.md ← 데이터 무결성 검사
│ ├── analysis/ ← 투자 지표 분석 규칙 (10개)
│ │ ├── basic-metrics.md ← 수익률·평가금액·비중
│ │ ├── portfolio-metrics.md ← 포트폴리오 전체 지표
│ │ ├── advanced-metrics.md ← 샤프·MDD·변동성·베타
│ │ ├── benchmarks.md ← KOSPI/S&P 500 벤치마크
│ │ ├── benchmark-selection.md ← 벤치마크 자동 선택 규칙
│ │ ├── currency-rules.md ← KRW/USD 통화 처리
│ │ ├── tax-fee-impact.md ← 세금·수수료 영향 분석
│ │ ├── correlation-diversification.md ← 상관관계·분산 분석
│ │ ├── income-analysis.md ← 배당·인컴 분석
│ │ └── turnover-holding.md ← 회전율·보유기간 분석
│ ├── viz/ ← 시각화 규칙 (3개)
│ │ ├── chart-selection.md ← 조건 기반 차트 자동 선택
│ │ ├── chart-style.md ← 색상·포맷·테마
│ │ └── layout.md ← 페이지 레이아웃·반응형
│ ├── insight/ ← AI 인사이트 생성 규칙 (3개)
│ │ ├── pattern-rules.md ← 패턴 감지 규칙
│ │ ├── display-rules.md ← 인사이트 카드 표시 규칙
│ │ └── safety-disclaimer.md ← 투자 안전 고지·면책 규칙
│ └── report/ ← 리포트 구성 규칙 (4개)
│ ├── report-flow.md ← 리포트 생성 흐름
│ ├── section-specs.md ← 섹션별 구성 명세
│ ├── export-rules.md ← PDF·CSV 내보내기 규칙
│ └── error-handling.md ← 에러·경고 처리 규칙
├── src/ ← Streamlit 대시보드 소스코드
│ ├── main.py ← 홈 대시보드
│ ├── pipeline/ ← 파서·분석기·시각화·인사이트 엔진
│ └── components/ ← 사이드바·KPI카드·인사이트카드·헤더
├── pages/ ← Streamlit 멀티페이지
│ ├── 1_📊_포트폴리오.py
│ ├── 2_📈_성과분석.py
│ ├── 3_⚠️_리스크.py
│ ├── 4_📋_종목상세.py
│ └── 5_📄_리포트.py
├── scripts/
│ └── generate_samples.py ← 빌드타임 샘플 데이터 생성 (KRX+yfinance)
├── data/
│ └── sample_full.csv ← 한국+미국 10종목 샘플 (커밋 포함)
├── .streamlit/
│ └── config.toml ← 다크 테마 + headless 배포 설정
├── tests/ ← pytest + E2E 스모크
└── assets/ ← 이미지, 아이콘 등 리소스
30개 Skills 파일(5개 도메인)은 아래와 같은 의존 관계로 동작합니다:
CSV 업로드
↓
parsing/ → file-detection, column-mapping, normalization, broker-presets, data-integrity-check
(파일 인식·인코딩 감지 → 컬럼 매핑 → 데이터 정규화 → 표준 스키마 생성)
↓
analysis/ → basic-metrics, portfolio-metrics, advanced-metrics
benchmarks, benchmark-selection, currency-rules, tax-fee-impact
correlation-diversification, income-analysis, turnover-holding
(수익률·비중·고급 지표·상관관계·배당·회전율 등 전체 분석)
↓
├── viz/ → chart-selection, chart-style, layout
│ (조건 기반 차트 자동 선택 & 렌더링)
└── insight/ → pattern-rules, display-rules, safety-disclaimer
(패턴 감지 → 인사이트 카드 생성 → 투자 안전 고지)
↓
report/ → report-flow, section-specs, export-rules, error-handling
(섹션 구성, 레이아웃, 내보내기(대시보드/PDF/CSV), 에러 처리)
| 영역 | 기술 | 선택 이유 |
|---|---|---|
| 프론트/대시보드 | Streamlit ≥ 1.44 | 빠른 프로토타이핑, Python 단일 스택 |
| 데이터 분석 | pandas ≥ 2.2, numpy ≥ 1.26 | 투자 데이터 가공·지표 계산 표준 도구 |
| 시각화 | Plotly ≥ 5.22 | 인터랙티브 차트, Streamlit 네이티브 지원 |
| 데이터 수집 | pykrx, yfinance | KRX 국내주식, Yahoo Finance 해외 ETF |
| 배포 | Streamlit Cloud | 무료 배포, URL 즉시 공유 가능 |
- 선언적 (Declarative) — Skills.md는 "무엇을" 정의하고, 코드가 "어떻게"를 처리
- 교체 가능 (Swappable) — 모든 문서에
extension_points섹션 포함, 규칙 교체만으로 다른 자산군 대응 - 바이브코딩 친화 — YAML 구조화 포맷으로 AI가 읽고 코드 생성 가능
# 1) 의존성 설치
pip install -r requirements.txt
# 2) (선택) 샘플 데이터 재생성 — KRX·yfinance 실제 가격 수집
# data/sample_full.csv 가 이미 커밋되어 있으므로 생략 가능
python scripts/generate_samples.py --variant all
# 3) Streamlit 실행
streamlit run streamlit_app.py샘플 데이터:
data/sample_full.csv는 한국 6종목(KRX 합성가) + 미국 ETF 4종목(yfinance 실가격)으로 구성된 10종목 샘플입니다. API 없이도 즉시 대시보드를 체험할 수 있습니다.
| # | 페이지 | 파일 | 모드 조건 |
|---|---|---|---|
| 0 | 🏠 홈 (개요) | streamlit_app.py → src/main.py |
데이터 업로드 |
| 1 | 📊 포트폴리오 | pages/1_📊_포트폴리오.py |
보유 현황 필요 |
| 2 | 📈 성과분석 | pages/2_📈_성과분석.py |
매수가+현재가 필요 |
| 3 | pages/3_⚠️_리스크.py |
보유 현황 필요 | |
| 4 | 📋 종목 상세 | pages/4_📋_종목상세.py |
데이터 업로드 |
| 5 | 📄 리포트 | pages/5_📄_리포트.py |
데이터 업로드 (MD/CSV export) |
사이드바 공통 필터(시장/섹터/수익률 범위)가 페이지 1·2·3·4·5 모두에 적용됩니다.
# pytest (parser/analyzer/skills_loader)
python -m pytest tests/ -q
# E2E 스모크 (전체 차트 9종 + 분석 파이프라인)
python tests/smoke_e2e.py
# Playwright E2E (실시간 시세 주입 검증, 브라우저 자동화)
pip install -r requirements-dev.txt; playwright install chromium
$env:RUN_LIVE="1"; python -m pytest tests/test_e2e_live_prices.py -v- share.streamlit.io 접속 → GitHub 계정 연결
- Repository:
mygithub05253/Dacon - Branch:
main - Main file path:
investment-dashboard-hackathon/streamlit_app.py - Python 버전 3.10+ 선택
requirements.txt자동 인식 (Secrets 불필요 — 런타임은 업로드 데이터만 처리)- 배포 완료 후 공개 URL을 이 README의 라이브 데모 링크에 업데이트
참고:
.streamlit/config.toml에 다크 테마와headless = true가 설정되어 있어 Cloud 환경에서도 동일한 UI로 동작합니다.
data/sample_full.csv 로드 후 Playwright 브라우저 QA 통과 확인:
| 페이지 | 주요 검증 항목 | 결과 |
|---|---|---|
| 🏠 홈 | KPI 카드(총 평가금액·수익률·종목 수), 인사이트 카드, 차트 2종 | ✅ |
| 📊 포트폴리오 | 도넛 차트(종목별 비중), 비중 테이블 | ✅ |
| 📈 성과분석 | 수익률 KPI(최고·최저·평균), 종목별 수익률 바 차트 | ✅ |
| 집중도 바+누적선 차트, HHI 요약 테이블, 경고 카드 | ✅ | |
| 📋 종목상세 | 10종목 전체 테이블 (수익률·평가금액·비중 미니 바 포함) | ✅ |
| 📄 리포트 | 도넛 + 섹터 Treemap + 수익률 바 차트 복합 렌더링 | ✅ |
평가자가 어떤 입력 채널을 선택해도 100% 동작하는 통합 데이터 입력 표면.
| 입력 채널 | 컴포넌트 | 비고 |
|---|---|---|
| 📁 파일 업로드 | upload_guide + file_uploader |
필수/선택 컬럼·예시·5사 헤더 가이드 |
| 🎯 샘플 데이터 | sample_full / sample_kr_basic / sample_trades |
3종 모두 정상 빌드·로드 |
| ✏️ 직접 입력 | manual_entry 폼 |
ticker_master 자동완성 + 시세 자동 조회 |
data/ticker_master.sqlite(~344KB) — KR 2,768종목 (KOSPI 948 + KOSDAQ 1,820) + US 화이트리스트 10종- DART 메타 (fiscal_month, industry_code) 보강 적용
- broker preset 5종 자동 인식: 키움 / 미래에셋 / 삼성 / 토스 / 한국투자증권
- price_provider: pykrx (KR) / yfinance (US) + 5분 ttl 캐시 + fallback
# 종목 마스터 (KRX_ID/KRX_PW 와 DART_API_KEY 가 .env 에 있어야 풀빌드)
python scripts/build_ticker_master.py --variant all
# 샘플 데이터 3종
python scripts/generate_samples.py --variant all.env.example 복사 → .env 후 채우기:
| 변수 | 용도 | 미설정 시 |
|---|---|---|
KRX_ID, KRX_PW |
KRX 정보데이터시스템 회원 (pykrx 1.2.x 인증) | KOSPI 시드 20종으로 폴백 |
DART_API_KEY |
전자공시 OpenDART 인증키 | DART 메타 보강 스킵 |
requirements.txt 한글 주석이 cp949 환경에서 파싱 오류를 낼 수 있으므로:
$env:PYTHONUTF8=1
pip install -r requirements.txtpython tests/smoke_e2e.py분석 파이프라인 + 샘플 3종 파싱 + ticker_master 자동완성 + Skills 도메인 커버리지 모두 검증.
평가자에게 "30개 Skill 중 어떤 게 어느 분석에 쓰였는가"를 런타임에 가시화.
@uses_skill("analysis/basic-metrics") ← 데코레이터 자동 계측
trace.record("report/report-flow", ctx) ← 명시 호출
│
▼
session_state["skill_usages"] (테스트 환경은 _local_usages 폴백)
│
┌────┼────┐
▼ ▼ ▼
사이드바 카드/차트 MD 리포트
패널 뱃지 Skills 섹션
| 영역 | 노출 위치 | 파일 |
|---|---|---|
| 🧩 사이드바 "사용된 Skills (N/25)" | 분석 후 자동 갱신 | src/components/skills_panel.py |
| 📐 KPI 카드 뱃지 | 홈/리스크 KPI 하단 | src/components/skills_badge.py, kpi_cards.py, pages/3_⚠️_리스크.py |
| 🔍 인사이트 카드 뱃지 | pattern/display/safety | src/components/insight_cards.py |
| 📄 MD 리포트 Skills 섹션 | 마크다운 다운로드 끝 | pages/5_📄_리포트.py _build_skills_section() |
| 도메인 | 활성/전체 | 메모 |
|---|---|---|
| parsing | 5/5 | 업로드 시 file-detection ~ data-integrity-check 전수 호출 |
| analysis | 6/10 | 시계열·거래·배당 의존 4종(benchmarks, correlation-diversification, turnover-holding, income-analysis)은 추가 샘플 로드 시 활성 |
| viz | 3/3 | chart-selection / chart-style / layout |
| insight | 3/3 | pattern-rules / display-rules / safety-disclaimer |
| report | 4/4 | 리포트 페이지 방문 시 report-flow ~ error-handling |
| 합계 | 17~21/25 | 시연 데이터에 따라 증감 |
| 기능 | 직결 평가 항목 |
|---|---|
| @uses_skill 데코레이터 + 자동 계측 | 바이브코딩 15점 — 수동 구현 최소화, skill .md 직결 |
| 사이드바 N/25 카운트 | Skills.md 설계 25점 — 30개(현 25개) skill 활용도 정량 지표 |
| 뱃지 클릭 → .md 원문 팝업 | 바이브코딩 15점 — 문서 기반 생성 직접 시연 |
| MD 리포트 Skills 섹션 | 양 항목 — 심사위원 오프라인 검토 자료 |
tests/smoke_e2e.py 의 smoke_skills_coverage() 가 도메인별 목표치를 자동 검증.
$env:PYTHONUTF8=1
python tests/smoke_e2e.py기대 출력:
[M9.2] 활성 skills: 17 (snapshot 전체 17)
✅ parsing: 5/5+
✅ analysis: 6/6+
✅ viz: 3/3+
✅ insight: 3/3+
✅ report: 0/0+ (리포트 페이지 미실행 — 정상)
📋 종목상세 페이지에 재무 / 공시 / 가격 / 한 줄 진단 4탭을 추가. KR=OpenDartReader, US=yfinance 빌드타임 캐시로 평가자 측에 API 키 노출 없이 즉시 시연.
pages/4_📋_종목상세.py
└─ selectbox 종목 선택
↓
src/components/stock_detail_panel.py
├─ 📊 재무 탭 → PER/PBR/ROE/부채비율 카드 + 자산/부채/자본 + 손익 막대
├─ 📰 공시·뉴스 → KR 타임라인 + 종류 필터 + 이상 패턴 마커 / US 뉴스 + 링크
├─ 📈 가격 → Plotly 캔들 + 60일 MA + 거래량 + 1M/3M/6M/1Y 수익률·MDD
└─ ✨ 한 줄 진단 → 펀더멘털 + 공시 + 6개월 추이 종합, severity → 색상 분기
↓
src/pipeline/fundamentals.py
├─ load_financials(ticker, market) → BS/IS/CF DataFrame
├─ load_disclosures(ticker, market) → 공시(KR) / 뉴스(US) DataFrame
├─ compute_fundamental_metrics(...) → @uses_skill('analysis/fundamental-metrics')
└─ detect_disclosure_anomaly(df) → @uses_skill('insight/disclosure-anomaly')
# 보유 샘플 10종 (KR 6 + US 4) — 기본
python scripts/build_fundamentals.py --variant sample
# KR 전 종목 (~7~10시간, 1차 투표 진행 중 비동기 보강)
python scripts/build_fundamentals.py --variant kr
# US 화이트리스트만
python scripts/build_fundamentals.py --variant us산출물:
| 디렉토리 | 키 | 내용 |
|---|---|---|
data/financials/<ticker>.json.gz |
KR 6자리 | DART 사업보고서 BS/IS/CF |
data/disclosures/<ticker>.json.gz |
KR 6자리 | 최근 1년 공시 메타 |
data/financials_us/<ticker>.json.gz |
US 티커 | yfinance income/balance (ETF는 빈 응답) |
data/news_us/<ticker>.json.gz |
US 티커 | yfinance.news (2026 구조 자동 평탄화) |
| skill | 파일 | 내용 |
|---|---|---|
analysis/fundamental-metrics |
skills/analysis/fundamental-metrics.md |
PER/PBR/ROE/부채비율/EPS 성장률 계산 규칙, EPS TTM 4분기 trailing 합산, 업종 평균 비교, ZeroDivision graceful fallback, extension_points 4종 |
insight/disclosure-anomaly |
skills/insight/disclosure-anomaly.md |
유상증자(high)/자기주식(medium)/임원거래(medium) 3종 이상 패턴 감지, severity → 한 줄 진단 색상 연동, KR/US 대칭 처리, extension_points 5종 |
| 지표 | 값 |
|---|---|
| PER | 13.21배 |
| PBR | 1.37배 |
| ROE | 10.36% |
| 부채비율 | 29.94% |
tests/test_fundamentals.py 의 test_KR_005930_실데이터_지표_합리성 가 자동 검증 (빌드 산출물 없으면 skip).
| 기능 | 직결 평가 항목 | 예상 효과 |
|---|---|---|
| 재무 탭 (3장표 + 4개 핵심 지표) | 범용성 25 + 실용성 10 | "DB처럼 보유" 시연 |
| 공시 탭 (타임라인 + 이상 감지) | 범용성 25 + 실용성 10 | 투자 판단 지원 시연 |
fundamental-metrics.md skill |
Skills.md 설계 25 + 바이브코딩 15 | 분석 스킬 체계화 |
disclosure-anomaly.md skill |
Skills.md 설계 25 + 바이브코딩 15 | 인사이트 스킬 체계화 |
| 한 줄 진단 카드 | 실용성·창의성 10 | 종합 인사이트 차별화 |
| US/KR 대칭 처리 | 범용성 25 | 다국가 지원 시연 |
| 누적 | 약 15~25점 보강 영향권 |
.env.example 복사 후 채우기 (Spec-1과 공유):
| 변수 | 용도 | 미설정 시 |
|---|---|---|
DART_API_KEY |
OpenDartReader 인증 (빌드타임 전용) | KR 빌드 자동 스킵, US만 빌드 |
런타임은 빌드 산출물만 읽으므로 키 불필요.
# Spec-3 유닛 (19 케이스)
python -m pytest tests/test_fundamentals.py -v
# 통합 smoke (M7 + M9 + M9.2 + Spec-3 skill 존재 검증)
$env:PYTHONUTF8=1
python tests/smoke_e2e.py기대: 19 passed / ALL SMOKE PASSED.
PLAF Demo Day 시연 강화를 위해 시간축(시계열) 분석, 시각화 포함 리포트, 관리자 모드를 추가했다. 모든 데이터는 결정론적·오프라인 생성이라 키 없이 Streamlit Cloud 에서 즉시 동작한다.
| 파일 | 내용 | 활성화 분석 |
|---|---|---|
data/sample_prices.csv |
6개월 일별 종가(보유 10종 + 벤치마크 ^KOSPI/^SP500), long 포맷 |
자산곡선·낙폭·롤링·벤치마크·상관 |
data/sample_dividends.csv |
최근 6개월 배당 지급 내역(분기/반기/연) | 배당·인컴 분석 |
data/sample_journal.csv |
매매일지 시드(근거·감정·메모·실현수익률) | 매매일지 패턴 분석 |
# 시계열·배당·매매일지 일괄 생성 (오프라인, fallback 가격 기준 결정론)
python scripts/generate_samples.py --variant demo홈 → 샘플 → 🎬 데모 풀 시나리오 한 번으로 보유+시계열+배당+매매일지를
session_state(df, prices_long, dividends, trades, journal_entries)에 적재.
적재 로직: src/pipeline/demo_seed.py.
- 성과분석: 자산곡선+낙폭, 벤치마크 대비(시작=100), 롤링 변동성·샤프, 배당·인컴
- 리스크: 시계열 기반 샤프/MDD + 종목 상관 히트맵 + 평균 상관
- 매매일지 › 거래 성과: FIFO 실현손익 타임라인, 승/패 도넛, 보유기간 분포, 종목별 실현손익
핵심 계산: portfolio_equity_curve(보유×일별종가, USD 고정환율 환산),
realized_trades(FIFO 매칭), dividend_summary(연환산 수익률).
이로써 휴면 상태였던 skill 4종(benchmarks, correlation-diversification,
income-analysis, turnover-holding)이 런타임에 활성화된다.
리포트 페이지에 📊 HTML 다운로드 추가. Plotly 차트를 인터랙티브 그대로 임베드(plotly.js CDN 1회 로드, kaleido 등 추가 의존성 0). 브라우저로 열거나 인쇄→PDF 변환 가능. CSV/MD 는 기존대로 유지.
세션 데이터를 직접 관리하는 콘솔(실제 DB 미도입, 세션 메모리 기반).
| 탭 | 기능 |
|---|---|
| 📊 데이터 편집 | 보유/거래/시계열/배당 data_editor CRUD → 저장 시 전 페이지 즉시 반영 |
| 📔 매매일지 | 일지 항목 표 편집 |
| 🗂️ 샘플 관리 | data/sample_*.csv 미리보기 + 임의 세션 키로 적재 |
| 🔍 무결성 | 필수 컬럼·중복·음수·결측 점검 + session_state 인스펙터 |
| 💾 스냅샷 | 세션 전체 JSON 백업/복원 |
$env:PYTHONUTF8=1
python -m pytest tests/test_timeseries.py -q # 9 passedstreamlit>=1.57.0(번들 agent-skillsdeveloping-with-streamlit활용)




