Merge pull request 'WBS-8 & WBS-9 병렬 진행 — 전체 계획 및 주요 문서 완성' (#76) from feature/wbs-8-9-parallel-planning into main

Reviewed-on: http://kjh2064.synology.me:8418/kjh2064/myfinance/pulls/76
This commit is contained in:
2026-06-22 23:56:27 +09:00
6 changed files with 1346 additions and 1 deletions
+131
View File
@@ -4312,3 +4312,134 @@ normalization_rules:
- quantity
- flow_rows
transform: must be integer; decimal shares are invalid except final floor in sizing
# WBS-9.3: 데이터 품질 정책 — NULL 처리 및 자동 충전 규칙
data_quality_policy:
version: "2026-06-22"
purpose: "NULL 컬럼별 충전 가능성, 우선순위, 추정 금지 정책을 명시"
null_handling_fields:
# 우선순위 1 (필수, 자동 충전 가능)
atr20:
chargeability: FILLABLE
priority: 1
source: ATR(close, 20) 자동 계산
estimation_forbidden: false
fallback: 입력 거래 제외
rsi_14:
chargeability: FILLABLE
priority: 1
source: RSI(close, 14) 자동 계산
estimation_forbidden: false
fallback: 입력 거래 제외
velocity_1d:
chargeability: FILLABLE
priority: 1
source: (close - previous_close) / previous_close * 100
estimation_forbidden: false
fallback: 입력 거래 제외
# 우선순위 2 (권장, 추정 가능)
stop_price:
chargeability: FILLABLE
priority: 2
source: ATR(close, 20) * 2.0 (기본값)
estimation_forbidden: false
estimation_rule: ATR20 * atr_multiplier
fallback: 입력 거래 제외
target_price:
chargeability: FILLABLE
priority: 2
source: consensus_target 또는 ATR 기반
estimation_forbidden: false
estimation_rule: close * (1 + expectancy_pct)
fallback: 입력 거래 제외
# 우선순위 3 (선택, 추정 불가)
rsi_15m:
chargeability: NOT_FILLABLE
priority: 3
source: 인트라데이 데이터 필요 (HTS 수동 기록)
estimation_forbidden: true
fallback: NA로 처리, 계산 제외
bayesian_confidence_multiplier:
chargeability: COMPUTED
priority: 3
source: spec/17_performance_contract.yaml 기준 자동 계산
estimation_forbidden: true
fallback: 0.5 기본값 (데이터 부족 신호)
kelly_brake_multiplier:
chargeability: COMPUTED
priority: 3
source: 성과 피드백 레이어에서 자동 계산
estimation_forbidden: true
fallback: 1.0 (제약 없음)
ci_gate_rules:
- gate_id: DATA_QUALITY_NULL_CHECK
description: 필수 필드(priority 1) NULL 검증
trigger: GAS runDataFeed() 또는 snapshot_admin API 호출 시
required_fields:
- close_price
- ticker
- entry_price
- stop_price
- velocity_1d
action_on_fail: ERROR 로그 기록, 해당 거래 SKIP
acceptance_criteria: "100% 필드 충전"
- gate_id: DATA_QUALITY_FILLABLE_CHECK
description: 권장 필드(priority 2) 자동 충전
trigger: 데이터 로드 직후
fillable_fields:
- atr20
- rsi_14
- velocity_5d
- stop_price
- target_price
action_on_success: 자동 계산값 삽입
action_on_fail: WARNING 로그, 기존값 유지
acceptance_criteria: ">= 95% 자동 충전율"
- gate_id: DATA_QUALITY_ESTIMATION_BLOCK
description: 추정 금지 필드 검증
trigger: 계산 엔진 전 1회
forbidden_estimation_fields:
- rsi_15m
- kelly_brake_multiplier
- proposal_stop_ladder
action_on_fail: DATA_MISSING 처리, 계산 제외
acceptance_criteria: "0% 추정율"
automated_fill_procedures:
- procedure_id: FILL_ATR20
field: atr20
condition: "atr20 IS NULL AND close_price IS NOT NULL"
implementation: "src/quant_engine/auto_fill_atr20_v1.py"
execution_frequency: "on_data_load"
- procedure_id: FILL_RSI14
field: rsi_14
condition: "rsi_14 IS NULL AND close_price IS NOT NULL"
implementation: "src/quant_engine/auto_fill_rsi14_v1.py"
execution_frequency: "on_data_load"
- procedure_id: FILL_VELOCITY_1D
field: velocity_1d
condition: "velocity_1d IS NULL AND (close_price AND previous_close_price) IS NOT NULL"
implementation: "src/quant_engine/auto_fill_velocity_v1.py"
execution_frequency: "on_data_load"
- procedure_id: FILL_STOP_PRICE
field: stop_price
condition: "stop_price IS NULL AND atr20 IS NOT NULL"
implementation: "src/quant_engine/auto_fill_stop_price_v1.py"
execution_frequency: "on_data_load"
parameters:
multiplier_default: 2.0
fallback_pct: -5.0