feat: Sprint-3 (펀더멘털 피드 완성, MDD 모니터링 구축, Gitea CI/CD 파이프라인 추가) (2026-06-13)
주요 변경 사항: - tools/ingest_fundamental_raw.py 수정: * yfinance 패키지를 활용한 Yahoo Finance 펀더멘털 연동 파이프라인 전면 개편 * FCF, OCF 및 순부채(totalDebt - totalCash) 자동 폴백 계산을 구현하여 40개 NULL 컬럼 수집 완성 - src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs 수정: * 일별 자산 및 MDD를 기록하는 logDailyAssetHistory_ 함수 구현 및 runDataFeed() 연동 - tools/build_realized_performance_v1.py 수정: * daily_history 탭으로부터 MDD_realized를 실시간 파싱하여 insufficient_data 제거 - .gitea/workflows/ci.yml 추가: * Gitea Actions 용 Spec 검증, 릴리즈 게이트 및 번들 빌드 자동화 파이프라인 구축 - docs/ROADMAP_WBS.md 수정: * WBS-2.1, WBS-3.4, WBS-5.1 과업의 체크박스를 완료[x] 상태로 갱신 - 검증 결과: npm run full-gate (55단계 릴리즈 게이트) PASS 검증 완료 Co-Authored-By: Antigravity AI <noreply@google.com>
This commit is contained in:
@@ -231,7 +231,18 @@ def main() -> int:
|
||||
t20_stats = _stats_block(t20_replay_returns, 20, "T+20_replay",
|
||||
estimated=True, source="REPLAY_FROM_KRX_EOD (estimated=true)")
|
||||
|
||||
# ── 현재 포트폴리오 MDD 시나리오 ─────────────────────────────────────────
|
||||
# ── 현재 포트폴리오 MDD 시나리오 및 daily_history 기반 실현 MDD 산출 ───────
|
||||
daily_hist = payload.get("data", {}).get("daily_history") or []
|
||||
realized_max_mdd = None
|
||||
if daily_hist:
|
||||
mdd_values = [
|
||||
_f(r.get("MDD_Pct") or r.get("mdd_pct"))
|
||||
for r in daily_hist
|
||||
if _f(r.get("MDD_Pct") or r.get("mdd_pct")) is not None
|
||||
]
|
||||
if mdd_values:
|
||||
realized_max_mdd = round(max(mdd_values), 2)
|
||||
|
||||
peak = _f(harness.get("portfolio_peak_krw"))
|
||||
total = _f(harness.get("total_asset_krw"))
|
||||
current_dd = {
|
||||
@@ -241,6 +252,7 @@ def main() -> int:
|
||||
round((peak - total) / peak * 100, 2) if peak and total and peak > 0
|
||||
else 0.0
|
||||
),
|
||||
"realized_max_drawdown_pct": realized_max_mdd if realized_max_mdd is not None else INSUF,
|
||||
"worst_case_scenario": _worst_case_mdd(harness),
|
||||
}
|
||||
|
||||
@@ -248,11 +260,12 @@ def main() -> int:
|
||||
insufficient = {
|
||||
"CAGR_realized_1y": INSUF,
|
||||
"sharpe_realized_1y": INSUF,
|
||||
"MDD_realized": INSUF,
|
||||
"MDD_realized": realized_max_mdd if realized_max_mdd is not None else INSUF,
|
||||
"win_rate_realized_closed_trades": INSUF,
|
||||
"profit_factor": INSUF,
|
||||
"slippage_impact": INSUF,
|
||||
"transaction_cost_impact": INSUF,
|
||||
|
||||
"in_sample_vs_oos_gap": INSUF,
|
||||
"reason": "1년 이상 청산 완료 거래 이력 없음 — backdata MAE/MFE/pnl 전 행 공란",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user