Skip to content

fix: 휴장일 fallback 대체공휴일·연말휴장 보강 — 60일 커버리지 분모 보호 - #416

Merged
easygap merged 1 commit into
mainfrom
fix/holidays-substitute-days
Jun 11, 2026
Merged

fix: 휴장일 fallback 대체공휴일·연말휴장 보강 — 60일 커버리지 분모 보호#416
easygap merged 1 commit into
mainfrom
fix/holidays-substitute-days

Conversation

@easygap

@easygap easygap commented Jun 10, 2026

Copy link
Copy Markdown
Owner

문제 (트랙레코드 무결성 — 15번째 감사 라운드)

거래일 판정(TradingHours)은 이제 커버리지 분모·NAV 스냅샷 귀속(가격 기준일)·평가 진행일의 기반이다. 그런데 pykrx 실패 환경(현 운영 환경 — 실측 확인)에서 쓰이는 fallback 휴장일 셋에 대체공휴일이 전부 누락돼 있었다.

영향: 대체휴일(예: 2026-08-17 광복절 대체, 2026-09-28 추석 대체 — 증거 구간 내)이 거래일로 계산되어, 그날 사이클이 없는 것이 커버리지 손실로 잡히고(분모 부풀림 → 95% 기준 부당 하락), 휴일 보충 실행의 스냅샷 귀속일도 어긋난다.

수정

  • FALLBACK_BY_YEAR 보강(2025~2027): 대체공휴일 규정(주말 겹침 시 다음 평일 — 신정·현충일은 미적용) + KRX 연말 휴장(12/31) + 2025-01-27 임시공휴일. 2026년 +6일
  • trading_hours의 별도 하드코딩 fallback을 단일 소스화(updater 셋 합집합) — 한쪽만 고쳐지는 드리프트 방지
  • config/holidays.yaml 재생성(29→41일)

검증

  • 실측: is_trading_day(2026-08-17/09-28/12-31) → 휴장일 정확 판정
  • 회귀 테스트 2건(대체공휴일 6건 + 현충일 미적용 확인 + 단일 소스 동기)
  • 기존 어댑터 테스트의 60영업일 만기 기대가 정확히 1영업일(5/25 반영) 밀림 — 실패 자체가 수정 정당성의 증거
  • 전체 1492 passed

거래일 판정(TradingHours)이 이제 트랙레코드 커버리지 분모·NAV 스냅샷 귀속
(가격 기준일)·평가 진행일 계산의 기반인데, pykrx 실패 환경(현 운영 환경 포함)
에서 쓰이는 fallback 휴장일 셋에 대체공휴일이 전부 누락돼 있었다.

누락되면: 대체휴일(예: 2026-08-17 광복절 대체)이 거래일로 계산돼 그날 사이클이
없는 것이 커버리지 손실로 잡히고(60일 분모 부풀림), 휴일 보충 실행의 스냅샷
귀속일도 어긋난다. 증거 구간(2026-06~09)에만 9/28(추석 대체) 등 직접 영향.

- holidays_updater.FALLBACK_BY_YEAR 보강(2025~2027): 대체공휴일 규정(설·추석
  연휴, 3·1절, 광복절, 개천절, 한글날, 어린이날, 부처님오신날, 성탄절 — 주말
  겹침 시 다음 평일; 신정·현충일 미적용) + KRX 연말 휴장(12/31) + 2025-01-27
  임시공휴일. 2026: +6일(03-02, 05-25, 08-17, 09-28, 10-05, 12-31).
- trading_hours.KR_HOLIDAYS_FALLBACK를 별도 하드코딩에서 FALLBACK_BY_YEAR
  합집합으로 단일 소스화(한쪽만 고쳐지는 드리프트 방지).
- config/holidays.yaml 재생성(29→41일).
- 회귀 테스트: 2026 대체공휴일 6건 비거래일 판정 + 현충일(대체 미적용) 다음
  월요일은 거래일 + 두 fallback 단일 소스 동기 검증.
- 기존 target_weight 어댑터 테스트의 60영업일 만기 기대를 1영업일(5/25 반영)
  조정 — 실패가 곧 수정 정당성의 증거였다.

전체 1492 passed.
@easygap
easygap merged commit d74eff4 into main Jun 11, 2026
1 check passed
easygap added a commit that referenced this pull request Jul 6, 2026
fix: 휴장일 fallback 대체공휴일·연말휴장 보강 — 60일 커버리지 분모 보호
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant