383 lines
11 KiB
Markdown
383 lines
11 KiB
Markdown
# Changelog - 2026-01-30
|
|
|
|
## 🎯 목표
|
|
make-quant-py에서 누락된 전략 3개를 pension-quant-platform으로 마이그레이션하고, Frontend 데이터 관리 UI를 완성합니다.
|
|
|
|
---
|
|
|
|
## ✅ 완료된 작업
|
|
|
|
### Backend (7개 파일 수정/생성)
|
|
|
|
#### 1. 공통 함수 추가 및 확장
|
|
**파일**: `backend/app/utils/data_helpers.py`
|
|
|
|
- **추가된 함수**:
|
|
- `calculate_value_rank(value_df, indicators)` - 밸류 지표 순위 계산 및 합산
|
|
- `calculate_quality_factors(fs_list)` - 퀄리티 팩터 TTM 계산 (ROE, GPA, CFO)
|
|
|
|
- **확장된 함수**:
|
|
- `get_value_indicators()` - PSR, PCR 계산 로직 추가
|
|
- PSR = 시가총액 / 매출액 (TTM)
|
|
- PCR = 시가총액 / 영업활동현금흐름 (TTM)
|
|
- 파라미터 추가: `include_psr_pcr`, `base_date`
|
|
|
|
- **임포트 추가**:
|
|
- `import numpy as np`
|
|
|
|
#### 2. Value 전략 구현
|
|
**파일**: `backend/app/strategies/factors/value.py` (신규)
|
|
|
|
- **클래스**: `ValueStrategy(BaseStrategy)`
|
|
- **지표**: PER, PBR
|
|
- **로직**:
|
|
- 종목 리스트 조회
|
|
- PER, PBR 조회 (Asset 모델 기반)
|
|
- 두 지표 모두 있는 종목 필터링
|
|
- 순위 합산 후 상위 N개 선정
|
|
- **파라미터**: `count` (기본값 20)
|
|
|
|
#### 3. Quality 전략 구현
|
|
**파일**: `backend/app/strategies/factors/quality.py` (신규)
|
|
|
|
- **클래스**: `QualityStrategy(BaseStrategy)`
|
|
- **지표**: ROE, GPA, CFO
|
|
- **로직**:
|
|
- 종목 리스트 조회
|
|
- 재무제표 데이터 조회
|
|
- TTM 계산 (최근 4분기 합산, 자산/자본은 평균)
|
|
- ROE = 당기순이익 / 자본
|
|
- GPA = 매출총이익 / 자산
|
|
- CFO = 영업활동현금흐름 / 자산
|
|
- 각 지표 순위 계산 (ascending=False)
|
|
- 순위 합산 후 상위 N개 선정
|
|
- **파라미터**: `count` (기본값 20)
|
|
|
|
#### 4. All Value 전략 구현
|
|
**파일**: `backend/app/strategies/factors/all_value.py` (신규)
|
|
|
|
- **클래스**: `AllValueStrategy(BaseStrategy)`
|
|
- **지표**: PER, PBR, PCR, PSR, DY
|
|
- **로직**:
|
|
- 종목 리스트 조회
|
|
- 5가지 밸류 지표 조회 (`include_psr_pcr=True`)
|
|
- 최소 3개 이상의 지표가 있는 종목 필터링
|
|
- DY 역수 처리 (높을수록 좋은 지표)
|
|
- 순위 합산 후 상위 N개 선정
|
|
- **파라미터**: `count` (기본값 20)
|
|
|
|
#### 5. 전략 레지스트리 업데이트
|
|
**파일**: `backend/app/strategies/registry.py`
|
|
|
|
- **임포트 추가**:
|
|
```python
|
|
from app.strategies.factors.value import ValueStrategy
|
|
from app.strategies.factors.quality import QualityStrategy
|
|
from app.strategies.factors.all_value import AllValueStrategy
|
|
```
|
|
|
|
- **레지스트리 등록**:
|
|
```python
|
|
STRATEGY_REGISTRY = {
|
|
...
|
|
'value': ValueStrategy,
|
|
'quality': QualityStrategy,
|
|
'all_value': AllValueStrategy,
|
|
}
|
|
```
|
|
|
|
#### 6. MultiFactorStrategy 리팩토링
|
|
**파일**: `backend/app/strategies/composite/multi_factor.py`
|
|
|
|
- **변경 사항**:
|
|
- `_calculate_quality_factors()` 메서드 제거
|
|
- 공통 함수 `calculate_quality_factors()` 사용
|
|
- 임포트 추가: `from app.utils.data_helpers import calculate_quality_factors`
|
|
|
|
#### 7. 테스트 추가
|
|
**파일**: `backend/tests/test_strategies.py`
|
|
|
|
- **임포트 추가**:
|
|
```python
|
|
from app.strategies.factors.value import ValueStrategy
|
|
from app.strategies.factors.quality import QualityStrategy
|
|
from app.strategies.factors.all_value import AllValueStrategy
|
|
```
|
|
|
|
- **추가된 테스트**:
|
|
- `test_value_strategy_interface()` - ValueStrategy 인터페이스 검증
|
|
- `test_quality_strategy_interface()` - QualityStrategy 인터페이스 검증
|
|
- `test_all_value_strategy_interface()` - AllValueStrategy 인터페이스 검증
|
|
- `test_value_select_stocks()` - ValueStrategy 실행 테스트
|
|
- `test_quality_select_stocks()` - QualityStrategy 실행 테스트
|
|
- `test_all_value_select_stocks()` - AllValueStrategy 실행 테스트
|
|
|
|
---
|
|
|
|
### Frontend (2개 파일 수정/생성)
|
|
|
|
#### 1. DataManagement 컴포넌트 생성
|
|
**파일**: `frontend/src/components/data/DataManagement.tsx` (신규)
|
|
|
|
- **기능**:
|
|
1. **데이터베이스 통계 카드** (3개)
|
|
- 종목 수
|
|
- 가격 데이터 수
|
|
- 재무제표 수
|
|
- 10초 자동 갱신
|
|
|
|
2. **데이터 수집 버튼** (5개)
|
|
- 종목 데이터 수집
|
|
- 주가 데이터 수집 (최근 30일)
|
|
- 재무제표 수집
|
|
- 섹터 데이터 수집
|
|
- 전체 수집
|
|
|
|
3. **수집 상태 표시**
|
|
- 진행 중: 로딩 스피너 + 파란색 배경
|
|
- 완료: 성공 메시지 + 녹색 배경
|
|
- 실패: 에러 메시지 + 빨간색 배경
|
|
- Task ID 표시 및 Flower 링크
|
|
|
|
4. **Task 상태 폴링**
|
|
- 3초 간격으로 상태 확인
|
|
- SUCCESS/FAILURE 시 폴링 중단
|
|
- 상태 업데이트 UI 반영
|
|
|
|
- **스타일링**:
|
|
- Tailwind CSS
|
|
- 반응형 그리드 레이아웃 (1/2/3열)
|
|
- 색상 코딩 (파란색: 종목, 녹색: 가격, 보라색: 재무제표, 노란색: 섹터, 빨간색: 전체)
|
|
|
|
- **API 사용**:
|
|
- `dataAPI.stats()` - 통계 조회
|
|
- `dataAPI.collectTicker()` - 종목 수집
|
|
- `dataAPI.collectPrice()` - 가격 수집
|
|
- `dataAPI.collectFinancial()` - 재무제표 수집
|
|
- `dataAPI.collectSector()` - 섹터 수집
|
|
- `dataAPI.collectAll()` - 전체 수집
|
|
- `dataAPI.taskStatus(taskId)` - 작업 상태 조회
|
|
|
|
#### 2. App.tsx 통합
|
|
**파일**: `frontend/src/App.tsx`
|
|
|
|
- **임포트 추가**:
|
|
```typescript
|
|
import DataManagement from './components/data/DataManagement';
|
|
```
|
|
|
|
- **Data 탭 수정**:
|
|
```typescript
|
|
{activeTab === 'data' && (
|
|
<div className="px-4 py-6 sm:px-0">
|
|
<DataManagement />
|
|
</div>
|
|
)}
|
|
```
|
|
|
|
- **변경 전**: API 엔드포인트 목록만 표시
|
|
- **변경 후**: 완전한 데이터 관리 UI
|
|
|
|
---
|
|
|
|
### 문서화 (2개 파일 수정)
|
|
|
|
#### 1. README.md 업데이트
|
|
**파일**: `README.md`
|
|
|
|
- **전략 목록 확장**:
|
|
```markdown
|
|
- Multi-Factor (Quality + Value + Momentum)
|
|
- Momentum (12M Return + K-Ratio)
|
|
- Value (PER, PBR) ⭐ NEW
|
|
- Quality (ROE, GPA, CFO) ⭐ NEW
|
|
- All Value (PER, PBR, PCR, PSR, DY) ⭐ NEW
|
|
- Magic Formula
|
|
- Super Quality
|
|
- F-Score
|
|
```
|
|
|
|
- **최근 업데이트 섹션 추가**:
|
|
```markdown
|
|
## ✅ 최근 업데이트 (2026-01-30)
|
|
- [x] Value 전략 추가
|
|
- [x] Quality 전략 추가
|
|
- [x] All Value 전략 추가
|
|
- [x] Frontend 데이터 관리 탭 구현
|
|
- [x] 데이터 수집 상태 시각화
|
|
- [x] 공통 함수 리팩토링
|
|
```
|
|
|
|
#### 2. IMPLEMENTATION_STATUS.md 업데이트
|
|
**파일**: `IMPLEMENTATION_STATUS.md`
|
|
|
|
- **전략 섹션 업데이트**:
|
|
- ValueStrategy 추가
|
|
- QualityStrategy 추가
|
|
- AllValueStrategy 추가
|
|
- 총 전략 수: 5개 → 8개
|
|
|
|
- **데이터 조회 유틸리티 섹션 업데이트**:
|
|
- `calculate_value_rank()` 추가
|
|
- `calculate_quality_factors()` 추가
|
|
- `get_value_indicators()` PSR, PCR 추가
|
|
|
|
- **Frontend 컴포넌트 섹션 업데이트**:
|
|
- DataManagement.tsx 추가
|
|
|
|
- **구현 통계 업데이트**:
|
|
- Quant 전략: 5개 → 8개
|
|
- 테스트 케이스: 30+ → 36+
|
|
- Frontend 컴포넌트: 3개 → 4개
|
|
|
|
- **최근 업데이트 섹션 추가** (2026-01-30)
|
|
|
|
---
|
|
|
|
## 📊 구현 통계
|
|
|
|
### 수정/생성된 파일
|
|
- **Backend**: 7개 파일
|
|
- 신규 생성: 3개 (value.py, quality.py, all_value.py)
|
|
- 수정: 4개 (data_helpers.py, registry.py, multi_factor.py, test_strategies.py)
|
|
|
|
- **Frontend**: 2개 파일
|
|
- 신규 생성: 1개 (DataManagement.tsx)
|
|
- 수정: 1개 (App.tsx)
|
|
|
|
- **문서**: 2개 파일
|
|
- 수정: 2개 (README.md, IMPLEMENTATION_STATUS.md)
|
|
|
|
### 추가된 코드
|
|
- **Backend**:
|
|
- 전략 클래스: 3개 (~350줄)
|
|
- 공통 함수: 2개 (~80줄)
|
|
- 테스트: 6개 (~120줄)
|
|
|
|
- **Frontend**:
|
|
- 컴포넌트: 1개 (~270줄)
|
|
|
|
### 전략 마이그레이션 진행률
|
|
- **이전**: 5/9 (56%)
|
|
- **현재**: 8/9 (89%)
|
|
- **남은 전략**: 1개 (Super Value Momentum - 보류)
|
|
|
|
---
|
|
|
|
## 🎯 주요 개선 사항
|
|
|
|
### 1. 코드 재사용성 향상
|
|
- MultiFactorStrategy와 QualityStrategy에서 중복되던 TTM 계산 로직을 `calculate_quality_factors()` 공통 함수로 분리
|
|
- ValueStrategy, QualityStrategy, AllValueStrategy에서 `calculate_value_rank()` 공통 함수 사용
|
|
|
|
### 2. 확장성 향상
|
|
- `get_value_indicators()`에 PSR, PCR 계산 로직 추가
|
|
- `include_psr_pcr` 파라미터로 선택적 활성화
|
|
- 기존 코드 영향 없이 하위 호환성 유지
|
|
|
|
### 3. 테스트 커버리지 확대
|
|
- 3개 신규 전략 각각 2개씩 테스트 추가 (인터페이스 + 실행)
|
|
- 총 테스트 케이스: 30+ → 36+
|
|
|
|
### 4. Frontend UX 개선
|
|
- 데이터 수집 작업을 CLI에서 웹 UI로 이동
|
|
- 실시간 상태 모니터링 (로딩 스피너, 성공/실패 메시지)
|
|
- Task ID 및 Flower 링크 제공으로 디버깅 편의성 향상
|
|
|
|
---
|
|
|
|
## 🔍 검증 항목
|
|
|
|
### Backend
|
|
- [x] ValueStrategy 인스턴스 생성 확인
|
|
- [x] QualityStrategy 인스턴스 생성 확인
|
|
- [x] AllValueStrategy 인스턴스 생성 확인
|
|
- [x] STRATEGY_REGISTRY에 3개 전략 등록 확인
|
|
- [x] 공통 함수 import 오류 없음
|
|
- [ ] 실제 백테스트 실행 및 결과 검증 (데이터 필요)
|
|
|
|
### Frontend
|
|
- [x] DataManagement 컴포넌트 렌더링 확인
|
|
- [x] App.tsx import 오류 없음
|
|
- [x] Data 탭 클릭 시 컴포넌트 표시
|
|
- [ ] 데이터 수집 버튼 클릭 시 API 호출 확인 (서버 필요)
|
|
- [ ] Task 상태 폴링 동작 확인 (서버 필요)
|
|
|
|
### 테스트
|
|
- [x] test_value_strategy_interface 통과
|
|
- [x] test_quality_strategy_interface 통과
|
|
- [x] test_all_value_strategy_interface 통과
|
|
- [ ] test_value_select_stocks 통과 (데이터 필요)
|
|
- [ ] test_quality_select_stocks 통과 (데이터 필요)
|
|
- [ ] test_all_value_select_stocks 통과 (데이터 필요)
|
|
|
|
---
|
|
|
|
## 🐛 알려진 이슈
|
|
|
|
### 없음
|
|
현재 알려진 버그나 이슈 없음.
|
|
|
|
---
|
|
|
|
## 📝 다음 단계
|
|
|
|
### Priority 1: 검증
|
|
1. **백테스트 실행**
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/backtest/run \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"name": "Value Strategy Test",
|
|
"strategy_name": "value",
|
|
"start_date": "2021-01-01",
|
|
"end_date": "2024-01-01",
|
|
"initial_capital": 10000000,
|
|
"strategy_config": {"count": 20}
|
|
}'
|
|
```
|
|
|
|
2. **make-quant-py와 결과 비교**
|
|
- 동일 날짜, 동일 count로 선정 종목 비교
|
|
- 순위 계산 로직 일치 여부 확인
|
|
|
|
### Priority 2: Frontend 개선
|
|
1. **성과 비교 차트 추가**
|
|
- 전략별 백테스트 결과 비교 차트
|
|
- Recharts LineChart 활용
|
|
|
|
2. **반응형 레이아웃 개선**
|
|
- 모바일/태블릿/데스크톱 최적화
|
|
- Chrome DevTools로 테스트
|
|
|
|
### Priority 3: 성능 최적화
|
|
1. **Redis 캐싱**
|
|
- 재무제표 데이터 캐싱
|
|
- TTL 설정 (1일)
|
|
|
|
2. **배치 쿼리 최적화**
|
|
- N+1 쿼리 문제 해결
|
|
- JOIN 최적화
|
|
|
|
---
|
|
|
|
## 🎉 완료 요약
|
|
|
|
- ✅ 3개 전략 추가 (Value, Quality, All Value)
|
|
- ✅ 2개 공통 함수 추가 (calculate_value_rank, calculate_quality_factors)
|
|
- ✅ PSR, PCR 계산 로직 추가
|
|
- ✅ MultiFactorStrategy 리팩토링
|
|
- ✅ 6개 테스트 추가
|
|
- ✅ DataManagement 컴포넌트 구현
|
|
- ✅ App.tsx 통합
|
|
- ✅ 문서 업데이트
|
|
|
|
**전략 마이그레이션: 89% 완료 (8/9)**
|
|
**Frontend 데이터 관리: 100% 완료**
|
|
|
|
---
|
|
|
|
**작성일**: 2026-01-30
|
|
**작성자**: Claude Code
|
|
**버전**: v1.1.0
|