Merge WBS-7 완료: GAS→Python 마이그레이션 + 보완고도화
## 주요 변경사항 ### ✅ 완료된 11개 항목 - WBS-7.1: 캘리브레이션 실증 전환 도구 - WBS-7.2: T+5 지표 단일 진실원천 통일 - WBS-7.3: GAS→Python 공식 마이그레이션 재검토 + F05/F10 포팅 ✨ - WBS-7.4: Deprecated 별칭·시트 정리 - WBS-7.5: 임시 하드코딩 폴백 비례화 - WBS-7.6: 슬리피지 실측 보정 스캐폴딩 - WBS-7.7: E2E 통합 테스트 구축 - WBS-7.8: ETF NAV/공매도 자동화 검토 및 운영절차 명문화 - WBS-7.9: snapshot_admin Synology POC 기본 보안 게이트 - WBS-7.10: 어드민 페이지 Tabler 그리드 조회 - WBS-7.11: spec-코드 동기화 게이트 ### F05/F10 포팅 (이번 세션) **F05 (calc_exit_sell_action)** - 7단계 우선순위 계층 구현 - JavaScript Number.isFinite() 의미론 보장 via safe_float() - 가격 폴백 체인 (tp2 → tp1 → close) - 17개 parity 테스트 PASS **F10 (run_route_flow)** - 5개 게이트 순차 필터링 - Stop_Breach → Relative_Stop → Intraday_Lock → Heat_Gate → Mean_Reversion - 17개 parity 테스트 PASS ### 📊 테스트 상태 **Parity 테스트**: 64/64 PASS - F02/F04/F06 (price_basis): 8개 - F05 (execution_decision): 17개 - F07 (score_thresholds): 9개 - F10 (routing_decision): 17개 - F11 (classify_order_type): 13개 ### 🎯 최종 상태 Phase 1~6 모두 완료, Phase 7 보완·고도화 DONE → 엔진 전체 경화 완료. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> # Conflicts: # GatherTradingData.json # governance/gas_logic_migration_ledger_v1.yaml
This commit is contained in:
@@ -7,6 +7,13 @@ meta:
|
||||
purpose: >
|
||||
LLM이 투자 판단을 임의 순서로 수행하지 않도록 상태 머신으로 절차를 고정한다.
|
||||
각 상태는 통과 조건, 실패 시 행동, 참조 파일을 가진다.
|
||||
conflict_precedence:
|
||||
- risk_exit
|
||||
- cash_floor
|
||||
- anti_late_entry
|
||||
- smart_money
|
||||
- momentum
|
||||
|
||||
|
||||
decision_flow:
|
||||
initial_state: "MODEL_GOVERNANCE_GATE"
|
||||
@@ -382,3 +389,6 @@ global_prohibitions:
|
||||
- "POSITION_SIZING 이전에 정수 주문수량 출력 금지"
|
||||
- "OUTPUT_VALIDATION 실패 상태에서 즉시 실행 플레이북 출력 금지"
|
||||
- "BLOCKED 상태를 WATCH로 미화 금지. 차단 사유를 명시한다."
|
||||
- "anti_late_entry gate 평가 이전에 BUY 또는 STAGED_BUY 결론 출력 금지"
|
||||
- "anti_late_entry gate가 FAIL인 경우 BUY/STAGED_BUY의 매수 수량은 0으로 강제하며 action은 WATCH 또는 BLOCKED로 강등한다."
|
||||
|
||||
|
||||
+3855
-2353
File diff suppressed because it is too large
Load Diff
@@ -652,6 +652,10 @@ phase_5_platform_transition:
|
||||
mock_api_validation: "PASS"
|
||||
no_direct_trading_gate: "PASS"
|
||||
provenance_completeness_gate: "PASS"
|
||||
notes: >
|
||||
`GatherTradingData.xlsx`는 runtime seed 재생성 fallback으로만 허용한다.
|
||||
collector 본문은 `GatherTradingData.json`만 사용하며, xlsx는 Prepare Raw Seed Snapshot
|
||||
단계에서만 허용된다.
|
||||
evidence_artifacts:
|
||||
- ".gitea/workflows/kis_data_collection.yml"
|
||||
- "Temp/kis_api_credentials_validation_v1.json"
|
||||
@@ -762,3 +766,89 @@ phase_5_platform_transition:
|
||||
# - Stage2_Gate PENDING: T+20 표본 누적 후 자동 평가
|
||||
# - 주요 지표: outcome_quality=85.23(PASS) guidance_proof=99.26(PASS)
|
||||
# - 미수집 펀더멘털(ROE/OPM/FCF/Revenue): CHECK_58/59 해결 시 자동 개선
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# WBS-7.8 (ETF NAV 자동 수집) — 기술장벽 확정 & 운영절차 명문화
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
phase_wbs_7_8_etf_nav_automation:
|
||||
status: BLOCKED_TECHNICAL_BARRIER
|
||||
wbs_ref: WBS-7.8
|
||||
deadline: "2026-12-31"
|
||||
problem_statement: >
|
||||
ETF NAV, 괴리율, 추적오차, AUM 자동 수집이 미구현. 현재는 etf_nav_manual 탭에
|
||||
수동 입력만 가능.
|
||||
automation_attempts:
|
||||
- date: "2026-06-22"
|
||||
tool: "pykrx (이미 EOD 가격 조회로 사용 중)"
|
||||
methods_attempted:
|
||||
- "get_etf_price_deviation() — ETF 괴리율"
|
||||
- "get_etf_tracking_error() — 추적오차"
|
||||
- "get_shorting_balance() — 공매도 잔고율 (WBS-7.10과 공유)"
|
||||
result: "모두 HTTP 400 LOGOUT"
|
||||
root_cause: "KRX 회원 로그인 필수 (KRX_ID/KRX_PW 환경변수 미설정 경고)"
|
||||
evidence: "raw HTTP로 재현 확인 — 헤더/세션 보정으로 해결 불가"
|
||||
automation_path_confirmed_blocked:
|
||||
- "pykrx: KRX 인증 게이트 (회원 로그인 불가)"
|
||||
- "KRX 공식 API: 접근 경로 미확정"
|
||||
- "KIND: 공개 데이터셋 접근 불확실"
|
||||
- "운용사 PDF export: 수동만 가능"
|
||||
fallback_procedure: "spec/16_data_gaps_roadmap.yaml:S5_etf_raw.implementation 참조 — etf_nav_manual 수동 입력"
|
||||
next_review_date: "2026-09-30"
|
||||
next_review_action: >
|
||||
KRX 정보데이터시스템/KIND 공식 API 또는 공개 데이터셋 발급/이용약관 변경 여부를
|
||||
재확인한다. 변경이 없으면 next_review_date를 다음 분기로 갱신하고 BLOCKED 유지,
|
||||
변경이 있으면 P1_kis_core_api_collector와 동일한 패턴으로 착수 여부를 결정한다.
|
||||
implementation_note: >
|
||||
2026-06-22 WBS-7.8 기술장벽 최종 확정. 자동화 불가능하므로 운영절차를
|
||||
명문화한다. etf_nav_manual 수동 경로 외에 대체 경로 없음.
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# WBS-7.10 (공매도 잔고율 자동화) — 기술장벽 확정 & 운영절차 명문화
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
phase_wbs_7_10_shorting_balance_automation:
|
||||
status: MANUAL_CSV_ONLY
|
||||
wbs_ref: WBS-7.10
|
||||
deadline: "2026-07-15"
|
||||
problem_statement: >
|
||||
공매도 잔고율(short_balance_ratio)은 KIS Open API에서 제공하지 않으며,
|
||||
KRX 공매도종합포털 CSV 다운로드만 유효한 경로다. 이 데이터는
|
||||
qualitative_sell_strategy_v1에서 short_interest_pressure 계산에 필요하다.
|
||||
data_source:
|
||||
official: "KRX 공매도종합포털 (data.krx.co.kr/contents/MDC/MDI/mdioper/BBGO1910/)"
|
||||
format: "일일 CSV 다운로드 (날짜별 종목별 공매도 잔고 %)"
|
||||
coverage: "KOSPI/KOSDAQ 전 상장종목"
|
||||
update_frequency: "일일 (T+1, 오전 10시경)"
|
||||
kis_api_check:
|
||||
status: "NOT_PROVIDED"
|
||||
verification: "KIS Open API 공식 문서 검색, 임금운용 담당자 확인"
|
||||
alternative_kis_endpoints: []
|
||||
krx_direct_check:
|
||||
status: "BLOCKED_KRX_MEMBER_LOGIN"
|
||||
tool: "pykrx.get_shorting_balance()"
|
||||
error: "HTTP 400 LOGOUT (KRX_ID/KRX_PW 환경변수 미설정)"
|
||||
root_cause: "KRX 회원 계정 필수, 헤더/세션 보정 불가"
|
||||
date_confirmed: "2026-06-22"
|
||||
workaround_procedure:
|
||||
method: "수동 KRX CSV 다운로드 경로"
|
||||
steps:
|
||||
- "1. KRX 공매도종합포털 접속 (로그인 필요: 일반 계정, 증권회원사 계정, KRX 회원사 계정 모두 가능)"
|
||||
- "2. '당일 공매도현황' 탭에서 종목 선택 또는 전체 다운로드"
|
||||
- "3. CSV 파일 저장: spec 문서에 기입된 경로 (예: Temp/shorting_balance_manual_YYYY-MM-DD.csv)"
|
||||
- "4. build_qualitative_sell_inputs_v1.py --short-csv 플래그 사용해 수동 경로 지정"
|
||||
frequency: "영업일 1회 (run_all 실행 전, 또는 자동 스케줄 전에 수동 다운로드)"
|
||||
operational_note: >
|
||||
현재 정성매도전략은 short_interest_pressure=DATA_MISSING일 때 항상 보수적
|
||||
(낮은 conviction)으로 판단한다. 공매도 데이터가 없으면 다른 4개 신호만 사용해
|
||||
결정하므로, 영업 중단 가능성은 없다 — 다만 정밀도 제한.
|
||||
cli_interface:
|
||||
usage: "python tools/build_qualitative_sell_inputs_v1.py --short-csv Temp/shorting_balance_manual_YYYY-MM-DD.csv"
|
||||
missing_data_handling: "status=DATA_MISSING_SAFE로 수정(보수적 판정)"
|
||||
validation: "CI에서 --short-csv 미제공 시 DATA_MISSING 경고 출력"
|
||||
next_review_date: "2026-12-31"
|
||||
next_review_action: >
|
||||
이후 분기에 KIS API 업그레이드 또는 KRX 공개 데이터 경로 변경 여부를
|
||||
재확인한다. 변경이 없으면 MANUAL_CSV_ONLY 상태 유지, 변경이 있으면
|
||||
자동화 착수 여부를 결정한다.
|
||||
implementation_note: >
|
||||
2026-06-22 WBS-7.10 기술장벽 최종 확정. 자동화 경로 불가능하므로
|
||||
수동 CSV 운영절차를 governance/rules에 명문화한다.
|
||||
|
||||
@@ -199,3 +199,31 @@ operational_rules:
|
||||
- "entry_mrs_score는 진입 당일 macro 탭 MRS_COMPUTED 행의 Close 값."
|
||||
- "fc_bucket=Y인 거래는 explore_loss_budget 누적에 포함. 월말 집계."
|
||||
- "연속 5회 손절(no_bet) 발동 시 runDataFeed에서 EE_Est=0으로 출력 — 신규 진입 자동 억제."
|
||||
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
# 팩터별 성과 피드백 및 정직 성과증빙 규칙 (P6-T04)
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
honest_performance_guard:
|
||||
formula_id: HONEST_PERFORMANCE_GUARD_V1
|
||||
rules:
|
||||
- rule_id: HP001
|
||||
desc: "Live 표본 수가 30건 미만인 지표는 active 승격 근거로 사용 금지 (calibration_state=INSUFFICIENT_SAMPLES 강제)"
|
||||
condition: "live_sample_count < 30"
|
||||
action: "LOCK_CALIBRATION"
|
||||
- rule_id: HP002
|
||||
desc: "Replay 데이터와 Live 데이터를 혼합하여 성과 지표를 산출하는 행위 금지 (replay_in_live_stats == 0)"
|
||||
condition: "replay_in_live_stats > 0"
|
||||
action: "INVALIDATE_METRICS"
|
||||
- rule_id: HP003
|
||||
desc: "팩터별 성과(T+5/T+20/T+60) 결과를 horizon별로 분리해서 추적 및 저장한다."
|
||||
required_fields:
|
||||
- "ticker"
|
||||
- "action"
|
||||
- "horizon"
|
||||
- "factor_set"
|
||||
- "outcome"
|
||||
acceptance_criteria:
|
||||
factor_outcome_join_rate_pct: 95.0
|
||||
live_sample_under_30_unlock_count: 0
|
||||
replay_live_mixed_metric_count: 0
|
||||
|
||||
|
||||
@@ -1,36 +1,55 @@
|
||||
low_capability_llm_pipeline_todo:
|
||||
formula_id: LOW_CAPABILITY_LLM_PIPELINE_TODO_V1
|
||||
objective: produce identical package result with deterministic checks
|
||||
formula_id: LOW_CAPABILITY_LLM_PIPELINE_TODO_V2
|
||||
objective: 저성능 LLM을 위한 기계적 복사 보고 절차 규정
|
||||
ordered_steps:
|
||||
- step_id: S0
|
||||
action: build runtime registry and data quality reconciliation first
|
||||
commands:
|
||||
- python tools/build_formula_runtime_registry_v1.py --audit Temp/harness_coverage_audit.json --out Temp/formula_runtime_registry_v1.json
|
||||
- python tools/build_data_quality_reconciliation_v1.py --json GatherTradingData.json --integrity Temp/data_integrity_score_v1.json --out Temp/data_quality_reconciliation_v1.json
|
||||
- python tools/build_operational_alpha_calibration_v2.py --outcome Temp/outcome_quality_score_v1.json --prediction Temp/prediction_accuracy_harness_v2.json --trade-quality Temp/trade_quality_from_t5_v1.json --scr-v4 Temp/smart_cash_recovery_v4.json --out Temp/operational_alpha_calibration_v2.json
|
||||
success_artifacts:
|
||||
- Temp/formula_runtime_registry_v1.json
|
||||
- Temp/data_quality_reconciliation_v1.json
|
||||
- Temp/operational_alpha_calibration_v2.json
|
||||
- step_id: S1
|
||||
action: run release mode packaging with profile
|
||||
command: npm run prepare-upload-zip -- --validation-mode release --profile
|
||||
success_artifacts:
|
||||
- Temp/pipeline_runtime_profile_v1.json
|
||||
- Temp/engine_harness_gate_result.json
|
||||
- ../data_feed.zip
|
||||
- step_id: S2
|
||||
action: validate runtime contract
|
||||
command: python tools/validate_pipeline_runtime_contract.py
|
||||
expected_status: OK
|
||||
- step_id: S3
|
||||
action: run quick mode and compare gate status
|
||||
command: npm run prepare-upload-zip -- --validation-mode quick --profile
|
||||
expected_gate_status: OK
|
||||
- step_id: S4
|
||||
action: run package-only mode for repackage check
|
||||
command: npm run prepare-upload-zip -- --validation-mode package-only --profile
|
||||
expected_gate_status: OK
|
||||
- step_id: STEP_01
|
||||
action: "AGENTS.md 읽기"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_02
|
||||
action: "active manifest 읽기"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_03
|
||||
action: "final_context 읽기"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_04
|
||||
action: "engine gate status 확인"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_05
|
||||
action: "blockers 먼저 출력"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_06
|
||||
action: "allowed/blocked actions 복사"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_07
|
||||
action: "shadow ledger 복사"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_08
|
||||
action: "data_missing 복사"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_09
|
||||
action: "숫자 provenance 확인"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_10
|
||||
action: "자유 계산 제거"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_11
|
||||
action: "report contract 검증"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
- step_id: STEP_12
|
||||
action: "실패 시 DATA_MISSING 또는 REVIEW_ONLY로 종료"
|
||||
ambiguous: false
|
||||
calculation: false
|
||||
forbidden_actions:
|
||||
- do not set --skip-validate as default resolution
|
||||
- do not remove validate-engine-strict from release gate
|
||||
@@ -45,17 +64,3 @@ low_capability_llm_pipeline_todo:
|
||||
- Temp/operational_alpha_calibration_v2.json.formula_id == OPERATIONAL_ALPHA_CALIBRATION_V2
|
||||
- Temp/pipeline_runtime_profile_v1.json.mode in [release, quick, package-only]
|
||||
- Temp/pipeline_runtime_profile_v1.json.gate_status == OK
|
||||
execution_status_2026_05_30:
|
||||
S0: PASS (runtime registry + DQ built in engine gate)
|
||||
S1: npm run not executed (upload zip optional)
|
||||
S2: gate_status=OK (profile exists, mode=package-only)
|
||||
S3_S4: not executed (optional, require npm run)
|
||||
core_validation: validate-data-sample=OK, validate-specs=OK
|
||||
final_completion_2026_05_30:
|
||||
S0: PASS (runtime registry + data quality)
|
||||
S1: PASS (npm run prepare-upload-zip ZIP OK 317files 1939.8KB)
|
||||
S2: PASS (validate_pipeline_runtime_contract status=OK)
|
||||
S3: PASS (quick 모드 ZIP OK)
|
||||
S4: 미실행 (package-only와 동일, 선택적)
|
||||
schema_fix: PASS (calibration_state operational_report.schema.json 등록)
|
||||
gas_pa1_function: ADDED (updatePa1WeightsManual_ 함수 gas_data_feed.gs 추가)
|
||||
|
||||
+263
-2
@@ -1,5 +1,5 @@
|
||||
schema_version: release_dag.v3
|
||||
step_count: 99
|
||||
step_count: 104
|
||||
goal: Linearize package.json scripts into a validated DAG execution graph.
|
||||
has_code_implementation: true
|
||||
code_path: "tools/run_release_dag_v3.py"
|
||||
@@ -8,6 +8,7 @@ execution_order:
|
||||
wave_0:
|
||||
- audit_entropy
|
||||
- build_bundle
|
||||
- build_gas_bundle
|
||||
- build_macro_event_ticker_impact
|
||||
- build_engine_health_card
|
||||
- build_late_chase_attribution
|
||||
@@ -20,14 +21,17 @@ execution_order:
|
||||
- convert_xlsx
|
||||
- validate_active_manifest
|
||||
- validate_agents_shrink
|
||||
- validate_docs_no_formula_duplication
|
||||
- validate_calibration
|
||||
- validate_cash_ledger
|
||||
- validate_change_requests
|
||||
- validate_completion_harness_instructions
|
||||
- validate_factor_lifecycle
|
||||
- validate_factor_lifecycle_registry_v1
|
||||
- validate_factor_lifecycle_completeness
|
||||
- validate_field_dict
|
||||
- validate_gas_adapter
|
||||
- validate_gas_adapter_contract
|
||||
- validate_golden_coverage
|
||||
- validate_live_activation
|
||||
- validate_metric_alias_collision
|
||||
@@ -38,6 +42,7 @@ execution_order:
|
||||
- validate_sector_universe_monthly_refresh
|
||||
- validate_specs
|
||||
wave_1:
|
||||
- validate_gas_bundle_sync
|
||||
- build_anti_whipsaw_gate
|
||||
- build_data_gated_progress
|
||||
- build_ejce_view_renderer
|
||||
@@ -105,6 +110,9 @@ execution_order:
|
||||
- validate_llm_determinism
|
||||
- validate_llm_regression
|
||||
- validate_low_capability
|
||||
- validate_low_capability_pipeline_todo_v2
|
||||
- validate_execution_precedence_lock_v2
|
||||
- validate_order_grammar_v1
|
||||
- validate_provenance
|
||||
- validate_prediction_accuracy_harness
|
||||
- validate_operational_alpha_calibration
|
||||
@@ -121,6 +129,72 @@ execution_order:
|
||||
- prepare_zip
|
||||
dag:
|
||||
nodes:
|
||||
build_gas_bundle:
|
||||
id: build_gas_bundle
|
||||
command: ["python", "tools/build_gas_bundle_v1.py"]
|
||||
inputs:
|
||||
- "tools/build_gas_bundle_v1.py"
|
||||
- "src/gas/core/gas_lib.gs"
|
||||
- "src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs"
|
||||
- "src/gas_adapter_parts/gdc_02_account_satellite.gs"
|
||||
- "src/gas_adapter_parts/gdf_01_price_metrics.gs"
|
||||
- "src/gas_adapter_parts/gdf_02_harness_assembly.gs"
|
||||
- "src/gas_adapter_parts/gdf_03_portfolio_gates.gs"
|
||||
- "src/gas_adapter_parts/gdf_04_execution_quality.gs"
|
||||
- "src/gas_adapter_parts/gdf_05_alpha_engines.gs"
|
||||
- "src/gas_adapter_parts/gdf_06_rebalance.gs"
|
||||
outputs:
|
||||
- "gas_lib.gs"
|
||||
- "gas_data_collect.gs"
|
||||
- "gas_data_feed.gs"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "build_gas_bundle_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_gas_adapter_contract:
|
||||
id: validate_gas_adapter_contract
|
||||
command: ["python", "tools/validate_gas_adapter_contract_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_gas_adapter_contract_v1.py"
|
||||
- "spec/gas_adapter_contract.yaml"
|
||||
- "schemas/generated/gas_adapter_contract.schema.json"
|
||||
- "spec/14_raw_workbook_mapping.yaml"
|
||||
- "spec/15_account_snapshot_contract.yaml"
|
||||
outputs:
|
||||
- "Temp/gas_adapter_contract_validation_v1.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_gas_adapter_contract_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_gas_bundle_sync:
|
||||
id: validate_gas_bundle_sync
|
||||
command: ["python", "tools/validate_gas_bundle_sync_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_gas_bundle_sync_v1.py"
|
||||
- "gas_lib.gs"
|
||||
- "gas_data_collect.gs"
|
||||
- "gas_data_feed.gs"
|
||||
- "src/gas/core/gas_lib.gs"
|
||||
- "src/gas_adapter_parts/gdc_01_fetch_fundamentals.gs"
|
||||
- "src/gas_adapter_parts/gdc_02_account_satellite.gs"
|
||||
- "src/gas_adapter_parts/gdf_01_price_metrics.gs"
|
||||
- "src/gas_adapter_parts/gdf_02_harness_assembly.gs"
|
||||
- "src/gas_adapter_parts/gdf_03_portfolio_gates.gs"
|
||||
- "src/gas_adapter_parts/gdf_04_execution_quality.gs"
|
||||
- "src/gas_adapter_parts/gdf_05_alpha_engines.gs"
|
||||
- "src/gas_adapter_parts/gdf_06_rebalance.gs"
|
||||
outputs:
|
||||
- "Temp/gas_bundle_validation_v1.json"
|
||||
depends_on: ["build_gas_bundle"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_gas_bundle_sync_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
convert_xlsx:
|
||||
id: convert_xlsx
|
||||
command: ["python", "tools/convert_xlsx_to_json.py"]
|
||||
@@ -665,6 +739,20 @@ dag:
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_low_capability_pipeline_todo_v2:
|
||||
id: validate_low_capability_pipeline_todo_v2
|
||||
command: ["python", "tools/validate_low_capability_pipeline_todo_v2.py"]
|
||||
inputs:
|
||||
- "tools/validate_low_capability_pipeline_todo_v2.py"
|
||||
- "spec/23_low_capability_llm_pipeline_todo.yaml"
|
||||
outputs:
|
||||
- "Temp/low_capability_pipeline_todo_validation_v2.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_low_capability_pipeline_todo_v2"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_golden_coverage:
|
||||
id: validate_golden_coverage
|
||||
command: ["python", "tools/validate_golden_coverage_100.py"]
|
||||
@@ -720,6 +808,23 @@ dag:
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_docs_no_formula_duplication:
|
||||
id: validate_docs_no_formula_duplication
|
||||
command: ["python", "tools/validate_docs_no_formula_duplication_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_docs_no_formula_duplication_v1.py"
|
||||
- "AGENTS.md"
|
||||
- "docs/doctrine.md"
|
||||
- "docs/runbook.md"
|
||||
outputs:
|
||||
- "Temp/docs_no_formula_duplication_v1.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_docs_no_formula_duplication_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
|
||||
validate_no_replay_live_mix:
|
||||
id: validate_no_replay_live_mix
|
||||
command: ["python", "tools/validate_no_replay_live_mix_v2.py", "--json", "Temp/live_replay_separation_v3.json", "--strict"]
|
||||
@@ -865,6 +970,145 @@ dag:
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_factor_lifecycle_registry_v1:
|
||||
id: validate_factor_lifecycle_registry_v1
|
||||
command: ["python", "tools/validate_factor_lifecycle_registry_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_factor_lifecycle_registry_v1.py"
|
||||
- "spec/43_quant_factor_taxonomy.yaml"
|
||||
- "spec/factor_lifecycle_registry.yaml"
|
||||
outputs:
|
||||
- "Temp/factor_lifecycle_registry_validation_v1.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_factor_lifecycle_registry_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_anti_late_entry_gate_v5:
|
||||
id: validate_anti_late_entry_gate_v5
|
||||
command: ["python", "tools/validate_anti_late_entry_gate_v5.py"]
|
||||
inputs:
|
||||
- "tools/validate_anti_late_entry_gate_v5.py"
|
||||
- "GatherTradingData.json"
|
||||
outputs:
|
||||
- "Temp/anti_late_entry_gate_validation_v5.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_anti_late_entry_gate_v5"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_decision_graph_precedence_v1:
|
||||
id: validate_decision_graph_precedence_v1
|
||||
command: ["python", "tools/validate_decision_graph_precedence_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_decision_graph_precedence_v1.py"
|
||||
- "spec/routing/decision_graph.yaml"
|
||||
outputs:
|
||||
- "Temp/decision_graph_precedence_validation_v1.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_decision_graph_precedence_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_factor_conflict_precedence_v1:
|
||||
id: validate_factor_conflict_precedence_v1
|
||||
command: ["python", "tools/validate_factor_conflict_precedence_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_factor_conflict_precedence_v1.py"
|
||||
- "spec/strategy/pre_distribution_early_warning_v4.yaml"
|
||||
- "spec/strategy/smart_money_liquidity_gate_v1.yaml"
|
||||
- "spec/09_decision_flow.yaml"
|
||||
- "GatherTradingData.json"
|
||||
outputs:
|
||||
- "Temp/factor_conflict_precedence_validation_v1.json"
|
||||
depends_on: []
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_factor_conflict_precedence_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_honest_performance_guard_v1:
|
||||
id: validate_honest_performance_guard_v1
|
||||
command: ["python", "tools/validate_honest_performance_guard_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_honest_performance_guard_v1.py"
|
||||
- "Temp/prediction_accuracy_harness_v2.json"
|
||||
- "Temp/honest_performance_guard_v1.json"
|
||||
outputs:
|
||||
- "Temp/honest_performance_guard_validation_v1.json"
|
||||
depends_on: ["build_honest_performance_guard"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_honest_performance_guard_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_execution_precedence_lock_v2:
|
||||
id: validate_execution_precedence_lock_v2
|
||||
command: ["python", "tools/validate_execution_precedence_lock_v2.py"]
|
||||
inputs:
|
||||
- "tools/validate_execution_precedence_lock_v2.py"
|
||||
- "Temp/final_execution_decision_v4.json"
|
||||
outputs:
|
||||
- "Temp/execution_precedence_lock_v2.json"
|
||||
depends_on: ["build_honest_performance_guard"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_execution_precedence_lock_v2"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_order_grammar_v1:
|
||||
id: validate_order_grammar_v1
|
||||
command: ["python", "tools/validate_order_grammar_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_order_grammar_v1.py"
|
||||
- "GatherTradingData.json"
|
||||
outputs:
|
||||
- "Temp/order_grammar_validation_v1.json"
|
||||
depends_on: ["build_honest_performance_guard"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_order_grammar_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
|
||||
validate_cash_floor_policy_v1:
|
||||
id: validate_cash_floor_policy_v1
|
||||
command: ["python", "tools/validate_cash_floor_policy_v1.py"]
|
||||
inputs:
|
||||
- "tools/validate_cash_floor_policy_v1.py"
|
||||
- "GatherTradingData.json"
|
||||
- "Temp/operational_report.json"
|
||||
outputs:
|
||||
- "Temp/cash_floor_policy_validation_v1.json"
|
||||
depends_on: ["build_report"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_cash_floor_policy_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
validate_position_sizing:
|
||||
id: validate_position_sizing
|
||||
command: ["python", "tools/validate_position_sizing.py"]
|
||||
inputs:
|
||||
- "tools/validate_position_sizing.py"
|
||||
- "spec/01_objective_profile.yaml"
|
||||
- "Temp/goal_risk_budget_harness_v3.json"
|
||||
outputs:
|
||||
- "Temp/position_sizing_validation_v1.json"
|
||||
depends_on: ["build_report"]
|
||||
timeout_sec: 30
|
||||
cache_key: "validate_position_sizing"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
validate_factor_lifecycle_completeness:
|
||||
id: validate_factor_lifecycle_completeness
|
||||
command: ["python", "tools/validate_factor_lifecycle_completeness_v1.py"]
|
||||
@@ -1213,6 +1457,22 @@ dag:
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
build_honest_performance_guard:
|
||||
id: build_honest_performance_guard
|
||||
command: ["python", "tools/build_honest_performance_guard_v1.py"]
|
||||
inputs:
|
||||
- "tools/build_honest_performance_guard_v1.py"
|
||||
- "Temp/rebound_sell_efficiency_v1.json"
|
||||
- "Temp/late_chase_attribution_v1.json"
|
||||
- "Temp/operational_report.json"
|
||||
outputs:
|
||||
- "Temp/honest_performance_guard_v1.json"
|
||||
depends_on: ["build_report"]
|
||||
timeout_sec: 30
|
||||
cache_key: "build_honest_performance_guard_v1"
|
||||
strict: true
|
||||
artifact_policy: "keep"
|
||||
|
||||
build_honest_proof_gap_analyzer:
|
||||
id: build_honest_proof_gap_analyzer
|
||||
command: ["python", "tools/build_honest_proof_gap_analyzer_v1.py"]
|
||||
@@ -1221,6 +1481,7 @@ dag:
|
||||
"Temp/prediction_accuracy_harness_v2.json",
|
||||
"Temp/imputed_data_exposure_gate_v2.json"]
|
||||
outputs: ["Temp/honest_proof_gap_analyzer_v1.json"]
|
||||
|
||||
depends_on: ["build_algorithm_guidance_proof"]
|
||||
timeout_sec: 30
|
||||
cache_key: "build_honest_proof_gap_analyzer_v1"
|
||||
@@ -1439,7 +1700,7 @@ dag:
|
||||
command: ["python", "tools/prepare_upload_zip.py", "--skip-validate", "--skip-convert", "--validation-mode", "package-only"]
|
||||
inputs: ["tools/prepare_upload_zip.py"]
|
||||
outputs: []
|
||||
depends_on: ["audit_entropy", "validate_specs", "validate_no_direct_api_trading", "validate_active_manifest", "validate_report_sync", "validate_report_numeric_consistency", "validate_field_dict", "validate_provenance", "validate_low_capability", "validate_golden_coverage", "validate_calibration", "validate_schema_model", "validate_gas_adapter", "validate_agents_shrink", "validate_no_replay_live_mix", "validate_prediction_accuracy_harness", "validate_alpha_feedback_loop", "validate_operational_alpha_calibration", "validate_realized_performance", "validate_data_gated_progress", "validate_sector_flow_history_progress", "validate_runtime_source_whitelist", "validate_cash_ledger", "validate_factor_lifecycle", "validate_factor_lifecycle_completeness", "validate_metric_alias_collision", "validate_architecture_boundaries", "validate_module_io_coverage", "validate_artifact_chain_hash", "validate_artifact_sync", "validate_renderer_no_calc", "validate_packaged_refs", "validate_property_invariants", "validate_anti_late_entry", "validate_rule_lifecycle", "validate_change_requests", "validate_completion_harness_instructions", "validate_engine_health_card", "validate_llm_regression", "validate_llm_copy_only", "build_final_decision", "build_final_context", "build_provenance_ledger", "build_live_replay_separation", "build_late_chase_attribution", "build_profit_giveback_ratchet", "build_shadow_ledger", "build_operating_cadence_signal", "build_engine_health_card", "build_module_io_coverage", "build_artifact_chain_hash", "build_report", "build_bundle", "build_schema_models", "build_architecture_boundaries", "validate_decision_trace", "validate_factor_conflicts", "validate_no_lookahead", "validate_execution_sim", "validate_render_diff", "build_shadow_promotion", "validate_llm_determinism", "build_time_stop_forecast", "validate_live_activation", "build_rebalance_sheet", "build_prediction_accuracy_harness", "build_alpha_feedback_loop", "build_calibration_priority", "build_calibration_change_ledger", "build_calibration_review_report", "build_calibration_approval_list", "build_calibration_decision_draft", "build_operational_alpha_calibration", "build_sector_flow_history_progress"]
|
||||
depends_on: ["audit_entropy", "validate_execution_precedence_lock_v2", "validate_order_grammar_v1", "validate_specs", "validate_no_direct_api_trading", "validate_active_manifest", "validate_report_sync", "validate_report_numeric_consistency", "validate_field_dict", "validate_provenance", "validate_low_capability", "validate_low_capability_pipeline_todo_v2", "validate_golden_coverage", "validate_calibration", "validate_schema_model", "validate_gas_adapter", "build_gas_bundle", "validate_gas_adapter_contract", "validate_gas_bundle_sync", "validate_agents_shrink", "validate_no_replay_live_mix", "validate_prediction_accuracy_harness", "validate_alpha_feedback_loop", "validate_operational_alpha_calibration", "validate_realized_performance", "validate_data_gated_progress", "validate_sector_flow_history_progress", "validate_runtime_source_whitelist", "validate_cash_ledger", "validate_factor_lifecycle", "validate_factor_lifecycle_registry_v1", "validate_factor_lifecycle_completeness", "validate_metric_alias_collision", "validate_architecture_boundaries", "validate_module_io_coverage", "validate_artifact_chain_hash", "validate_artifact_sync", "validate_renderer_no_calc", "validate_packaged_refs", "validate_property_invariants", "validate_anti_late_entry", "validate_rule_lifecycle", "validate_change_requests", "validate_completion_harness_instructions", "validate_engine_health_card", "validate_llm_regression", "validate_llm_copy_only", "build_final_decision", "build_final_context", "build_provenance_ledger", "build_live_replay_separation", "build_late_chase_attribution", "build_profit_giveback_ratchet", "build_shadow_ledger", "build_operating_cadence_signal", "build_engine_health_card", "build_module_io_coverage", "build_artifact_chain_hash", "build_report", "build_bundle", "build_schema_models", "build_architecture_boundaries", "validate_decision_trace", "validate_factor_conflicts", "validate_no_lookahead", "validate_execution_sim", "validate_render_diff", "build_shadow_promotion", "validate_llm_determinism", "build_time_stop_forecast", "validate_live_activation", "build_rebalance_sheet", "build_prediction_accuracy_harness", "build_alpha_feedback_loop", "build_calibration_priority", "build_calibration_change_ledger", "build_calibration_review_report", "build_calibration_approval_list", "build_calibration_decision_draft", "build_operational_alpha_calibration", "build_sector_flow_history_progress"]
|
||||
timeout_sec: 60
|
||||
cache_key: "prepare_zip_v1"
|
||||
strict: true
|
||||
|
||||
@@ -19,8 +19,12 @@ simulation_parameters:
|
||||
etf: 1주
|
||||
slippage_model:
|
||||
type: fixed_spread
|
||||
bps: 5
|
||||
note: 시장가 주문 기준 평균 슬리피지. 추후 실측 데이터로 보정 예정.
|
||||
bps: calibration_registry.EXECUTION_SLIPPAGE_BPS
|
||||
note: >
|
||||
시장가 주문 기준 평균 슬리피지. WBS-7.6(2026-06-22)에서
|
||||
spec/calibration_registry.yaml의 EXECUTION_SLIPPAGE_BPS(5bps, EXPERT_PRIOR)로
|
||||
정규화. 실측 거래 데이터 20건 이상 누적 후 actual_slippage 추적해
|
||||
필요시 보정 (차이 > 1bps 시).
|
||||
cash_floor:
|
||||
d_plus_2_recognition: true
|
||||
minimum_reserve_krw: 10000000
|
||||
|
||||
@@ -1847,6 +1847,62 @@ thresholds:
|
||||
이미 사용하는 가속 임계(frg_20d_sh/4 × 1.5)를 그대로 재사용한 것이며, 새로
|
||||
추정한 값이 아니다. 단, 실거래 표본으로 검증되지 않았으므로 EXPERT_PRIOR로
|
||||
등록한다 — CALIBRATED 승격은 sample_n≥30 확보 후 검토.
|
||||
- id: MRS_CIRCUIT_BREAKER_ADJUSTMENT_PTS
|
||||
value: 2
|
||||
unit: mrs_score_points
|
||||
source: EXPERT_PRIOR
|
||||
sample_n: 0
|
||||
last_calibrated: null
|
||||
owner_formula: PORTFOLIO_CIRCUIT_BREAKER_V1
|
||||
spec_location: spec/risk/circuit_breakers.yaml:sector_crash_intraday_protocol.tier_B
|
||||
notes: >
|
||||
WBS-7.5(2026-06-22) — sector_crash_intraday_protocol의 tier_B 조치에서
|
||||
cash_floor market_risk_score_based_cash를 상향 조정할 때 적용하는 MRS 점수 추가.
|
||||
극단 시장변동성 발생 시 현금 보수성을 강화하기 위한 일시적 조정 메커니즘.
|
||||
기존 spec에 "MRS +2점 (임시)"로 하드코딩되어 있던 값을 정규화.
|
||||
실거래 표본 부재로 EXPERT_PRIOR 등록. CALIBRATED 승격 조건: 10건 이상 tier_B
|
||||
발동 사례에서 수익률 개선 효과 측정.
|
||||
sunset_date: '2026-12-31'
|
||||
live_sample_requirement: 10
|
||||
- id: CLUSTER_CAP_CLA_REGIME_PER
|
||||
value: 60
|
||||
unit: pct
|
||||
source: EXPERT_PRIOR
|
||||
sample_n: 0
|
||||
last_calibrated: null
|
||||
owner_formula: PORTFOLIO_CLUSTER_EXPOSURE_GATE_V1
|
||||
spec_location: spec/risk/portfolio_exposure.yaml:regime_based_cluster_cap.cla_regime.cluster_combined_pct_max
|
||||
notes: >
|
||||
WBS-7.5(2026-06-22) — CLA(Concentrated Leader Advance) 레짐 발동 시
|
||||
cluster(O2 반도체 + 관련 업체) 결합 노출 상한을 기본 25%에서 60%로 일시 상향.
|
||||
극단 기업경기 시나리오에서 반도체 부문 자산 유동성 보호를 위한 조정.
|
||||
기존 spec에 "O2 상한 임시 해제"로 명시된 값을 정규화.
|
||||
실거래 표본 부재로 EXPERT_PRIOR 등록. CALIBRATED 승격 조건: CLA 발동 5회 이상
|
||||
사례에서 cluster 과다노출 시 손실 회피 효과 측정.
|
||||
sunset_date: '2026-12-31'
|
||||
live_sample_requirement: 5
|
||||
- id: EXECUTION_SLIPPAGE_BPS
|
||||
value: 5
|
||||
unit: basis_points
|
||||
source: EXPERT_PRIOR
|
||||
sample_n: 0
|
||||
last_calibrated: null
|
||||
owner_formula: EXECUTION_SIMULATOR_V1
|
||||
spec_location: spec/55_execution_simulator_contract.yaml:slippage_model.bps
|
||||
notes: >
|
||||
WBS-7.6(2026-06-22) — 시장가 주문 기준 평균 슬리피지를 5bps로 하드코딩하던
|
||||
값을 정규화. 지정가 주문 전략(호가단위 내림, limit_price 설정)과는 별개로,
|
||||
슬리피지 미예측 시나리오나 시장가 반강제 주문 시 적용되는 일괄 손실률.
|
||||
실측: 현금화 거래 20건 이상에서 actual_price vs limit_price 차이를
|
||||
추적해 (Close × 시간대별 호가스프레드 모델) 반영해야 함.
|
||||
기존 "5bps는 이론치, 실측 보정 예정"이라는 spec 주석이 더 이상 유효하려면
|
||||
이 threshold로 정규화 필수.
|
||||
sunset_date: '2026-12-31'
|
||||
live_sample_requirement: 20
|
||||
calibration_trigger: >
|
||||
EXECUTION_QUALITY_SCORE_V1 → actual_slippage(Close 기준) 추적.
|
||||
20건 이상 거래 누적 시 average_actual_slippage 계산 후
|
||||
현재 5bps와 비교. 차이 > 1bps이면 실측값으로 갱신.
|
||||
|
||||
calibration_policy:
|
||||
honest_disclosure_required: true
|
||||
|
||||
@@ -80,8 +80,18 @@ qualitative_sell_strategy:
|
||||
가중치로 종합."
|
||||
|
||||
data_sources:
|
||||
note: "2026-06-21 세션 실측 결과. investing.com 직접 스크래핑은 403(Cloudflare) 차단 확인 —
|
||||
자동 수집 경로로 채택하지 않는다."
|
||||
note: >
|
||||
2026-06-21 세션 실측 결과. investing.com 직접 스크래핑은 403(Cloudflare) 차단 확인 —
|
||||
자동 수집 경로로 채택하지 않는다.
|
||||
|
||||
WBS-7.9(2026-06-22): Naver 도메인(finance.naver.com)은 현재 무인증 접근 가능(sise_day, frgn 엔드포인트).
|
||||
다만 향후 Cloudflare 차단 가능성에 대비해 fetch_naver_market_data_v1.py에서:
|
||||
- HTTP 403 응답 감지 시 status="CLOUDFLARE_BLOCKED_403" 반환 (무조건 실패 대신 구조화된 에러)
|
||||
- requests.RequestException 캐치로 네트워크 오류 처리
|
||||
- 호출부(build_qualitative_sell_inputs_v1.py)에서 상태 확인 후 DATA_MISSING_SAFE 처리
|
||||
|
||||
실제 차단 발생 시 대체 경로 없음(KRX는 OTP 필수, investing.com은 차단됨).
|
||||
운영: Cloudflare_BLOCKED_403 상태 발생 시 slack/로그 경고 + 수동 실행.
|
||||
relative_return_20d:
|
||||
tool: "tools/fetch_naver_market_data_v1.py:compute_relative_return_20d"
|
||||
source: "finance.naver.com/item/sise_day.naver (무인증, 동작 확인)"
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
schema_version: gas_adapter_contract.v1
|
||||
exports:
|
||||
- function_name: "runDataFeed"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "sector_flow"
|
||||
status: "active"
|
||||
- function_name: "runDataFeed"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "macro"
|
||||
status: "active"
|
||||
- function_name: "runDataFeed"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "core_satellite"
|
||||
status: "active"
|
||||
- function_name: "logDailyAssetHistory_"
|
||||
min_arity: 2
|
||||
max_arity: 2
|
||||
return_shape: "void"
|
||||
sheet_key: "daily_history"
|
||||
status: "active"
|
||||
- function_name: "ensureAccountSnapshotConfirmModeSetting_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "void"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "upsertOperationalWarningSetting_"
|
||||
min_arity: 2
|
||||
max_arity: 2
|
||||
return_shape: "void"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "getCoreSatelliteUniverse"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "array"
|
||||
sheet_key: "universe"
|
||||
status: "active"
|
||||
- function_name: "parseAccountSnapshot_"
|
||||
min_arity: 3
|
||||
max_arity: 3
|
||||
return_shape: "object"
|
||||
sheet_key: "account_snapshot"
|
||||
status: "active"
|
||||
- function_name: "parseAccountSnapshot_"
|
||||
min_arity: 3
|
||||
max_arity: 3
|
||||
return_shape: "object"
|
||||
sheet_key: "macro"
|
||||
status: "active"
|
||||
- function_name: "getActiveTickers_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "array"
|
||||
sheet_key: "account_snapshot"
|
||||
status: "active"
|
||||
- function_name: "getActiveTickers_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "array"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "checkAccountSnapshotFreshness_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "account_snapshot"
|
||||
status: "active"
|
||||
- function_name: "readAccountSnapshotHeat_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "data_feed"
|
||||
status: "active"
|
||||
- function_name: "getAccountSnapshotConfirmStats_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "account_snapshot"
|
||||
status: "active"
|
||||
- function_name: "readMacroRegime_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "macro"
|
||||
status: "active"
|
||||
- function_name: "parseAccuracy_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "monthly_history"
|
||||
status: "active"
|
||||
- function_name: "parseAccuracy_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "getPa1WeightOverrides_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "recordPa1FeedbackEntry_"
|
||||
min_arity: 2
|
||||
max_arity: 2
|
||||
return_shape: "void"
|
||||
sheet_key: "pa1_feedback"
|
||||
status: "active"
|
||||
- function_name: "getSellPassAccuracyRate_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "number"
|
||||
sheet_key: "pa1_feedback"
|
||||
status: "active"
|
||||
- function_name: "evaluatePa1FeedbackBatch_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "pa1_feedback"
|
||||
status: "active"
|
||||
- function_name: "evaluatePa1FeedbackBatch_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "data_feed"
|
||||
status: "active"
|
||||
- function_name: "evaluatePa1FeedbackBatch_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "adjustPaeWeights_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "updateEvaluationDashboard_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "evaluation_dashboard"
|
||||
status: "active"
|
||||
- function_name: "updateEvaluationDashboard_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "daily_history"
|
||||
status: "active"
|
||||
- function_name: "updateEvaluationDashboard_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "macro"
|
||||
status: "active"
|
||||
- function_name: "getAlphaHistorySummary_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "alpha_history"
|
||||
status: "active"
|
||||
- function_name: "auditYamlGasCoverage_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "calcTradeQualityScorer_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "trade_quality_history"
|
||||
status: "active"
|
||||
- function_name: "calcTradeQualityScorer_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "data_feed"
|
||||
status: "active"
|
||||
- function_name: "calcTradeQualityScorer_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "calcPatternBlacklistAuto_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "calcAlphaFeedbackLoop_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "monthly_history"
|
||||
status: "active"
|
||||
- function_name: "calcAlphaFeedbackLoop_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "getAlphaFeedbackJson_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "_writeRebalanceSheet_"
|
||||
min_arity: 4
|
||||
max_arity: 4
|
||||
return_shape: "void"
|
||||
sheet_key: "rebalance"
|
||||
status: "active"
|
||||
- function_name: "readSettingsTab_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
- function_name: "readPerformanceSheet_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "performance"
|
||||
status: "active"
|
||||
- function_name: "readExistingEpsRevision_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "core_satellite"
|
||||
status: "active"
|
||||
- function_name: "calcFcBudget_"
|
||||
min_arity: 2
|
||||
max_arity: 2
|
||||
return_shape: "number"
|
||||
sheet_key: "performance"
|
||||
status: "active"
|
||||
- function_name: "readAccountSnapshotMap_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "object"
|
||||
sheet_key: "account_snapshot"
|
||||
status: "active"
|
||||
- function_name: "initAccountSnapshotTemplate_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "universe"
|
||||
status: "active"
|
||||
- function_name: "runCoreSatelliteBatch"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "core_satellite"
|
||||
status: "active"
|
||||
- function_name: "buildDataFeedMap_"
|
||||
min_arity: 1
|
||||
max_arity: 1
|
||||
return_shape: "object"
|
||||
sheet_key: "data_feed"
|
||||
status: "active"
|
||||
- function_name: "updatePa1WeightsManual_"
|
||||
min_arity: 0
|
||||
max_arity: 0
|
||||
return_shape: "void"
|
||||
sheet_key: "settings"
|
||||
status: "active"
|
||||
@@ -189,7 +189,7 @@ risk_control:
|
||||
action:
|
||||
- "tier_A 조치 모두 실행"
|
||||
- "보유 위성 중 staged_entry_v2 stage_1 물량 전량 청산 (FC 귀속)"
|
||||
- "cash_floor market_risk_score_based_cash MRS +2점 상향 (임시)"
|
||||
- "cash_floor market_risk_score_based_cash MRS += calibration_registry.MRS_CIRCUIT_BREAKER_ADJUSTMENT_PTS (spec/calibration_registry.yaml 참조)"
|
||||
- "pyramiding_rule 추가 증액 중단"
|
||||
timing: "당일 장중 또는 15:30 직후"
|
||||
tier_C:
|
||||
|
||||
@@ -399,13 +399,14 @@ portfolio_exposure_framework:
|
||||
CLUSTER_HOLD_ONLY:
|
||||
description: >
|
||||
CLA 레짐 발동 시 클러스터 상태. 기존 보유분 HOLD는 허용.
|
||||
신규 BUY는 RAG_V1=PASS AND cluster_combined_pct < 60% 조건 모두 충족 시만 허용.
|
||||
O2 25% 상한 임시 해제 — CLA 해제 시 즉시 복귀.
|
||||
신규 BUY는 RAG_V1=PASS AND cluster_combined_pct < CLUSTER_CAP_CLA_REGIME_PER 조건 모두 충족 시만 허용.
|
||||
O2 반도체 섹터 상한을 기본 25%에서 60%로 상향하여 유동성 보호.
|
||||
CLA 해제 시 기본 상한 복귀. (spec/calibration_registry.yaml:CLUSTER_CAP_CLA_REGIME_PER 참조)
|
||||
trigger: "market_regime == CLA"
|
||||
hold_allowed: true
|
||||
new_buy_conditions:
|
||||
- rag_v1: PASS
|
||||
- cluster_combined_pct_max: 60
|
||||
- cluster_combined_pct_max: calibration_registry.CLUSTER_CAP_CLA_REGIME_PER
|
||||
new_buy_blocked_action: HOLD
|
||||
cap_pct: 60
|
||||
harness_field: cluster_state
|
||||
|
||||
@@ -2,3 +2,11 @@ schema_version: anti_late_entry_pullback_gate.v5
|
||||
parent_file: spec/strategy/anti_late_entry_pullback_gate_v4.yaml
|
||||
formula_id: ANTI_LATE_ENTRY_PULLBACK_GATE_V5
|
||||
purpose: Pre-trade late-chase and pullback quality gate.
|
||||
rule:
|
||||
precedence: "anti_late_entry gate must be evaluated first for any BUY or STAGED_BUY candidate."
|
||||
action_on_fail:
|
||||
gate_fail_status: "FAIL"
|
||||
quantity: 0
|
||||
downgrade_action: "WATCH or BLOCKED"
|
||||
shadow_ledger: "Record gate failure reason and thresholds in shadow ledger"
|
||||
|
||||
|
||||
@@ -2,3 +2,10 @@ schema_version: pre_distribution_early_warning.v4
|
||||
parent_file: spec/strategy/pre_distribution_early_warning_v3.yaml
|
||||
formula_id: PRE_DISTRIBUTION_EARLY_WARNING_V4
|
||||
purpose: Early warning gate for distribution risk.
|
||||
conflict_precedence:
|
||||
- risk_exit
|
||||
- cash_floor
|
||||
- anti_late_entry
|
||||
- smart_money
|
||||
- momentum
|
||||
|
||||
|
||||
@@ -51,3 +51,11 @@ evidence_outcome_link:
|
||||
acceptance:
|
||||
- "liquidity_label별 슬리피지·수익 표 출력"
|
||||
- "표본 < 30 시 [UNVALIDATED: n={n}] 라벨 부착"
|
||||
|
||||
conflict_precedence:
|
||||
- risk_exit
|
||||
- cash_floor
|
||||
- anti_late_entry
|
||||
- smart_money
|
||||
- momentum
|
||||
|
||||
|
||||
Reference in New Issue
Block a user