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:
2026-06-13 13:20:14 +09:00
commit ee3e799de1
1474 changed files with 176087 additions and 0 deletions
+948
View File
@@ -0,0 +1,948 @@
schema_version: formula_domain.v1
source: C:\Temp\data_feed\spec\13_formula_registry.yaml
domain: cash
formulas:
MARKET_RISK_SCORE_V1:
purpose: 시장 위험 점수 MRS를 0~10으로 계산
inputs:
- field: vix_close
unit: index_points
- field: kospi_close
unit: index_points
- field: kospi_ma20
unit: index_points
- field: usd_krw
unit: KRW_per_USD
- field: usd_jpy_2d_change_pct
unit: percent
- field: credit_stress_status
unit: none
components:
vix_score:
rules:
- if: vix_close < 18
points: 0
- if: 18 <= vix_close <= 25
points: 2
- if: 25 < vix_close <= 35
points: 3
- if: vix_close > 35
points: 4
missing_points: 4
kospi_score:
rules:
- if: kospi_close >= kospi_ma20
points: 0
- if: kospi_close < kospi_ma20
points: 2
missing_points: 2
usd_krw_score:
rules:
- if: usd_krw < 1400
points: 0
- if: 1400 <= usd_krw <= 1450
points: 1
- if: usd_krw > 1450
points: 2
missing_points: 2
usd_jpy_score:
rules:
- if: usd_jpy_2d_change_pct > -1
points: 0
- if: usd_jpy_2d_change_pct <= -1
points: 1
missing_points: 1
credit_score:
rules:
- if: credit_stress_status == 'none'
points: 0
- if: credit_stress_status in ['caution', 'stress', 'DATA_MISSING']
points: 1
missing_points: 1
expression: min(10, vix_score + kospi_score + usd_krw_score + usd_jpy_score +
credit_score)
output:
field: market_risk_score
unit: points_0_10
missing_policy: 컴포넌트별 missing_points를 적용한다.
canonical_ref: spec/risk/market_risk_cash.yaml:risk_control.market_risk_score_based_cash
owner: quant_team
lifecycle_state: active
input_fields:
- vix_close
- kospi_close
- kospi_ma20
- usd_krw
- usd_jpy_2d_change_pct
- credit_stress_status
output_fields:
- market_risk_score
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
TARGET_CASH_PCT_V1:
purpose: MRS 기반 목표 현금비중 계산
inputs:
- field: market_risk_score
unit: points_0_10
- field: cash_floor_regime_min_pct
unit: percent
optional: true
expression: max(5 + (market_risk_score / 10) * 15, cash_floor_regime_min_pct)
output:
field: target_cash_pct
unit: percent
missing_policy: market_risk_score 미산출 시 MARKET_RISK_SCORE_V1을 먼저 실행. 그래도 불가하면
15% 및 신규매수 보류.
canonical_ref: spec/risk/market_risk_cash.yaml:risk_control.market_risk_score_based_cash
owner: quant_team
lifecycle_state: active
input_fields:
- market_risk_score
- cash_floor_regime_min_pct
output_fields:
- target_cash_pct
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
EXPECTED_EDGE_V1:
purpose: 비용과 신뢰도 차감 후 기대우위 계산
inputs:
- field: target_price
unit: KRW_per_share
- field: entry_price
unit: KRW_per_share
- field: stop_price
unit: KRW_per_share
- field: bayesian_confidence_multiplier
unit: ratio
- field: execution_cost_rate
unit: ratio
expression: ((target_price - entry_price) / (entry_price - stop_price)) * bayesian_confidence_multiplier
- execution_cost_rate
output:
field: expected_edge
unit: ratio
validation:
- target_price > entry_price
- entry_price > stop_price
- bayesian_confidence_multiplier >= 0
- execution_cost_rate >= 0
gates:
- if: expected_edge >= 1.5
action: EDGE_PASS
- if: expected_edge < 1.5
action: NO_A_GRADE_NO_IMMEDIATE_BUY
missing_policy: NO_EXPECTED_EDGE. A등급·즉시매수 금지.
canonical_ref: spec/strategy/entry_core.yaml:entry_timing_guardrails.numeric_gates.expected_edge_floor
owner: quant_team
lifecycle_state: active
input_fields:
- target_price
- entry_price
- stop_price
- bayesian_confidence_multiplier
- execution_cost_rate
output_fields:
- expected_edge
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RATIOS_V1:
purpose: 현금비중·매수가능현금·거래 후 현금비중 계산 (D+2 정산현금 단독 기준)
inputs:
- field: settlement_cash
unit: KRW
note: '사용자 지침: D+2 정산현금만이 현금이다.'
- field: reserved_order_amount
unit: KRW
- field: planned_buy_amount
unit: KRW
- field: sell_cash_proceeds_d2
unit: KRW
- field: total_asset
unit: KRW
outputs:
settlement_cash_ratio: settlement_cash / total_asset * 100
total_cash_ratio: settlement_cash / total_asset * 100
buy_power_cash: settlement_cash - reserved_order_amount
buy_power_ratio: (settlement_cash - reserved_order_amount) / total_asset * 100
post_trade_total_cash_ratio: (settlement_cash - planned_buy_amount + sell_cash_proceeds_d2)
/ total_asset * 100
output:
field: cash_ratio_set
unit: object
missing_policy:
settlement_cash: NO_CASH_CHECK
total_asset: NO_CASH_CHECK
reserved_order_amount: 0
sell_cash_proceeds_d2: 0
canonical_ref: spec/risk/portfolio_exposure.yaml:portfolio_exposure_framework.cash_floor.numeric_definitions
owner: quant_team
lifecycle_state: active
input_fields:
- settlement_cash
- reserved_order_amount
- planned_buy_amount
- sell_cash_proceeds_d2
- total_asset
output_fields:
- cash_ratio_set
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
TICK_NORMALIZER_V1:
purpose: '한국 KRX 호가 단위(tick size) 기준으로 지정가를 내림 정규화. HTS에 입력 불가능한 소수점·단위 불일치 가격(예:
144,568원, 25,886원)을 차단. 모든 주문 유형에 floor(내림) 적용 — 매수는 낮은 가격(유리), 손절·익절은 체결 확률
우선.
'
applicable: 모든 지정가(매수·손절·익절·trailing_stop) 출력 전 최종 패스. HS008 강제.
inputs:
- field: raw_price
unit: KRW_per_share
tick_table:
- condition: 0 < raw_price < 2000
tick_size: 1
example: 1,500원 → 1원 단위
- condition: 2000 <= raw_price < 5000
tick_size: 5
example: 3,750원 → 5원 단위
- condition: 5000 <= raw_price < 20000
tick_size: 10
example: 12,345원 → 10원 단위
- condition: 20000 <= raw_price < 50000
tick_size: 50
example: 35,780원 → 50원 단위
- condition: 50000 <= raw_price < 200000
tick_size: 100
example: 144,568원 → 100원 단위
- condition: 200000 <= raw_price < 500000
tick_size: 500
example: 196,800원 → 500원 단위
- condition: raw_price >= 500000
tick_size: 1000
example: 650,000원 → 1,000원 단위
expression: floor(raw_price / tick_size) * tick_size
output:
field: tick_normalized_price
unit: KRW_per_share
examples:
- raw_price: 144568
tick_size: 100
result: 144500
note: 50만 원 미만 → 100원 단위
- raw_price: 25886
tick_size: 50
result: 25850
note: 5만 원 미만 → 50원 단위
- raw_price: 196800
tick_size: 500
result: 196500
note: 20만 원 이상 → 500원 단위
- raw_price: 12340
tick_size: 10
result: 12340
note: 이미 정규화됨 — 변경 없음
missing_policy:
raw_price: NO_TICK_PRICE — 해당 행 INVALID_TICK 처리
prohibition:
- 소수점 포함 가격을 TICK_NORMALIZER_V1 없이 플레이북에 기재 금지
- tick_size 오산출로 500원 단위 종목에 100원 단위 적용 금지
- 정규화 전 raw_price를 HTS 입력 가격으로 제시 금지
canonical_ref: spec/00_execution_contract.yaml:hard_stops.HS008_TICK_NORMALIZED_REQUIRED
version: 2026-05-18_AUDIT_RESPONSE_V2
owner: quant_team
lifecycle_state: active
input_fields:
- raw_price
output_fields:
- tick_normalized_price
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
SATELLITE_FAILURE_GATE_V1:
purpose: '위성 포지션 전체 중 BROKEN/CLOSE_POSITION 비율이 임계값을 초과하면 TRIGGERED를 발동, 위성 전체
신규매수를 자동 차단하고 정리 대상 종목을 cashPreservePlan에 자동 포함한다. 개별 종목 판단의 합산이 아닌 ''집단 실패''
신호로 포트폴리오 전체를 방어한다.
'
applicable: calcApexExecutionHarness_ 내에서 포트폴리오 집계 후 실행.
inputs:
- field: satellite_holdings[].composite_verdict
unit: enum
- field: satellite_holdings[].rs_verdict
unit: enum
- field: satellite_holdings[].ret20d
unit: ratio
optional: true
- field: satellite_holdings[].excess_ret_10d
unit: pct
optional: true
trigger_conditions:
condA: rs_verdict=BROKEN 또는 composite_verdict=CLOSE_POSITION인 위성 수 >= 3
condB: composite_verdict IN [REDUCE_CANDIDATE, EXIT_REVIEW, CLOSE_POSITION]
비율 >= 60%
condC: 위성 평균 20D 수익률 <= -10% AND 평균 초과낙폭 >= 8%
trigger: condA OR condB OR condC
output:
field: sfg_v1
unit: enum [TRIGGERED, CLEAR]
additional_fields:
- sfg_reason: 트리거된 조건 코드
- sfg_broken_count: BROKEN/CLOSE_POSITION 위성 수
- sfg_failure_rate: 실패율 0.0~1.0
sfg_action:
TRIGGERED:
- '모든 위성 신규 BUY: BLOCKED (rag_v1 결과 무관)'
- 'composite_verdict=CLOSE_POSITION 위성: 매도 1순위 지정'
- 'composite_verdict=EXIT_REVIEW 위성: rebound_wait_qty 활성화'
CLEAR: 정상 판단 흐름 유지
clear_conditions:
- sfg_broken_count < 2
- sfg_failure_rate < 0.40
clear_conditions_note: 두 조건 모두 충족 시 TRIGGERED → CLEAR 해제. 1회 반등으로 해제 금지.
ground_truth: harness
llm_allowed: cite_only
prohibition:
- sfg_v1 = TRIGGERED 상태에서 LLM이 '이 위성은 괜찮으니 매수' 판단 금지
- sfg_broken_count를 LLM이 직접 집계 금지 — 하네스 출력값만 인용
- TRIGGERED 해제를 위한 조건 없이 '상황이 나아졌으니' 임의 해제 금지
canonical_ref: spec/13_formula_registry.yaml:COMPOSITE_VERDICT_V1
version: 2026-05-21_CLA_HARNESS_V1
owner: quant_team
lifecycle_state: active
input_fields:
- satellite_holdings[].composite_verdict
- satellite_holdings[].rs_verdict
- satellite_holdings[].ret20d
- satellite_holdings[].excess_ret_10d
output_fields:
- sfg_v1
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_CREATION_PURPOSE_LOCK_V1:
purpose: 현금 만들기 또는 위성 편입 재원 마련만을 이유로 코어/주도주 매도를 생성하지 못하게 한다.
inputs:
- field: composite_verdict
unit: enum
- field: rs_verdict
unit: enum
- field: brt_verdict
unit: enum
- field: excess_drawdown_pctp
unit: pct_points
optional: true
- field: recovery_ratio_20d
unit: ratio
optional: true
- field: sfg_v1
unit: enum
optional: true
valid_sell_reasons:
- composite_verdict IN [REDUCE_CANDIDATE, EXIT_REVIEW, CLOSE_POSITION]
- stop_breach_gate = BREACH
- rs_verdict = BROKEN 또는 brt_verdict = BROKEN
- excess_drawdown_pctp >= 10 AND recovery_ratio_20d < 0.50
- sfg_v1 = TRIGGERED
invalid_sell_reasons:
- cash_floor 미달 단독
- 섹터/클러스터 비중 초과 단독
- 위성 신규 편입 재원 확보
reinvestment_gate: SAQG_V1=ELIGIBLE AND RAG_V1=PASS AND 신규 후보가 매도 후보보다 기대값 우위일
때만 재투자 허용
output:
field: cash_creation_purpose_lock
additional_fields:
- sell_reason_validity
- reinvestment_allowed
ground_truth: harness
llm_allowed: cite_only
version: 2026-05-21_CCPL_V1
owner: quant_team
lifecycle_state: active
input_fields:
- composite_verdict
- rs_verdict
- brt_verdict
- excess_drawdown_pctp
- recovery_ratio_20d
- sfg_v1
output_fields:
- cash_creation_purpose_lock
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RECOVERY_OPTIMIZER_V1:
purpose: '목표 현금 회복액에 최소 주식가치 훼손으로 도달하는 최적 매도 조합을 결정론적 산출. LLM이 "63주+24주+19주+1주"
즉석 계산(HS011 위반) 재발 방지.
'
applicable: CASH_SHORTFALL_V1 및 H2 sell_priority 확정 후 실행.
inputs:
- field: cash_shortfall_target_krw
unit: KRW
note: G1 CASH_SHORTFALL_V1 확정값
- field: cash_shortfall_min_krw
unit: KRW
note: G1 확정값
- field: sell_candidates_json
unit: list
note: H2 regime_rank 순서
- field: immediate_sell_qty
unit: shares
note: K2 산출값 또는 holding_qty
- field: sell_limit_price
unit: KRW_per_share
- field: holding_qty
unit: shares
algorithm:
step1: H2 regime_rank 순서로 expected_krw = immediate_sell_qty × sell_limit_price
누적
step2: cumulative_krw >= cash_shortfall_min_krw 도달 시 중단
step3: shortfall 미달 시 다음 H2 순위 종목 추가
step4: 모두 소진 후 shortfall 잔여 시 EMERGENCY 경보 + emergency_full_sell 재판정
output:
field: cash_recovery_plan_json
schema:
target_krw: KRW
min_krw: KRW
plan_status: enum [SUFFICIENT, PARTIAL, EMERGENCY]
sell_sequence:
- ticker: 종목코드
qty: shares (정수)
limit_price: KRW_per_share
expected_krw: KRW
cumulative_krw: KRW
formula: CASH_RECOVERY_OPTIMIZER_V1
gap_remaining_krw: KRW
ground_truth: harness
llm_allowed: cite_only
prohibition:
- LLM이 '약 N원 필요하니 X주 팔자' 즉석 계산 금지 (HS011)
- sell_sequence[] 배열 임의 재정렬·종목 변경 금지
- plan_status=EMERGENCY이면 K2 emergency_full_sell 재판정 없이 전량매도 지시 금지
canonical_ref: AGENTS.md:Direction A2, G1, G2, H2
version: 2026-05-22_3RD_HARNESS
owner: quant_team
lifecycle_state: active
input_fields:
- cash_shortfall_target_krw
- cash_shortfall_min_krw
- sell_candidates_json
- immediate_sell_qty
- sell_limit_price
- holding_qty
output_fields:
- cash_recovery_plan_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
SELL_WATERFALL_ENGINE_V1:
purpose: '"주식가치를 크게 훼손하지 않으면서 반등 시 수익까지 고려"하는 현금확보 매도 표준화. K2(50/50 분할)를 확장한 4단계
체계. CASH_RECOVERY_OPTIMIZER_V1과 연동.
'
applicable: CASH_RECOVERY_OPTIMIZER_V1 직후. 현금 부족 시 자동 발동.
inputs:
- field: cash_recovery_plan_json
unit: json
note: CASH_RECOVERY_OPTIMIZER_V1 산출
- field: emergency_full_sell
unit: boolean
note: K2 산출값
- field: oversold_gate
unit: enum
note: K2 oversold 판정
- field: rsi14
unit: score
- field: close
unit: KRW_per_share
- field: prev_close
unit: KRW_per_share
- field: atr20
unit: KRW_per_share
stage_logic:
stage_4_emergency:
condition: emergency_full_sell == true
action: H2 최우선 종목 전량 즉시 매도 (시장가 -1tick)
purpose: 마진콜·D+2 결제 위기 방지
stage_1_immediate_trim:
condition: emergency_full_sell == false
action: H2 1순위 50% 즉시 지정가 매도
limit_price_formula: 'prev_close - 0.3 * atr20 (OVERSOLD 구간: prev_close +
0.5 * atr20)'
prerequisite: SELL_PRICE_SANITY_V1 PASS 필수
stage_2_rebound_wait:
condition: stage_1 실행 후
action: 나머지 50% 반등 트리거 대기
rebound_trigger_price: prev_close + 0.5 * atr20 (tick 정규화)
rebound_tp_price: prev_close + 1.0 * atr20 (반등 수익 포착)
deadline: 3 영업일. 초과 시 stage_1 가격으로 자동 전환.
stage_3_cascading_trim:
condition: stage_1+2 후 cash_shortfall 잔여
action: H2 2순위→3순위 순서로 stage_1/2 반복
stop_condition: cumulative_krw >= cash_shortfall_min_krw
output:
field: waterfall_plan_json
schema:
current_stage: int 1~4
stage_label: enum [IMMEDIATE_TRIM, REBOUND_WAIT, CASCADING_TRIM, EMERGENCY_EXIT]
sell_sequence:
- ticker: 종목코드
stage: int
qty: shares
limit_price: KRW_per_share (stage2는 null)
rebound_trigger_price: KRW_per_share (stage2만)
rebound_tp_price: KRW_per_share (stage2만)
deadline: date (stage2만)
expected_immediate_krw: KRW
expected_rebound_tp_krw: KRW
total_recovery_potential_krw: KRW
ground_truth: harness
llm_allowed: cite_only
prohibition:
- waterfall_plan_json.sell_sequence 순서 임의 변경 금지
- stage 건너뜀 금지 (stage1→stage3 직행 금지)
- rebound_wait_qty를 '현금이 급하다'는 이유로 즉시 매도 전환 금지 (K2 연동)
- rebound_tp_price가 있으면 HTS 주문표에 '반등 익절가' 컬럼 필수 표기
canonical_ref: AGENTS.md:Direction C1, K2
version: 2026-05-22_3RD_HARNESS
owner: quant_team
lifecycle_state: active
input_fields:
- cash_recovery_plan_json
- emergency_full_sell
- oversold_gate
- rsi14
- close
- prev_close
- atr20
output_fields:
- waterfall_plan_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
SMART_MONEY_LIQUIDITY_GATE_V1:
purpose: '스마트머니·유동성 차단 게이트. SM001(외국인+기관 동시 순매도→BLOCK_BUY), SM002(5일 평균 거래대금 <
50억→LIMIT_QUANTITY), SM003(RSI14>70 AND flow_credit<0.3→BLOCK_BUY) 결정론 구현. FINAL_JUDGMENT_GATE_V1의
J04 입력.
'
output:
file: Temp/smart_money_liquidity_gate_v1.json
expected_outputs:
- gate
- coverage_pct
- ticker_count
llm_allowed: cite_only
version: 2026-05-28_PHASE6
owner: quant_team
lifecycle_state: active
input_fields: []
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASHFLOW_STABILITY_GATE_V1:
purpose: 영업/잉여 현금흐름 및 회계 위험으로 현금흐름 안정성 게이트를 잠금.
inputs:
- field: operating_cf_krw
unit: KRW
optional: true
- field: free_cf_krw
unit: KRW
optional: true
- field: accrual_ratio_pct
unit: percent
optional: true
output:
field: cashflow_stability_json
llm_allowed: cite_only
version: 2026-05-25_PROPOSAL54
owner: quant_team
lifecycle_state: active
input_fields:
- operating_cf_krw
- free_cf_krw
- accrual_ratio_pct
output_fields:
- cashflow_stability_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
SMART_CASH_RECOVERY_V3:
purpose: '국면별 동적 rebound_factor + 유동성 라벨(DEEP/NORMAL/THIN/FROZEN) 기반으로 선제매도 분할
방식(exec_mode)을 결정론적으로 산출한다. 설거지·지하실 매도를 차단하고 반등 수익을 포착한다. SCRS-V2 V3 확장판.
'
inputs:
- field: value_preservation_scorer_v1_json
unit: json
- field: scrs_v2_json
unit: json
- field: market_regime_state
unit: label
- field: macro_risk_regime
unit: label
- field: ATR20
unit: KRW_per_share
- field: AvgTradeValue_5D_M
unit: KRW_hundred_million
- field: Spread_Pct
unit: percent
output:
field: smart_cash_recovery_v3_json
expected_outputs:
- gate
- regime
- rebound_factor_atr
- distinct_exec_modes
llm_allowed: cite_only
version: 2026-05-27_PHASE1
owner: quant_team
lifecycle_state: active
input_fields:
- value_preservation_scorer_v1_json
- scrs_v2_json
- market_regime_state
- macro_risk_regime
- ATR20
- AvgTradeValue_5D_M
- Spread_Pct
output_fields:
- smart_cash_recovery_v3_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
LIQUIDITY_FLOW_SIGNAL_V1:
purpose: 'AvgTradeValue_20D_M 기반으로 종목별 유동성을 DEEP/NORMAL/THIN/FROZEN으로 분류하고 매도
실행 모드(MARKET_OK/LIMIT_NEAR_BID/TWAP_SPLIT/HOLD)를 결정한다.
'
output:
field: liquidity_flow_signal_v1_json
expected_outputs:
- gate
- label_diversity
- row_count
llm_allowed: cite_only
version: 2026-05-27_PHASE3
owner: quant_team
lifecycle_state: active
input_fields: []
output_fields:
- liquidity_flow_signal_v1_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASHFLOW_QUALITY_SIGNAL_V1:
purpose: 'OCF/FCF 기반 현금흐름 안정성을 결정론적으로 라벨링한다. ROBUST/STABLE/VOLATILE/RISKY/DATA_MISSING
라벨과 ACCOUNTING_RISK 플래그(OCF < NI 의심)를 산출한다.
'
output:
field: cashflow_quality_signal_v1_json
expected_outputs:
- gate
- accounting_risk_count
- data_missing_pct
llm_allowed: cite_only
version: 2026-05-27_PHASE2B
owner: quant_team
lifecycle_state: active
input_fields: []
output_fields:
- cashflow_quality_signal_v1_json
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
EXECUTION_METHOD_LADDER_V1:
purpose: '매도 실행 방식 계약표. NORMAL_LIQUIDITY / HIGH_LIQUIDITY_BREACH / OVERSOLD_REBOUND
/ EMERGENCY 의 order_type, split_count, trigger_rule 을 단일 표로 고정한다. LLM은 ladder를
재해석하지 않고 Temp/sell_execution_timing_lock_v2.json 과 Temp/sell_waterfall_engine_v2.json
을 복사 참조만 한다.
'
inputs:
- field: sell_timing_verdict
unit: enum
- field: sell_waterfall_gate
unit: enum
- field: smart_cash_recovery_gate
unit: enum
output:
file: Temp/execution_method_ladder_v1.json
expected_outputs:
- gate
- market_order_default_count
- emergency_full_sell_without_flag_count
llm_allowed: cite_only
version: 2026-06-06_PHASE6
owner: quant_team
lifecycle_state: active
input_fields:
- sell_timing_verdict
- sell_waterfall_gate
- smart_cash_recovery_gate
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CANONICAL_METRICS_V1:
purpose: 'spec/25_canonical_metrics_registry.yaml에 정의된 논리 지표(cluster_pct, cash_min_required_krw
등)를 단일 정규 원천에서 산출해 Temp/canonical_metrics_v1.json으로 제공. 렌더러가 여러 JSON 객체에서 같은
지표를 중복 읽어 불일치 값을 출력하는 버그를 차단한다(단일 진실원천 아키텍처).
'
input_fields:
- semiconductor_cluster_json.combined_pct
- cash_recovery_display_json.min_required_krw
- trim_plan_to_min_cash_json[].accumulated_krw
- scrs_v2_json.selected_combo[].immediate_qty
- prices_json[].profit_pct
- prices_json[].stop_price
- prices_json[].tp1_price
- proposal_reference_json[].proposed_limit_price_krw
- sell_quantities_json[].sell_qty
expected_outputs:
- metrics.cluster_pct
- metrics.cash_min_required_krw
- metrics.cash_reference_total_krw
- per_ticker.scrs_immediate_qty
- per_ticker.scrs_rebound_qty
- per_ticker.ticker_profit_pct
- per_ticker.ticker_stop_price
- per_ticker.ticker_limit_price
- per_ticker.ticker_base_qty
- per_ticker.ticker_tp1_price
- resolved_count
- unresolved
- gate
llm_allowed: cite_only
version: 2026-05-29_PHASE7
owner: quant_team
lifecycle_state: active
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
REGIME_CASH_UPLIFT_V1:
purpose: '국면별 최소 현금비율 상향값을 산출해 cash floor의 하한을 정한다.
'
inputs:
- field: market_regime
unit: enum
- field: market_risk_score
unit: score_0_10
output:
field: regime_cash_uplift_min_pct
input_fields:
- market_regime
- market_risk_score
expected_outputs:
- regime_cash_uplift_min_pct
llm_allowed: cite_only
version: 2026-05-30_PHASE8
owner: quant_team
lifecycle_state: active
output_fields:
- regime_cash_uplift_min_pct
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_FLOOR_V1:
purpose: '목표 현금비중과 현금 부족액의 최소 기준을 확정한다.
'
inputs:
- field: total_asset
unit: KRW
- field: settlement_cash_d2_krw
unit: KRW
- field: market_risk_score
unit: score_0_10
output:
field: cash_floor_min_pct
input_fields:
- total_asset
- settlement_cash_d2
- market_risk_score
expected_outputs:
- cash_floor_min_pct
- cash_shortfall_min_krw
- cash_shortfall_target_krw
llm_allowed: cite_only
version: 2026-05-30_PHASE8
owner: quant_team
lifecycle_state: active
output_fields:
- cash_floor_min_pct
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RAISE_PARETO_EXECUTOR_V2:
purpose: '현금 확보 매도에서 파레토 최적 종목·수량 조합을 산출한다.
'
input_fields:
- sell_candidates
- cash_shortfall_krw
- value_damage_weights
expected_outputs:
- pareto_sell_plan
- cash_raise_efficiency
llm_allowed: cite_only
version: 2026-06-03_ORPHAN_RECONCILE
owner: quant_team
lifecycle_state: active
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RAISE_VALUE_OPTIMIZER_V3:
purpose: '현금확보 매도의 가치 손실을 최소화하는 종목·수량·실행방식을 결정한다.
'
input_fields:
- sell_candidates
- cash_shortfall_krw
- rebound_potential
expected_outputs:
- optimized_sell_plan
- value_damage_pct
llm_allowed: cite_only
version: 2026-06-03_ORPHAN_RECONCILE
owner: quant_team
lifecycle_state: active
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RECOVERY_OPTIMIZER_V4:
purpose: 'TRIM 우선순위·K2 분할·반등 대기를 결합해 현금 회복 실행 계획을 산출한다.
'
input_fields:
- trim_candidates
- cash_shortfall_krw
- rebound_trigger_prices
expected_outputs:
- cash_recovery_plan
- expected_recovery_krw
llm_allowed: cite_only
version: 2026-06-03_ORPHAN_RECONCILE
owner: quant_team
lifecycle_state: active
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
CASH_RECOVERY_V1:
purpose: '현금 부족액 대비 단순 비례 매도 계획을 산출한다 (V4로 대체됨, 하위호환 유지).
'
input_fields:
- sell_candidates
- cash_shortfall_krw
expected_outputs:
- recovery_sell_qty
- recovery_krw
llm_allowed: cite_only
version: 2026-06-03_ORPHAN_RECONCILE
owner: quant_team
lifecycle_state: active
output_fields: []
missing_policy: DATA_MISSING. 계산 결과를 추정하지 않는다.
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation
SELL_SLIPPAGE_BUDGET_FACTOR_V1:
purpose: 현금확보 매도 ADV 5% 참여율 한도 TWAP 분할 — 설거지·주식가치 훼손 최소화 (Direction VD1)
agents_md_ref: 'Direction VD1: VALUE_DAMAGE_RAW_GATE_V1 — TWAP 참여율 의무'
inputs:
- field: adv20
unit: KRW
note: 20일 평균 거래대금
- field: current_price
unit: KRW_per_share
- field: sell_qty
unit: shares
- field: emergency_full_sell
unit: boolean
optional: true
expression: max_child_qty = floor(adv20 * 0.05 / current_price); n_slices = ceil(sell_qty
/ max_child_qty); participation_rate = sell_qty * current_price / adv20
components:
adv_participation_cap:
value: 0.05
unit: ratio
calibration_status: EXPERT_PRIOR
note: ADV 5% 초과 단일 주문은 시장충격 위험. TWAP 분할 의무.
output:
max_child_qty: floor(ADV20 x 0.05 / price)
n_slices: ceil(qty / max_child_qty)
participation_rate: qty x price / ADV20
twap_required: participation_rate > 0.05
hard_override:
- condition: emergency_full_sell == true
action: TWAP 의무 면제 — 단, hts_limit_price 산출 의무 유지
gate:
INVALID_SELL_NO_LIMIT: hts_limit_price=null AND emergency_full_sell!=true
TWAP_REQUIRED: participation_rate > 0.05 AND emergency_full_sell!=true
missing_policy: adv20 미확인 시 TWAP_REQUIRED 보수적 적용
implementation: tools/build_value_preservation_scorer_v1.py:NF4
calibration_ref: spec/calibration_registry.yaml:NF4 (EXPERT_PRIOR)
version: 2026-06-04_NF4
owner: quant_team
lifecycle_state: active
input_fields:
- adv20
- current_price
- sell_qty
- emergency_full_sell
output_fields: []
golden_cases: []
activation_threshold:
min_t20_sample: 30
retirement_condition: performance_degradation