feat: 리밸런싱 엔진 V1 + GAS 버그 수정 (2026-06-13)
주요 변경: - tools/build_rebalance_engine_v1.py: REBALANCE_ENGINE_V1 신규 * account_snapshot 직접 합산(_build_snap_position_map) → 소수주 분리 행 병합 * 레짐 소스 macro.REGIME_PRELIM 최우선 (GAS 와 동일) - src/gas_adapter_parts/gdf_06_rebalance.gs: runRebalanceSheet_() 신규 * Logger.log / getSpreadsheet_() 로 run_all 연동 수정 - src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs * _mergePositionRecord_(): 소수주 중복 행 합산 신규 * parseInt → parseFloat (qty, availQty) - src/gas_adapter_parts/gdf_01_price_metrics.gs * 미보유 종목 SELL_READY → WATCH_EXIT_SIGNAL - spec/41_release_dag.yaml: build_rebalance_sheet 노드 추가 (step_count 63) - spec/51_formula_lifecycle_registry.yaml: REBALANCE_ENGINE_V1 등록 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
# spec/strategy/predictive_alpha_dialectic_v2.yaml
|
||||
# P1-014: Dialectical Predictive Alpha V2 - Synthesis Decile Calibration
|
||||
#
|
||||
# 목적: thesis-antithesis-synthesis 점수가 forward return과 연결되는지 검증.
|
||||
# 현재 상태: BEARISH_SAFE_PENDING_CALIBRATION
|
||||
# - bearish_buy_violations = 0 (PASS)
|
||||
# - synthesis_decile_monotonicity = INSUFFICIENT_DATA (T+20 < 30)
|
||||
|
||||
meta:
|
||||
formula_id: PREDICTIVE_ALPHA_CALIBRATION_V2
|
||||
version: "2026-06-06"
|
||||
python_tools:
|
||||
- tools/build_predictive_alpha_dialectic_engine_v2.py
|
||||
- tools/validate_predictive_alpha_dialectic_v2.py
|
||||
sources:
|
||||
- Temp/predictive_alpha_engine_v2.json
|
||||
- Temp/proposal_evaluation_history.json
|
||||
- Temp/predictive_alpha_calibration_v2.json
|
||||
|
||||
# -- 정반합 구조 --
|
||||
dialectic_structure:
|
||||
thesis:
|
||||
description: "종목이 상승할 근거 (기술적/펀더멘털/모멘텀 팩터)"
|
||||
max_score: 100
|
||||
antithesis:
|
||||
description: "종목이 하락할 근거 (거시/리스크/센티멘트 팩터)"
|
||||
max_score: 100
|
||||
single_factor_cap: "antithesis_total의 50% 이하"
|
||||
synthesis:
|
||||
formula: "direction_confidence = thesis_score - antithesis_score"
|
||||
verdicts:
|
||||
STRONG_BULLISH: "dc >= 40"
|
||||
BULLISH: "dc >= 20"
|
||||
NEUTRAL: "dc >= -20"
|
||||
HOLD: "dc < -20 (약한 약세 — EXIT 아님)"
|
||||
BEARISH: "dc < -40 (신규 BUY 금지)"
|
||||
|
||||
# -- synthesis_decile_monotonicity 검증 --
|
||||
decile_monotonicity:
|
||||
method: "synthesis_score 5분위별 T+20 평균수익률 단조 증가 확인"
|
||||
required_t20_samples: 30
|
||||
current_t20_live_samples: 0
|
||||
status: INSUFFICIENT_DATA
|
||||
remediation: "T+20 LIVE 표본 30건 축적 후 자동 활성화 (~2026-07-15)"
|
||||
threshold_rule: >
|
||||
높은 decile일수록 기대수익 단조 증가하지 않으면
|
||||
threshold 낮추지 않음 (과최적화 방지)
|
||||
|
||||
# -- BEARISH BUY 차단 --
|
||||
bearish_buy_guard:
|
||||
rule: "synthesis_verdict in BEARISH/STRONG_BEARISH/AVOID → BUY 금지"
|
||||
current_violations: 0
|
||||
status: PASS
|
||||
enforcement: "allow_execution=False when direction_confidence < -40"
|
||||
|
||||
# -- alpha_calibration_gate 판정 로직 --
|
||||
calibration_gate:
|
||||
CALIBRATED:
|
||||
requires: "bearish_violations==0 AND synthesis_decile_monotonicity==PASS"
|
||||
status: NOT_YET
|
||||
BEARISH_SAFE_PENDING_CALIBRATION:
|
||||
requires: "bearish_violations==0 AND T+20<30"
|
||||
status: CURRENT
|
||||
BLOCKED_BEARISH_VIOLATION:
|
||||
requires: "bearish BUY 감지됨"
|
||||
status: GUARD_ACTIVE
|
||||
|
||||
# -- 수락 기준 --
|
||||
acceptance_criteria:
|
||||
alpha_calibration_gate:
|
||||
target: CALIBRATED
|
||||
current: BEARISH_SAFE_PENDING_CALIBRATION
|
||||
status: PENDING_DATA
|
||||
remediation: "T+20 LIVE 표본 축적 (~2026-07-15)"
|
||||
synthesis_decile_monotonicity:
|
||||
target: PASS
|
||||
current: INSUFFICIENT_DATA
|
||||
status: PENDING_DATA
|
||||
bearish_buy_violation_count:
|
||||
target: "==0"
|
||||
current: 0
|
||||
status: PASS
|
||||
|
||||
# -- 금지 사항 --
|
||||
prohibitions:
|
||||
- "BEARISH 판정 종목에 BUY/STRONG_BUY 제안 금지"
|
||||
- "T+20 표본 없이 synthesis_decile_monotonicity=PASS 선언 금지"
|
||||
- "decile monotonicity 미검증 상태에서 threshold 하향 조정 금지"
|
||||
- "antithesis 단일 팩터가 50% 이상 점수 차지 금지"
|
||||
Reference in New Issue
Block a user