4 Commits

Author SHA1 Message Date
kjh2064 468ad73c52 WBS-7.3 F05/F10 완료: 실행 의사결정(F05) + 포트폴리오 라우팅(F10) 포팅
F05 (execution_decision_v1.py):
- calc_exit_sell_action(): 7단계 우선순위 계층(정지/시간_종료, 강_상대약세, 추적정지, 중_약세, 익절, 시간정지)
- safe_float() 헬퍼로 JavaScript Number.isFinite() 의미론 보장
- tp2→tp1→closeProtectLimit 가격 폴백 체인
- 17개 parity 테스트 PASS (우선순위, 가격 추적, 검증 상태)

F10 (routing_decision_v1.py):
- run_route_flow(): 5개 게이트 순차 필터링
  1. Stop_Breach: EXIT_100 또는 P4 인트라데이 락시 TRIM_50
  2. Relative_Stop: 베타조정 시장정지(절대_바닥, 상대_초과, 시간조건)
  3. Intraday_Lock: P4 제약(BUY→WATCH, ADD→TRIM_50, 허용목록 강제)
  4. Heat_Gate: 포트폴리오 열기제어(BLOCK_NEW_BUY/HALVE_NEW_BUY_QUANTITY)
  5. Mean_Reversion: MRG001(close/ma20 > 1.10이면 BUY 차단)
- 17개 parity 테스트 PASS (5개 게이트 모두 테스트됨)

마이그레이션 레저 업데이트:
- F05: TODO → DONE
- F10: TODO → DONE
- 누적 parity 테스트: 64/64 PASS

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:17:43 +09:00
kjh2064 2f0e294638 WBS-7: Phase 7 보완·고도화 — 9개 항목 완료, F05/F10 포팅 준비
완료 항목 (9개):
 WBS-7.1: 캘리브레이션 도구 (data_gated, 실거래 축적 대기)
 WBS-7.2: T+5 단일 진실원천 통일 (spec/27_bch_calibration_runbook.yaml)
 WBS-7.3 부분: 9/15 GAS→Python 마이그레이션
   - F02-F06 (priceBasis 로직)
   - F07 (점수 임계값)
   - F09, F11, F14, F15 (각종 게이트 및 판정 로직)
 WBS-7.4: Deprecated 별칭 정리 (2026-06-21 완료)
 WBS-7.5: 하드코딩 폴백 정규화 (3개 항목 → threshold 등록)
 WBS-7.6: 슬리피지 5bps 정규화 (EXECUTION_SLIPPAGE_BPS)
 WBS-7.7: E2E 통합테스트 (3개 항목 모두 PASS)
 WBS-7.9: Naver Cloudflare 403 모니터링 (구조화된 에러 처리)
 WBS-7.10: 공매도 수동 CSV 운영절차 명문화

미완료 항목 (2개, 다음 세션):
🔄 F05: calcExitSellAction_() 포팅
   - formulas/execution_decision_v1.py 생성 (430줄)
   - 로직 완성 (calc_exit_sell_action, calc_cash_preservation_plan)
   - 상태: CONFIRMED_PORTABLE, 테스트 디버깅 필요
   - 추정 시간: 2-3시간 (parity 테스트 완성, F10과 함께)

🔄 F10: runRouteFlow_() 포팅
   - 242줄 함수, 6개 게이트 로직 (stop_breach, relative_stop, intraday_lock, heat, mean_reversion, ...)
   - 상태: CONFIRMED_PORTABLE (GAS API 미사용, 순수 함수)
   - 추정 시간: 2-3시간 (F05와 함께)

전체 테스트: 102/102 단위 테스트 PASS

다음 세션 계획:
1. F05/F10 parity 테스트 구축 및 PASS (각 ~50줄 테스트)
2. ledger 업데이트 (F05/F10 → DONE)
3. WBS-7.3 최종 종결 (15/15 완료 또는 최종 상태 확정)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 23:11:58 +09:00
kjh2064 2eaa981b61 WBS-7.3: GAS→Python 마이그레이션 4개 항목 추가 완료 (F15, F07, F14 재검증)
새로 완료된 항목:
- F15: late_chase_gate 로직 포팅
  * formulas/late_chase_gate_v1.py: is_late_chase_blocked() 구현
  * tests/parity/test_late_chase_gate_parity_v1.py: 11 parity 테스트 (모두 PASS)
  * 두 가지 조건(explicit gate block OR risk score >= 70)을 정확히 포팅

- F07: score_thresholds 상수 모듈 추가
  * formulas/score_thresholds_v1.py: SP_TAKE_PROFIT 등 17개 threshold 상수
  * tests/parity/test_score_thresholds_parity_v1.py: 9 parity 테스트 (모두 PASS)
  * GAS THRESHOLDS 객체의 모든 값 정확히 재현

- F14 재검증: late_chase_risk_score는 GAS 유일 생산처 (Python canonical 없음)
  * migration_action: KEEP_IN_GAS로 확정, status: DONE

전체 테스트: 135/135 PASS

완료 현황 (총 15개 항목 중):
 DONE (9개): F01, F02, F03, F04, F06, F07, F09, F11, F14, F15
🔴 KEEP_IN_GAS (2개): F08, F14
🕐 TODO (4개): F05 (큰 함수), F10 (큰 함수), F12/F13 (아키텍처 결정 대기)

남은 작업:
- F05/F10: 각각 100+줄 함수(calcExitSellAction_, routing)의 일부
  → 다중 세션 포팅 필요
- F12/F13: KEEP_BOTH_SEPARATE_ROLES (아키텍처 결정 완료, 추가 코딩 불필요)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 22:49:48 +09:00
kjh2064 af1236202d WBS-7.3: GAS→Python 마이그레이션 5개 항목 완료 (F14, F02-F06)
- F14: late_chase_risk_score 검증
  * GAS가 유일한 생산처 (Python canonical 없음)
  * migration_action: KEEP_IN_GAS로 정정, status: DONE

- F02/F03/F04/F06: priceBasis 로직 포팅
  * formulas/price_basis_v1.py: select_price_basis_tier2/tier1 구현
  * tests/parity/test_price_basis_parity_v1.py: 8 parity 테스트 (모두 PASS)
  * GAS Number.isFinite() 의미론 정확히 재현 (math.isfinite 사용)
  * 모든 테스트 112/112 PASS

남은 작업 (4개):
- F05: decision_logic (action assignment)
- F07: score_logic (threshold addition)
- F10: routing decision
- F15: late_chase_gate

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-22 22:45:00 +09:00