penti/docs/CHANGELOG_2026-01-30.md

11 KiB

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

  • 임포트 추가:

    from app.strategies.factors.value import ValueStrategy
    from app.strategies.factors.quality import QualityStrategy
    from app.strategies.factors.all_value import AllValueStrategy
    
  • 레지스트리 등록:

    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

  • 임포트 추가:

    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

  • 임포트 추가:

    import DataManagement from './components/data/DataManagement';
    
  • Data 탭 수정:

    {activeTab === 'data' && (
      <div className="px-4 py-6 sm:px-0">
        <DataManagement />
      </div>
    )}
    
  • 변경 전: API 엔드포인트 목록만 표시

  • 변경 후: 완전한 데이터 관리 UI


문서화 (2개 파일 수정)

1. README.md 업데이트

파일: README.md

  • 전략 목록 확장:

    - 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
    
  • 최근 업데이트 섹션 추가:

    ## ✅ 최근 업데이트 (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

  • ValueStrategy 인스턴스 생성 확인
  • QualityStrategy 인스턴스 생성 확인
  • AllValueStrategy 인스턴스 생성 확인
  • STRATEGY_REGISTRY에 3개 전략 등록 확인
  • 공통 함수 import 오류 없음
  • 실제 백테스트 실행 및 결과 검증 (데이터 필요)

Frontend

  • DataManagement 컴포넌트 렌더링 확인
  • App.tsx import 오류 없음
  • Data 탭 클릭 시 컴포넌트 표시
  • 데이터 수집 버튼 클릭 시 API 호출 확인 (서버 필요)
  • Task 상태 폴링 동작 확인 (서버 필요)

테스트

  • test_value_strategy_interface 통과
  • test_quality_strategy_interface 통과
  • test_all_value_strategy_interface 통과
  • test_value_select_stocks 통과 (데이터 필요)
  • test_quality_select_stocks 통과 (데이터 필요)
  • test_all_value_select_stocks 통과 (데이터 필요)

🐛 알려진 이슈

없음

현재 알려진 버그나 이슈 없음.


📝 다음 단계

Priority 1: 검증

  1. 백테스트 실행

    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