meta: title: "은퇴자산포트폴리오 — LLM 실행용 필드 사전" parent_file: "RetirementAssetPortfolio.yaml" version: "2026-05-20-HARNESS_V4" language: "ko-KR" timezone: "Asia/Seoul" role: "canonical" purpose: > LLM이 동일 필드를 여러 이름으로 해석하지 않도록 canonical field, alias, 타입, 단위, 누락 정책을 고정한다. 알고리즘 파일은 이 사전의 canonical_name을 사용한다. field_dictionary: policy: canonical_name_required: true alias_resolution_order: - "exact canonical_name" - "aliases" - "source_column" unknown_field_action: "DATA_MISSING으로 처리하고 임의 추정 금지" unit_conflict_action: "DATA_CONFLICT. 계산·수량 산출 금지" fields: ticker: canonical_name: "ticker" type: "string" unit: "none" aliases: ["Ticker", "종목코드", "code", "symbol"] name: canonical_name: "name" type: "string" unit: "none" aliases: ["Name", "종목명"] close_price: canonical_name: "close_price" type: "number" unit: "KRW_per_share" aliases: ["Close", "현재가", "종가", "close"] velocity_1d: canonical_name: "velocity_1d" type: "number" unit: "percent" aliases: ["Velocity_1D", "v1d"] note: "VELOCITY_V1 산출 — 1일 가격 속도" velocity_5d: canonical_name: "velocity_5d" type: "number" unit: "percent" aliases: ["Velocity_5D", "v5d"] note: "VELOCITY_V1 산출 — 5일 가격 속도" open_price: canonical_name: "open_price" type: "number" unit: "KRW_per_share" aliases: ["Open", "시가", "open"] previous_close_price: canonical_name: "previous_close_price" type: "number" unit: "KRW_per_share" aliases: ["PrevClose", "전일종가", "previous_close"] volume: canonical_name: "volume" type: "number" unit: "shares" aliases: ["Volume", "거래량", "volume_shares"] entry_price: canonical_name: "entry_price" type: "number" unit: "KRW_per_share" aliases: ["limit_price", "지정가", "진입가", "entry"] limit_price: canonical_name: "limit_price" type: "number" unit: "KRW_per_share" aliases: ["entry_price", "limit", "주문지정가"] stop_price: canonical_name: "stop_price" type: "number" unit: "KRW_per_share" aliases: ["손절가", "stop", "stop_loss_price"] spsv2_verdict: canonical_name: "spsv2_verdict" type: "enum" unit: "none" aliases: ["SPSV2 판정", "sell_price_sanity_verdict"] target_price: canonical_name: "target_price" type: "number" unit: "KRW_per_share" aliases: ["목표가", "익절가", "take_profit_price"] quantity: canonical_name: "quantity" type: "integer" unit: "shares" aliases: ["수량", "보유수량", "confirmed_holding_quantity"] atr20: canonical_name: "atr20" type: "number" unit: "KRW_per_share" aliases: ["ATR20", "20일 ATR", "atr_20"] total_asset: canonical_name: "total_asset" type: "number" unit: "KRW" aliases: ["총자산", "portfolio_value", "account_total_asset"] available_cash: canonical_name: "available_cash" type: "number" unit: "KRW" aliases: ["주문가능현금", "buy_power_cash", "예수금", "Cash_Available"] avg_trade_value_5d: canonical_name: "avg_trade_value_5d" type: "number" unit: "KRW" aliases: ["AvgTradeValue_5D_KRW", "AvgTradeValue_5D_M", "5D평균거래대금", "avg_daily_value_5d"] avg_trade_value_20d: canonical_name: "avg_trade_value_20d" type: "number" unit: "KRW" aliases: ["AvgTradeValue_20D_KRW", "AvgTradeValue_20D_M", "20D평균거래대금"] avg_volume_5d: canonical_name: "avg_volume_5d" type: "number" unit: "shares" aliases: ["AvgVolume_5D", "AvgVolume_5D_shares", "5D평균거래량"] frg_5d_sh: canonical_name: "frg_5d_sh" type: "number" unit: "shares" aliases: ["Frg_5D(sh)", "Frg_5D", "Frg_5D_sh", "외국인5D"] frg_20d_sh: canonical_name: "frg_20d_sh" type: "number" unit: "shares" aliases: ["Frg_20D(sh)", "Frg_20D", "외국인20D"] inst_5d_sh: canonical_name: "inst_5d_sh" type: "number" unit: "shares" aliases: ["Inst_5D(sh)", "Inst_5D", "Inst_5D_sh", "기관5D"] inst_20d_sh: canonical_name: "inst_20d_sh" type: "number" unit: "shares" aliases: ["Inst_20D(sh)", "기관20D"] beta: canonical_name: "beta" type: "number" unit: "ratio" aliases: ["Beta", "종목베타", "stock_beta"] flow_rows: canonical_name: "flow_rows" type: "integer" unit: "rows" aliases: ["Flow_Rows", "수급행수"] flow_ok: canonical_name: "flow_ok" type: "boolean" unit: "none" aliases: ["Flow_OK", "flow_valid"] flow_credit: canonical_name: "flow_credit" type: "number" unit: "ratio_0_1" aliases: ["Flow_Credit", "수급점수_가중치"] ma20: canonical_name: "ma20" type: "number" unit: "KRW_per_share" aliases: ["MA20", "20일선", "moving_average_20"] vwap: canonical_name: "vwap" type: "number" unit: "KRW_per_share" aliases: ["VWAP", "거래량가중평균가"] rsi_15m: canonical_name: "rsi_15m" type: "number" unit: "points" aliases: ["RSI_15M", "15분봉RSI"] volume_climax: canonical_name: "volume_climax" type: "boolean" unit: "none" aliases: ["Volume_Climax", "거래량폭증"] total_asset_ma10: canonical_name: "total_asset_ma10" type: "number" unit: "KRW" aliases: ["자산MA10", "total_equity_ma10"] sea_action_tag: canonical_name: "sea_action_tag" type: "string" unit: "none" aliases: ["SEA액션태그"] equity_curve_status: canonical_name: "equity_curve_status" type: "enum" unit: "none" aliases: ["자산곡선상태"] relative_strength_1m_percentile: canonical_name: "relative_strength_1m_percentile" type: "number" unit: "percentile" aliases: ["RS_Pct_20D_Percentile", "상대강도_백분위"] rsi_14: canonical_name: "rsi_14" type: "number" unit: "points" aliases: ["RSI", "RSI_14", "상대강도지수"] cash_shortfall_krw: canonical_name: "cash_shortfall_krw" type: "number" unit: "KRW" aliases: ["현금부족액", "cash_deficit"] data_integrity_score: canonical_name: "data_integrity_score" type: "number" unit: "score_0_100" aliases: ["schema_presence_score", "data_quality_score"] data_maturity_score: canonical_name: "data_maturity_score" type: "number" unit: "score_0_100" aliases: ["data_maturity", "maturity_score"] pending_critical_category_count: canonical_name: "pending_critical_category_count" type: "integer" unit: "count" aliases: ["pending_categories_count", "critical_pending_count"] pending_critical_categories: canonical_name: "pending_critical_categories" type: "array" unit: "none" aliases: ["pending_categories", "missing_critical_categories"] stock_close_5d_return: canonical_name: "stock_close_5d_return" type: "number" unit: "percent" aliases: ["종목5D수익률"] kospi_close_5d_return: canonical_name: "kospi_close_5d_return" type: "number" unit: "percent" aliases: ["코스피5D수익률"] sector_smartmoney_5d: canonical_name: "sector_smartmoney_5d" type: "number" unit: "normalized_score" aliases: ["sector_flow.SmartMoney_5D_Norm_Score", "섹터스마트머니5D"] sector_rank: canonical_name: "sector_rank" type: "integer" unit: "none" aliases: ["sector_flow.Rank", "섹터순위"] sector_top2_names: canonical_name: "sector_top2_names" type: "list" unit: "none" aliases: ["sector_flow.Top2_Sectors", "상위2개섹터"] alpha_shield_status: canonical_name: "alpha_shield_status" type: "enum" unit: "none" aliases: ["알파실드상태"] rotation_radar_status: canonical_name: "rotation_radar_status" type: "enum" unit: "none" aliases: ["로테이션레이더상태"] flow_acceleration_status: canonical_name: "flow_acceleration_status" type: "enum" unit: "none" aliases: ["수급가속도상태"] oversold_exit_strategy: canonical_name: "oversold_exit_strategy" type: "string" unit: "none" aliases: ["과매도탈출전략"] divergence_score: canonical_name: "divergence_score" type: "number" unit: "ratio_0_1" aliases: ["다이버전스점수"] overhang_score: canonical_name: "overhang_score" type: "number" unit: "ratio_0_1" aliases: ["오버행점수"] rs_ratio: canonical_name: "rs_ratio" type: "number" unit: "ratio" aliases: ["RS비율"] deviation_ratio: canonical_name: "deviation_ratio" type: "number" unit: "ratio" aliases: ["이격비율"] vix_close: canonical_name: "vix_close" type: "number" unit: "index_points" aliases: ["VIX", "VIX_Close"] kospi_close: canonical_name: "kospi_close" type: "number" unit: "index_points" aliases: ["KOSPI", "KOSPI_Close"] kospi_ma20: canonical_name: "kospi_ma20" type: "number" unit: "index_points" aliases: ["KOSPI_MA20"] usd_krw: canonical_name: "usd_krw" type: "number" unit: "KRW_per_USD" aliases: ["USD/KRW", "USDKRW"] market_risk_score: canonical_name: "market_risk_score" type: "number" unit: "points_0_10" aliases: ["MRS", "market_risk_score", "MRS합계"] cash_floor_regime_min_pct: canonical_name: "cash_floor_regime_min_pct" type: "number" unit: "percent" aliases: ["regime_min_cash_pct", "cash_floor_min_pct"] usd_jpy_2d_change_pct: canonical_name: "usd_jpy_2d_change_pct" type: "number" unit: "percent" aliases: ["USD_JPY_2D_Change_Pct", "USD/JPY_2D"] credit_stress_status: canonical_name: "credit_stress_status" type: "enum" unit: "none" aliases: ["credit_stress", "HY_OAS_Status", "CP_CD_Spread_Status"] bayesian_confidence_multiplier: canonical_name: "bayesian_confidence_multiplier" type: "number" unit: "ratio" aliases: ["bayesian_multiplier", "confidence_multiplier"] execution_cost_rate: canonical_name: "execution_cost_rate" type: "number" unit: "ratio" aliases: ["cost_rate", "fee_slippage_rate"] base_risk_budget: canonical_name: "base_risk_budget" type: "number" unit: "ratio" aliases: ["risk_budget", "base_risk"] net_return_feedback_multiplier: canonical_name: "net_return_feedback_multiplier" type: "number" unit: "ratio" aliases: ["net_feedback_multiplier"] performance_brake_multiplier: canonical_name: "performance_brake_multiplier" type: "number" unit: "ratio" aliases: ["performance_multiplier"] regime_reset_multiplier: canonical_name: "regime_reset_multiplier" type: "number" unit: "ratio" aliases: ["regime_multiplier"] kelly_brake_multiplier: canonical_name: "kelly_brake_multiplier" type: "number" unit: "ratio" aliases: ["kelly_multiplier"] final_risk_budget: canonical_name: "final_risk_budget" type: "number" unit: "ratio" aliases: ["effective_risk_budget"] current_price: canonical_name: "current_price" type: "number" unit: "KRW_per_share" aliases: ["현재가", "CurrentPrice", "last_price"] average_cost: canonical_name: "average_cost" type: "number" unit: "KRW_per_share" aliases: ["평단", "Avg_Cost", "average_entry_price"] highest_price_since_entry: canonical_name: "highest_price_since_entry" type: "number" unit: "KRW_per_share" aliases: ["진입후최고가", "highest_high_since_entry"] ma60: canonical_name: "ma60" type: "number" unit: "KRW_per_share" aliases: ["MA60", "60일선", "moving_average_60"] current_weight_pct: canonical_name: "current_weight_pct" type: "number" unit: "percent" aliases: ["현재비중", "current_weight"] target_band_min_pct: canonical_name: "target_band_min_pct" type: "number" unit: "percent" aliases: ["목표밴드하단"] target_band_max_pct: canonical_name: "target_band_max_pct" type: "number" unit: "percent" aliases: ["목표밴드상단"] immediate_cash: canonical_name: "immediate_cash" type: "number" unit: "KRW" aliases: ["즉시현금", "출금가능현금"] settlement_cash: canonical_name: "settlement_cash" type: "number" unit: "KRW" aliases: ["D+2추정현금", "settlement_cash_d2"] reserved_order_amount: canonical_name: "reserved_order_amount" type: "number" unit: "KRW" aliases: ["예약주문금액", "open_order_amount"] planned_buy_amount: canonical_name: "planned_buy_amount" type: "number" unit: "KRW" aliases: ["신규매수예상금액", "planned_order_amount"] sell_cash_proceeds_d2: canonical_name: "sell_cash_proceeds_d2" type: "number" unit: "KRW" aliases: ["매도대금정산분", "sell_cash_proceeds_immediate", "매도대금즉시반영분"] note: "사용자 지침: D+2 정산현금이 현금이다. 매도 후 D+2에 정산될 현금 유입액." min_cash_ratio: canonical_name: "min_cash_ratio" type: "number" unit: "percent" aliases: ["최소현금비중"] trailing_atr_multiplier: canonical_name: "trailing_atr_multiplier" type: "number" unit: "ratio" aliases: ["trailing_ATR배수"] trailing_stop_price: canonical_name: "trailing_stop_price" type: "number" unit: "KRW_per_share" aliases: ["trailing_stop_가격", "트레일링스탑가"] position_class: canonical_name: "position_class" type: "enum" unit: "none" aliases: ["분류", "core_satellite_class", "position_type"] take_profit_ladder: canonical_name: "take_profit_ladder" type: "object" unit: "none" aliases: ["익절래더", "tiered_ladder_output"] cash_ratio_set: canonical_name: "cash_ratio_set" type: "object" unit: "none" aliases: ["현금비중세트"] portfolio_band_status: canonical_name: "portfolio_band_status" type: "enum" unit: "none" aliases: ["버킷밴드상태", "target_band_status"] atr_multiplier: canonical_name: "atr_multiplier" type: "number" unit: "ratio" aliases: ["ATR배수"] target_weight_limit_amount: canonical_name: "target_weight_limit_amount" type: "number" unit: "KRW" aliases: ["목표비중한도금액"] sector_limit_amount: canonical_name: "sector_limit_amount" type: "number" unit: "KRW" aliases: ["섹터한도금액"] liquidity_limit_amount: canonical_name: "liquidity_limit_amount" type: "number" unit: "KRW" aliases: ["유동성상한금액"] forward_pe: canonical_name: "forward_pe" type: "number" unit: "ratio" aliases: ["Forward_PE", "ForwardPER", "선행PER", "12M_Forward_PE"] pbr: canonical_name: "pbr" type: "number" unit: "ratio" aliases: ["PBR", "P/B", "주가순자산비율"] eps_revision_status: canonical_name: "eps_revision_status" type: "enum" unit: "none" aliases: ["EPS_Revision_Status", "eps_revision", "EPS방향"] sector_median_forward_pe: canonical_name: "sector_median_forward_pe" type: "number" unit: "ratio" aliases: ["sector_median_PE", "섹터중앙값PER", "SectorPE_Median"] sector_median_pbr: canonical_name: "sector_median_pbr" type: "number" unit: "ratio" aliases: ["sector_median_PBR", "섹터중앙값PBR"] eps_growth_3y_cagr_pct: canonical_name: "eps_growth_3y_cagr_pct" type: "number" unit: "percent" aliases: ["EPS_Growth_3Y", "EPS_CAGR_3Y", "EPS3Y성장률", "EPS_Growth_3Y_CAGR_pct"] roe_pct: canonical_name: "roe_pct" type: "number" unit: "percent" aliases: ["ROE_Pct", "ROE", "자기자본이익률", "return_on_equity"] operating_margin_pct: canonical_name: "operating_margin_pct" type: "number" unit: "percent" aliases: ["Operating_Margin_Pct", "영업이익률", "op_margin"] debt_to_equity: canonical_name: "debt_to_equity" type: "number" unit: "ratio" aliases: ["Debt_To_Equity", "D/E", "부채비율", "debtToEquity"] fcf_b: canonical_name: "fcf_b" type: "number" unit: "KRW_100million" aliases: ["FCF_B", "잉여현금흐름", "freeCashflow_B"] revenue_growth_pct: canonical_name: "revenue_growth_pct" type: "number" unit: "percent" aliases: ["Revenue_Growth_Pct", "매출성장률", "revenueGrowth"] sector_type: canonical_name: "sector_type" type: "enum" unit: "none" aliases: ["업종구분", "Sector_Type"] beta_i: canonical_name: "beta_i" type: "number" unit: "ratio" aliases: ["개별종목베타"] market_value_i: canonical_name: "market_value_i" type: "number" unit: "KRW" aliases: ["개별종목시가"] total_equity_value: canonical_name: "total_equity_value" type: "number" unit: "KRW" aliases: ["총주식가치"] take_profit_ladder_v2: canonical_name: "take_profit_ladder_v2" type: "object" unit: "none" aliases: ["V2익절래더"] financial_health_score: canonical_name: "financial_health_score" type: "number" unit: "points_neg5_to_20" aliases: ["FHS", "재무점수"] portfolio_beta: canonical_name: "portfolio_beta" type: "number" unit: "ratio" aliases: ["포트폴리오베타"] tier_completed: canonical_name: "tier_completed" type: "enum" unit: "none" aliases: ["완료단계", "익절완료단계"] note: "PROFIT_LOCK_RATCHET_V1 입력 — tier_1 또는 tier_2 익절 완료 단계" ratchet_stop_price: canonical_name: "ratchet_stop_price" type: "number" unit: "KRW_per_share" aliases: ["래칫손절가", "보호스탑가격"] note: "PROFIT_LOCK_RATCHET_V1 출력 — 익절 후 상향된 손절 보호가" raw_price: canonical_name: "raw_price" type: "number" unit: "KRW_per_share" aliases: ["정규화전가격"] note: "TICK_NORMALIZER_V1 입력 — 호가 단위 정규화 전 원시 가격" tick_normalized_price: canonical_name: "tick_normalized_price" type: "number" unit: "KRW_per_share" aliases: ["호가정규화가격", "HTS입력가격"] note: "TICK_NORMALIZER_V1 출력 — KRX 호가 단위 정규화 완료 가격" tp_price: canonical_name: "tp_price" type: "number" unit: "KRW_per_share" aliases: ["익절목표가", "take_profit_price_raw"] note: "TP_VALIDITY_CHECK_V1 입력 — TAKE_PROFIT_LADDER_V2가 산출한 티어별 TP 원시 가격 (tp1 또는 tp2)" tp_validated_price: canonical_name: "tp_validated_price" type: "number" unit: "KRW_per_share_or_null" aliases: ["유효익절가", "validated_tp"] note: "TP_VALIDITY_CHECK_V1 출력 — 현재가 이하 TP는 null. 유효한 경우만 HTS 입력 허용." market_regime_state: canonical_name: "market_regime_state" type: "enum" unit: "none" aliases: ["시장국면단계", "regime_phase", "market_phase"] note: "REGIME_TRIM_WEIGHT_V1 입력 — spec/11_market_regime.yaml 국면 분류 결과 (ADVANCE/PULLBACK_IN_UPTREND/DISTRIBUTION/BREAKDOWN)" frg_5d_krw: canonical_name: "frg_5d_krw" type: "number" unit: "KRW" aliases: ["Frg_5D", "Frg_5D_KRW", "외국인5D순매수금액"] note: "외국인 5일 순매수금액(KRW). 양수=순매수, 음수=순매도" inst_5d_krw: canonical_name: "inst_5d_krw" type: "number" unit: "KRW" aliases: ["Inst_5D", "Inst_5D_KRW", "기관5D순매수금액"] note: "기관 5일 순매수금액(KRW). 양수=순매수, 음수=순매도" secular_leader_gate_active: canonical_name: "secular_leader_gate_active" type: "boolean" unit: "none" aliases: ["주도주게이트활성"] note: "SECULAR_LEADER_REGIME_GATE_V1 출력 — 삼성전자·SK하이닉스 secular_leader_profit_lock 발동 여부" secular_leader_gate_status: canonical_name: "secular_leader_gate_status" type: "enum" unit: "none" aliases: ["주도주게이트상태"] note: "SECULAR_LEADER_REGIME_GATE_V1 출력 — ACTIVE/DEACTIVATED/ACTIVATION_FAIL/NOT_APPLICABLE" # ── [2026-05-20_HARNESS_V4] M4: 성과 및 목표 추적 입력 필드 ──────────────── total_asset_krw: canonical_name: "total_asset_krw" type: "number" unit: "KRW" aliases: ["totalAsset", "total_asset", "총자산", "포트폴리오총자산"] note: "buildHarnessContext_ 집계값 — 보유종목 평가액 + 현금(D+2 기준) 합계" net_expectancy_30: canonical_name: "net_expectancy_30" type: "number_or_null" unit: "percent" aliases: ["net_exp_30", "monthly_net_expectancy"] note: "Bayesian 성과 계산기 출력 — 최근 30거래일 순기대 수익률(%). GOAL_RETIREMENT_V1 ETA 계산 기준." # ── [2026-05-20_HARNESS_V4] M4: 5억원 목표 자산 추적 필드 ───────────────── goal_asset_krw: canonical_name: "goal_asset_krw" type: "integer" unit: "KRW" aliases: ["목표자산", "goal_krw"] note: "GOAL_RETIREMENT_V1 고정값 — 500,000,000 KRW (5억원). LLM 재정의 금지." goal_current_asset_krw: canonical_name: "goal_current_asset_krw" type: "integer" unit: "KRW" aliases: ["현재자산", "current_asset_krw"] note: "GOAL_RETIREMENT_V1 산출 — 하네스 캡처 시점 총 자산(totalAsset)" goal_achievement_pct: canonical_name: "goal_achievement_pct" type: "number" unit: "percent" aliases: ["목표달성률", "achievement_pct"] note: "GOAL_RETIREMENT_V1 산출 — goal_current_asset_krw / goal_asset_krw * 100. 소수점 1자리." goal_remaining_krw: canonical_name: "goal_remaining_krw" type: "integer" unit: "KRW" aliases: ["목표잔여금", "remaining_krw"] note: "GOAL_RETIREMENT_V1 산출 — max(0, goal_asset_krw - goal_current_asset_krw)" goal_eta_months: canonical_name: "goal_eta_months" type: "integer_or_null" unit: "months" aliases: ["목표달성월수", "eta_months"] note: "GOAL_RETIREMENT_V1 복리 ETA — null이면 DATA_MISSING(net_expectancy_30 없음). 0이면 ACHIEVED." goal_eta_label: canonical_name: "goal_eta_label" type: "string" unit: "none" aliases: ["목표달성예상월", "eta_label"] note: "GOAL_RETIREMENT_V1 ETA 연월 — YYYY-MM 또는 ACHIEVED 또는 DATA_MISSING" goal_monthly_growth_pct: canonical_name: "goal_monthly_growth_pct" type: "number_or_null" unit: "percent" aliases: ["월간기대수익률", "monthly_growth_pct"] note: "GOAL_RETIREMENT_V1 ETA 계산 기준 — performance.net_expectancy_30 전달값" goal_status: canonical_name: "goal_status" type: "enum" unit: "none" aliases: ["목표상태", "goal_state"] values: ["ACHIEVED", "IN_PROGRESS"] note: "GOAL_RETIREMENT_V1 산출 — goal_current_asset_krw >= goal_asset_krw이면 ACHIEVED" # ── 하네스 스칼라 입력 필드 (공식 레지스트리 교차 참조용) ───────────────────── settlement_cash_d2_krw: canonical_name: "settlement_cash_d2_krw" type: "integer" unit: "KRW" aliases: ["d2_cash_krw", "D2현금"] note: "D+2 정산 현금 — cash_ledger_basis=D2_ONLY 기준 유일 허용 현금" cash_floor_min_pct: canonical_name: "cash_floor_min_pct" type: "number" unit: "percent" aliases: ["최소현금방어선", "min_cash_pct"] note: "calcCashFloor_() 산출 — MRS 기반 국면별 최소 현금 비율" mrs_score: canonical_name: "mrs_score" type: "number" unit: "score_0_100" aliases: ["시장위험점수", "market_risk_score"] note: "MARKET_RISK_SCORE_V1 산출값 (0~100). TARGET_CASH_PCT_V1 입력." sell_candidates_json: canonical_name: "sell_candidates_json" type: "json_array" unit: "none" aliases: ["매도후보목록", "h2_candidates"] note: "H2 calcSellPriority_() 산출 — sell_priority 기반 정렬 배열" sell_quantities_json: canonical_name: "sell_quantities_json" type: "json_array" unit: "none" aliases: ["매도수량목록", "h3_sell_qty"] note: "H3 calcQuantities_() 산출 — 종목별 매도수량 확정 배열" # ── G1: 현금 부족액 / 목표현금 (CASH_SHORTFALL_V1) ────────────────────── cash_current_pct_d2: canonical_name: "cash_current_pct_d2" type: "number" unit: "percent" aliases: ["현금비중d2", "d2_cash_pct"] note: "D+2 정산현금 / 총자산 × 100 — GAS 결정론적 산출 (LLM 재계산 금지)" cash_target_pct: canonical_name: "cash_target_pct" type: "number" unit: "percent" aliases: ["목표현금비중", "target_cash_pct"] note: "TARGET_CASH_PCT_V1: max(5 + (MRS/10)×15, cash_floor_min_pct)" cash_shortfall_min_krw: canonical_name: "cash_shortfall_min_krw" type: "integer" unit: "KRW" aliases: ["최소현금부족액", "shortfall_min"] note: "최소 현금 방어선까지 부족액 — 0이면 방어선 충족. LLM '약 N원' 계산 대체" cash_shortfall_target_krw: canonical_name: "cash_shortfall_target_krw" type: "integer" unit: "KRW" aliases: ["목표현금부족액", "shortfall_target"] note: "국면별 목표 현금비율까지 부족액 — TARGET_CASH_PCT_V1 기준" # ── G2: 현금 회복 TRIM 계획 (TRIM_PLAN_MIN_CASH_V1) ────────────────────── trim_plan_to_min_cash_json: canonical_name: "trim_plan_to_min_cash_json" type: "json_array" unit: "none" aliases: ["현금회복trim계획", "trim_plan_min"] note: "H2 매도우선순위 기반 종목별 TRIM 계획 — LLM 임의 종목·순서 선택 금지" # ── I5: 외부 시장 데이터 격리 (G3 EXTERNAL_CONTEXT_ISOLATION) ──────────── external_context_json: canonical_name: "external_context_json" type: "json_array" unit: "none" aliases: ["외부시장데이터", "external_data"] note: "G3 격리 규칙 적용 — used_for=CONTEXT_ONLY 전용. 주문 판단에 사용 금지" required_sub_fields: - source_name - fetched_at - symbol - value - used_for # ── K1: 분할 매수 트랜치 엔진 입력·출력 ───────────────────────────────── alpha_lead_score: canonical_name: "alpha_lead_score" type: "number" unit: "score_0_100" note: "ALPHA_LEAD_SCORE_V1 산출 — 선행 파일럿 진입 가능성 점수" lead_entry_state: canonical_name: "lead_entry_state" type: "string" unit: "enum" note: "PILOT_ALLOWED | WATCH_ONLY | BLOCKED_LATE_CHASE | DATA_MISSING" follow_through_state: canonical_name: "follow_through_state" type: "string" unit: "enum" note: "FOLLOW_THROUGH_CONFIRM_V1 산출 — CONFIRMED_ADD_ON | WAIT_PULLBACK | FAILED_BREAKOUT" holding_quantity: canonical_name: "holding_quantity" type: "integer" unit: "shares" aliases: ["holdingQty", "보유수량_k1"] note: "K1 트랜치 판단용 현재 보유수량" profit_pct: canonical_name: "profit_pct" type: "number" unit: "percent" note: "PROFIT_PRESERVATION_STATE_V1 산출 — (close-avgCost)/avgCost×100" close_vs_ma20_pct: canonical_name: "close_vs_ma20_pct" type: "number" unit: "percent" note: "ALPHA_LEAD_SCORE_V1 산출 — (close/MA20-1)×100, 눌림 판단에 사용" tranche_phase: canonical_name: "tranche_phase" type: "string" unit: "enum" note: "STAGED_ENTRY_TRANCHE_V1 산출 — WAIT_PILOT_SETUP | TRANCHE_1_PILOT | TRANCHE_2_ADD_ON | TRANCHE_3_PULLBACK_ADD | HOLD_CURRENT" current_tranche_allowed_pct: canonical_name: "current_tranche_allowed_pct" type: "number" unit: "percent" note: "K1: 현재 단계에서 허용된 매수 비중 (0 | 30 | 40)" next_tranche_condition: canonical_name: "next_tranche_condition" type: "string" unit: "description" note: "K1: 다음 트랜치 진입 조건 코드" # ── K2: 반등 대기 분할 매도 입력·출력 ────────────────────────────────── close: canonical_name: "close" type: "number" unit: "KRW_per_share" aliases: ["Close", "close_price", "종가"] note: "당일 종가 — K2 반등 매도 예상금액 계산 기준" base_sell_qty: canonical_name: "base_sell_qty" type: "integer" unit: "shares" note: "K2: SELL_QUANTITY_ALLOCATOR_V1(H3) 산출 기준 매도수량" execution_style: canonical_name: "execution_style" type: "string" unit: "enum" note: "URGENT_LIQUIDITY_TRIM | OVERSOLD_REBOUND_SELL | DISTRIBUTION_EXIT | PROFIT_PROTECT_TRIM" profit_preservation_state: canonical_name: "profit_preservation_state" type: "string" unit: "enum" note: "PROFIT_PRESERVATION_STATE_V1 산출 — NORMAL | BREAKEVEN_RATCHET | PROFIT_LOCK_10/20/30 | APEX_TRAILING" profit_lock_stage: canonical_name: "profit_lock_stage" type: "string" unit: "enum" aliases: ["profitLockStage"] note: "PROFIT_LOCK_STAGE_CLASSIFIER_V1 산출 — NORMAL | PROFIT_LOCK_STAGE_10/20/30/50" immediate_sell_qty: canonical_name: "immediate_sell_qty" type: "integer" unit: "shares" note: "K2: 즉시 체결 대상 수량 (OVERSOLD_REBOUND_SELL의 경우 floor(base/2))" rebound_wait_qty: canonical_name: "rebound_wait_qty" type: "integer" unit: "shares" note: "K2: 반등 트리거 대기 수량 — 트리거 미충족 시 HTS 주문 금지" emergency_full_sell: canonical_name: "emergency_full_sell" type: "boolean" unit: "none" note: "K2: 비상 전량 매도 플래그 — half_krw×2 < shortfall일 때만 true" rebound_trigger_price: canonical_name: "rebound_trigger_price" type: "integer" unit: "KRW_per_share" note: "K2: 반등 매도 실행 트리거 가격 (prevClose+0.5×ATR20, tick 정규화)" execution_method_ladder_json: canonical_name: "execution_method_ladder_json" type: "json_object" unit: "none" note: "EXECUTION_METHOD_LADDER_V1 산출 — 매도 실행 방식 계약표" sell_timing_verdict: canonical_name: "sell_timing_verdict" type: "string" unit: "enum" note: "SELL_EXECUTION_TIMING_LOCK_V2 산출 — SELL_READY | TIMING_BLOCKED_INTRADAY | SELL_BLOCKED_DATA" sell_waterfall_gate: canonical_name: "sell_waterfall_gate" type: "string" unit: "enum" note: "SELL_WATERFALL_ENGINE_V2 산출 — PASS | WARN | FAIL" smart_cash_recovery_gate: canonical_name: "smart_cash_recovery_gate" type: "string" unit: "enum" note: "SMART_CASH_RECOVERY_V7 산출 — PASS | WARN | FAIL" # ── K3: 국면·섹터 연계 H2 동적 우선순위 출력 ───────────────────────── h2_candidates: canonical_name: "h2_candidates" type: "json_array" unit: "none" note: "K3 입력: H2 매도후보 배열" ret5d: canonical_name: "ret5d" type: "number" unit: "percent" aliases: ["Ret5D", "ret_5d"] note: "5일 수익률 — K3 베타 프록시 계산 및 섹터 상대강도 판단에 사용" kospi_ret5d: canonical_name: "kospi_ret5d" type: "number" unit: "percent" aliases: ["KOSPI_Ret5D", "kospiRet5d"] note: "K3: KOSPI 5일 수익률 — 고베타 판단 기준" frg_5d: canonical_name: "frg_5d" type: "number" unit: "KRW" aliases: ["Frg_5D", "frg5d"] note: "K3/DISTRIBUTION_RISK_SCORE_V1 입력 — 외국인 5일 순매수금액" inst_5d: canonical_name: "inst_5d" type: "number" unit: "KRW" aliases: ["Inst_5D", "inst5d"] note: "K3/DISTRIBUTION_RISK_SCORE_V1 입력 — 기관 5일 순매수금액" ac_gate: canonical_name: "ac_gate" type: "string" unit: "enum" aliases: ["AC_Gate", "acGate"] note: "J2/K3: 안티클라이막스 게이트 상태 — CLIMAX 포함 시 설거지 위험 신호" regime_adjusted_sell_priority_json: canonical_name: "regime_adjusted_sell_priority_json" type: "json_array" unit: "none" aliases: ["regime_sell_priority", "k3_priority"] note: "K3_REGIME_SELL_PRIORITY_V1 산출 — final_regime_rank 기준 매도 순서. sell_priority_lock=true이면 LLM 재정렬 금지" regime_trim_guidance: canonical_name: "regime_trim_guidance" type: "json_array" unit: "none" aliases: ["regimeTrimGuidance"] note: "REGIME_TRIM_GUIDANCE_V1 산출 — 국면별 현금확보 TRIM 우선순위" anti_whipsaw_status: canonical_name: "anti_whipsaw_status" type: "string" unit: "enum" aliases: ["antiWhipsawStatus"] note: "ANTI_WHIPSAW_GATE_V1 산출 — WHIPSAW_BLOCK/WARN/CLEAR" breakeven_stop_price: canonical_name: "breakeven_stop_price" type: "number" unit: "KRW_per_share" aliases: ["breakevenStopPrice"] note: "BREAKEVEN_RATCHET_V1 산출 — 손익분기 래칫 손절가" # ── 공통 포지션 필드 (M2/M3/M5 공유) weight_pct: canonical_name: "weight_pct" type: "number" unit: "pct" aliases: ["weightPct", "Weight_Pct"] note: "보유 비중(%) — M2 베타 가중, M5 섹터 편중 계산 입력" holding_qty: canonical_name: "holding_qty" type: "number" unit: "shares" aliases: ["holdingQty", "holding_quantity"] note: "현재 보유 수량 — M3 익절 수량 계산 입력" proposed_quantity: canonical_name: "proposed_quantity" type: "number_or_null" unit: "shares" aliases: ["proposal_qty"] note: "proposal_reference_json 제안 수량 — 보유수량 부재 시 stop proposal ladder fallback 입력" tp1_price: canonical_name: "tp1_price" type: "number_or_null" unit: "KRW_per_share" aliases: ["TP1_Price", "tp1Price"] note: "M3/prices_json 필드 — TP1 목표 가격. null=이미 통과 또는 미계산" tp1_qty: canonical_name: "tp1_qty" type: "number" unit: "shares" aliases: ["TP1_Qty", "tp1Qty"] note: "M3 — TP1 도달 시 매도 수량 (수동 입력 또는 AUTO_33PCT)" tp2_price: canonical_name: "tp2_price" type: "number_or_null" unit: "KRW_per_share" aliases: ["TP2_Price", "tp2Price"] note: "M3/prices_json 필드 — TP2 목표 가격" tp2_qty: canonical_name: "tp2_qty" type: "number" unit: "shares" aliases: ["TP2_Qty", "tp2Qty"] note: "M3 — TP2 도달 시 매도 수량" tp3_qty: canonical_name: "tp3_qty" type: "number" unit: "shares" aliases: ["TP3_Qty", "tp3Qty", "tp3_quantity"] note: "M3 — TP3/잔량 수량" proposal_stop_ladder: canonical_name: "proposal_stop_ladder" type: "json_object" unit: "none" note: "STOP_PROPOSAL_LADDER_V1 산출 — proposal_reference_sheet용 손절 1/2/3 가격·수량 묶음" dart_risk: canonical_name: "dart_risk" type: "string" unit: "Y/N" aliases: ["DART_Risk", "dartRisk"] note: "M4 입력 — DART 공시 리스크 플래그 (Y=위험, N/''=없음)" # ── M1 필드 drawdown_guard_state: canonical_name: "drawdown_guard_state" type: "string" unit: "enum" aliases: ["drawdownGuardState"] note: "M1_DRAWDOWN_GUARD_V1 산출 — NO_BUY/REDUCE_BUY/CAUTION_BUY/NORMAL" drawdown_buy_scale: canonical_name: "drawdown_buy_scale" type: "number" unit: "0~1" aliases: ["drawdownBuyScale", "buy_scale"] note: "M1 — atrQty 곱셈 배수. 1.0=정상, 0.5=50% 축소, 0=매수 금지" consecutive_losses: canonical_name: "consecutive_losses" type: "number" unit: "integer" aliases: ["consecutiveLosses"] note: "M1 입력 — 최근 연속 손절 횟수 (performance 시트 기준)" # ── M2 필드 portfolio_beta: canonical_name: "portfolio_beta" type: "number_or_null" unit: "ratio" aliases: ["portfolioBeta"] note: "M2_PORTFOLIO_BETA_GATE_V1 산출 — 보유 종목 가중평균 베타. null=데이터 부족" portfolio_beta_gate: canonical_name: "portfolio_beta_gate" type: "string" unit: "enum" aliases: ["portfolioBetaGate"] note: "M2 — OVER_BETA/WARN_BETA/PASS/INSUFFICIENT_DATA" portfolio_beta_gate_json: canonical_name: "portfolio_beta_gate_json" type: "json_object" unit: "none" aliases: ["betaGateJson"] note: "M2 — per-holding beta_proxy 상세 및 포트폴리오 베타 요약" beta_proxy: canonical_name: "beta_proxy" type: "number" unit: "ratio" aliases: ["betaProxy"] note: "M2/K3 — ret5d/kospiRet5d 기반 베타 근사값. 비정상 시 1.0 사용" # ── M3 필드 tp_quantity_ladder_json: canonical_name: "tp_quantity_ladder_json" type: "json_array" unit: "none" aliases: ["tpLadderJson"] note: "M3_TP_QUANTITY_LADDER_V1 산출 — TP1/2/3 도달 시 매도 수량. tp_quantity_ladder_lock=true이면 LLM 변경 금지" qty_source: canonical_name: "qty_source" type: "string" unit: "enum" aliases: ["qtySource"] note: "M3 — MANUAL(수동 입력)/AUTO_33PCT(자동 33%)/NO_HOLDING" # ── M4 필드 event_hold_days: canonical_name: "event_hold_days" type: "number_or_null" unit: "integer" aliases: ["eventHoldDays", "Event_Hold_Days"] note: "M4 입력 — 이벤트(실적/공시) 홀드 잔여일. <=5이면 EVENT_HOLD" event_hold_gate: canonical_name: "event_hold_gate" type: "string" unit: "enum" aliases: ["eventHoldGate"] note: "M4_EVENT_RISK_HOLD_GATE_V1 산출 — EVENT_HOLD/PASS" event_risk_json: canonical_name: "event_risk_json" type: "json_array" unit: "none" aliases: ["eventRiskJson"] note: "M4 — per-holding 이벤트 홀드 게이트 상태 배열" # ── M5 필드 sector_concentration_gate: canonical_name: "sector_concentration_gate" type: "string" unit: "enum" aliases: ["sectorConcentrationGate"] note: "M5_SECTOR_CONCENTRATION_LIMIT_V1 산출 — BLOCK_SECTOR/WARN_TOP2/PASS" sector_concentration_json: canonical_name: "sector_concentration_json" type: "json_array" unit: "none" aliases: ["sectorConcentrationJson"] note: "M5 — 섹터별 weight_pct 및 gate 상태 배열" # ── 공통 sector: canonical_name: "sector" type: "string" unit: "none" aliases: ["sectorName", "sector_name"] note: "L1/K3 입력 — 섹터명 (TICKER_SECTOR_MAP 기반). sectorFlowRadar key" rank: canonical_name: "rank" type: "number" unit: "integer" aliases: ["sectorRank", "Rotation_Rank", "Sector_Rank"] note: "L1 입력 — 현재 주 섹터 로테이션 순위 (낮을수록 우수)" prev_rank_w1: canonical_name: "prev_rank_w1" type: "number_or_null" unit: "integer" aliases: ["prevRank", "Prev_Rotation_Rank"] note: "L1 입력 — 1주 전 섹터 순위. 미제공 시 null" prev_rank_w2: canonical_name: "prev_rank_w2" type: "number_or_null" unit: "integer" aliases: ["prevRankW2", "Prev_Rotation_Rank_W2"] note: "L1 입력 — 2주 전 섹터 순위. 미제공 시 null" sector_rotation_momentum_json: canonical_name: "sector_rotation_momentum_json" type: "json_array" unit: "none" aliases: ["sectorMomentumJson", "sector_momentum_json"] note: "L1_SECTOR_ROTATION_MOMENTUM_V1 산출 — 섹터별 rank_delta/momentum_state. sector_rotation_momentum_lock=true이면 LLM 재산출 금지" rank_delta_w1: canonical_name: "rank_delta_w1" type: "number_or_null" unit: "integer" aliases: ["rankDeltaW1"] note: "L1 입력 — 1주 섹터 순위 변화 (양수=순위 하락). prev_rank_w1 미제공 시 null" rank_delta_w2: canonical_name: "rank_delta_w2" type: "number_or_null" unit: "integer" aliases: ["rankDeltaW2"] note: "L1 입력 — 2주 섹터 순위 변화. prev_rank_w2 미제공 시 null" momentum_state: canonical_name: "momentum_state" type: "string" unit: "enum" aliases: ["momentumState"] note: "L1_SECTOR_ROTATION_MOMENTUM_V1 산출 — RISING/STABLE/TOPPING_OUT/FADING" pre_distribution_warning: canonical_name: "pre_distribution_warning" type: "string" unit: "enum" aliases: ["preDistributionWarning", "pre_dist_warning"] note: "L4_PRE_DISTRIBUTION_EARLY_WARNING_V1 산출 — EARLY_WARNING(신고점수축/급등약류)/NONE. 이 값이 EARLY_WARNING이면 신규 매수 신중 재검토" high52w: canonical_name: "high52w" type: "number" unit: "KRW_per_share" aliases: ["High52W", "high_52w", "52w_high"] note: "L4 입력 — 52주 최고가. 데이터 미제공 시 MA20×1.15 대체 판단" auto_trailing_stop: canonical_name: "auto_trailing_stop" type: "number_or_null" unit: "KRW_per_share" aliases: ["autoTrailingStop", "trailing_stop"] note: "L2_RATCHET_TRAILING_AUTO_V1 산출 — PROFIT_LOCK_20/30/APEX_TRAILING 구간 ATR 트레일링 손절가. null=비해당. LLM이 이 값보다 낮은 손절가 제시 금지" protected_stop_price: canonical_name: "protected_stop_price" type: "number_or_null" unit: "KRW_per_share" aliases: ["protectedStopPrice", "ratchet_stop_price"] note: "profit_preservation_json 출력 — 수익보전 단계에서 유지해야 하는 보호 손절가" auto_trailing_note: canonical_name: "auto_trailing_note" type: "string_or_null" unit: "none" aliases: ["autoTrailingNote"] note: "L2_RATCHET_TRAILING_AUTO_V1 산출 근거 — 'max(ratchet,{highest}-N.N×ATR)' 형식" highest_price_since_entry: canonical_name: "highest_price_since_entry" type: "number" unit: "KRW_per_share" aliases: ["highestPriceSinceEntry", "highest_close"] note: "진입 후 최고 종가 — L2 ATR 트레일링 기준가. prices_json에 포함" total_heat_pct: canonical_name: "total_heat_pct" type: "number" unit: "pct" aliases: ["totalHeatPct", "total_heat"] note: "포트폴리오 총 Heat 비율 — DYNAMIC_HEAT_GATE_V1/TOTAL_HEAT_V1 입력. heat_gate_threshold_pct와 비교해 gate 판정" heat_gate_threshold_pct: canonical_name: "heat_gate_threshold_pct" type: "number" unit: "pct" aliases: ["heatGateThresholdPct", "heat_threshold_pct"] note: "L3_DYNAMIC_HEAT_GATE_V1 산출 — 현재 국면에서 적용된 BLOCK_NEW_BUY 임계값(%). GAS 결정론적 산출, LLM 재계산 금지" market_regime: canonical_name: "market_regime" type: "string" unit: "enum" aliases: ["marketRegime", "regime"] note: "현재 시장 국면 — DYNAMIC_HEAT_GATE_V1/K3/L3 등 국면 감응 공식의 공통 입력" # ── N-group 출력 필드 (2026-05-20) ───────────────────────────────────── regime_size_scale: canonical_name: "regime_size_scale" type: "number" unit: "multiplier" aliases: ["regimeSizeScale"] note: "N1_POSITION_SIZE_REGIME_SCALE_V1 — 국면별 atrQty 스케일 배수 (0.25~1.2). GAS 결정론적 산출" stop_adequacy_json: canonical_name: "stop_adequacy_json" type: "json" unit: "array" aliases: ["stopAdequacyJson"] note: "N3_STOP_PRICE_ADEQUACY_V1 — 보유 종목별 손절가 적정성 검증 결과 배열" absolute_risk_stop_rows: canonical_name: "absolute_risk_stop_rows" type: "json" unit: "array" aliases: ["absoluteRiskStopRows"] note: "P3 ABSOLUTE_RISK_STOP_V1 — 절대 리스크 손절 taxonomy 결과 배열" relative_underperf_alert: canonical_name: "relative_underperf_alert" type: "json" unit: "object" aliases: ["relativeUnderperfAlert"] note: "P3 RELATIVE_UNDERPERF_ALERT_V1 — 상대약세 경보 taxonomy 객체" stop_action_ladder: canonical_name: "stop_action_ladder" type: "json" unit: "object" aliases: ["stopActionLadder"] note: "P3 STOP_ACTION_LADDER_V1 — 최종 손절/익절/시간손절 액션 래더" df_map: canonical_name: "df_map" type: "json" unit: "object" aliases: ["dfMap"] note: "P3 taxonomy wrapper 입력용 data feed map" kospi_ret20d: canonical_name: "kospi_ret20d" type: "number" unit: "percent" aliases: ["kospiRet20d"] note: "P3 RELATIVE_UNDERPERF_ALERT_V1 입력용 KOSPI 20D 수익률" context: canonical_name: "context" type: "json" unit: "object" aliases: ["ctx"] note: "P3 STOP_ACTION_LADDER_V1 입력용 calcSellDecision_ 컨텍스트 객체" stop_gap_pct: canonical_name: "stop_gap_pct" type: "number" unit: "pct" aliases: ["stopGapPct"] note: "N3: (recommended_stop - manual_stop) / recommended_stop × 100" adequacy_status: canonical_name: "adequacy_status" type: "string" unit: "enum" aliases: ["adequacyStatus"] note: "N3: PASS/STOP_WIDE/STOP_CRITICAL/INSUFFICIENT_DATA" recommended_stop: canonical_name: "recommended_stop" type: "number" unit: "KRW_per_share" aliases: ["recommendedStop", "recommended_stop_price"] note: "N3: ATR 기반 권고 손절가 — max(avgCost×0.92, avgCost-ATR20×mul), tick 정규화 적용" candidate_quality_grade: canonical_name: "candidate_quality_grade" type: "string" unit: "enum" aliases: ["Candidate_Quality_Grade"] note: "core_satellite 후보 품질 등급. 실행 추천이 아님." execution_recommendation_state: canonical_name: "execution_recommendation_state" type: "string" unit: "enum" aliases: ["Execution_Recommendation_State"] note: "BUY_PILOT_ALLOWED/WATCH/BLOCK 상태. HTS 주문은 order_blueprint PASS만 허용." expected_edge: canonical_name: "expected_edge" type: "number" unit: "ratio" aliases: ["Expected_Edge"] note: "기대우위. 손절가와 목표가 기반 매수 허용 하한 검증." entry_mode_gate: canonical_name: "entry_mode_gate" type: "string" unit: "enum" aliases: ["Entry_Mode_Gate"] note: "진입 모드 PASS/PENDING/BLOCK 게이트." timing_score_entry: canonical_name: "timing_score_entry" type: "number" unit: "score_0_100" aliases: ["Timing_Score_Entry"] note: "진입 타이밍 점수." timing_score_exit: canonical_name: "timing_score_exit" type: "number" unit: "score_0_100" aliases: ["Timing_Score_Exit"] note: "청산/감축 타이밍 점수." liquidity_status: canonical_name: "liquidity_status" type: "string" unit: "enum" aliases: ["Liquidity_Status"] note: "거래대금 기반 유동성 상태." smart_money_flow_signal_v2_json: canonical_name: "smart_money_flow_signal_v2_json" type: "json" unit: "array" aliases: ["smartMoneyFlowSignalV2Json"] note: "CAPITAL_STYLE_ALLOCATION_V1 입력 — 스마트머니 흐름 배열" fundamental_multifactor_v3_json: canonical_name: "fundamental_multifactor_v3_json" type: "json" unit: "array" aliases: ["fundamentalMultifactorV3Json"] note: "CAPITAL_STYLE_ALLOCATION_V1 입력 — 펀더멘털 멀티팩터 배열" macro_event_ticker_impact_v1_json: canonical_name: "macro_event_ticker_impact_v1_json" type: "json" unit: "array" aliases: ["macroEventTickerImpactV1Json"] note: "CAPITAL_STYLE_ALLOCATION_V1 입력 — 거시 이벤트 영향 배열" liquidity_flow_signal_v1_json: canonical_name: "liquidity_flow_signal_v1_json" type: "json" unit: "array" aliases: ["liquidityFlowSignalV1Json"] note: "CAPITAL_STYLE_ALLOCATION_V1 입력 — 유동성 흐름 배열" capital_style_conviction: canonical_name: "capital_style_conviction" type: "number" unit: "score_0_100" aliases: ["capitalStyleConviction"] note: "CAPITAL_STYLE_ALLOCATION_V1 산출 — 투자성향별 conviction" capital_style_label: canonical_name: "capital_style_label" type: "string" unit: "enum" aliases: ["capitalStyleLabel"] note: "CAPITAL_STYLE_ALLOCATION_V1 산출 — 투자성향 라벨" spread_status: canonical_name: "spread_status" type: "string" unit: "enum" aliases: ["Spread_Status"] note: "호가 스프레드 상태." sell_action: canonical_name: "sell_action" type: "string" unit: "enum" aliases: ["Sell_Action"] note: "하네스 산출 매도/감축 액션." sell_validation: canonical_name: "sell_validation" type: "string" unit: "enum" aliases: ["Sell_Validation"] note: "매도 신호 검산 상태." rw_partial: canonical_name: "rw_partial" type: "number" unit: "count" aliases: ["RW_Partial"] note: "상대약세 부분 신호 개수." distribution_risk_score: canonical_name: "distribution_risk_score" type: "number" unit: "score_0_100" aliases: ["Distribution_Risk_Score"] note: "분산위험 점수." late_chase_risk_score: canonical_name: "late_chase_risk_score" type: "number" unit: "score_0_100" aliases: ["Late_Chase_Risk_Score"] note: "추격매수 위험 점수." rsi14: canonical_name: "rsi14" type: "number" unit: "points" aliases: ["RSI14"] note: "14일 RSI." disparity: canonical_name: "disparity" type: "number" unit: "pct" aliases: ["Disparity"] note: "이격도." val_surge_pct: canonical_name: "val_surge_pct" type: "number" unit: "pct" aliases: ["Val_Surge_Pct"] note: "거래대금 급증률." ret5d: canonical_name: "ret5d" type: "number" unit: "pct" aliases: ["Ret5D"] note: "5거래일 수익률." ret_1d: canonical_name: "ret_1d" type: "number" unit: "percent" aliases: ["Ret_1D", "ret1d", "1D_Return_Pct"] note: "전일 대비 수익률 (%)." ret_3d: canonical_name: "ret_3d" type: "number" unit: "percent" aliases: ["Ret_3D", "ret3d", "3D_Return_Pct"] note: "3거래일 수익률 (%)." days_since_breakout: canonical_name: "days_since_breakout" type: "number" unit: "trading_days" aliases: ["Days_Since_Breakout", "daysSinceBreakout"] note: "돌파 발생 후 경과 거래일 수." ret_since_breakout: canonical_name: "ret_since_breakout" type: "number" unit: "pct" aliases: ["Ret_Since_Breakout", "retSinceBreakout"] note: "돌파일 종가 대비 현재 수익률." follow_through_day_state: canonical_name: "follow_through_day_state" type: "string" unit: "enum" aliases: ["Follow_Through_Day_State", "followThroughDayState"] note: "Follow-Through Day 판정 상태." vol_ratio_vs_breakout_day: canonical_name: "vol_ratio_vs_breakout_day" type: "number" unit: "ratio" aliases: ["Vol_Ratio_Vs_Breakout_Day", "volRatioVsBreakoutDay"] note: "돌파일 대비 거래량 비율." vol_today: canonical_name: "vol_today" type: "number" unit: "shares" aliases: ["Vol_Today", "volToday"] note: "당일 거래량." vol_breakout_day: canonical_name: "vol_breakout_day" type: "number" unit: "shares" aliases: ["Vol_Breakout_Day", "volBreakoutDay", "volumeBreakoutDay"] note: "돌파일 거래량." consecutive_sell_signals_5d: canonical_name: "consecutive_sell_signals_5d" type: "number" unit: "count" aliases: ["Consecutive_Sell_Signals_5D", "consecutiveSellSignals5d"] note: "최근 5일간 연속 매도 신호 수." vol_surge_pct: canonical_name: "vol_surge_pct" type: "number" unit: "pct" aliases: ["Vol_Surge_Pct", "volSurgePct"] note: "당일 거래량 급증률." allowed_intraday_actions: canonical_name: "allowed_intraday_actions" type: "array" unit: "enum_list" aliases: ["Allowed_Intraday_Actions", "allowedIntradayActions"] note: "장중 허용 액션 목록." blocked_intraday_actions: canonical_name: "blocked_intraday_actions" type: "array" unit: "enum_list" aliases: ["Blocked_Intraday_Actions", "blockedIntradayActions"] note: "장중 차단 액션 목록." execution_quality_score: canonical_name: "execution_quality_score" type: "number" unit: "score" aliases: ["Execution_Quality_Score", "executionQualityScore"] note: "실행 품질 점수." execution_quality_grade: canonical_name: "execution_quality_grade" type: "string" unit: "enum" aliases: ["Execution_Quality_Grade", "executionQualityGrade"] note: "실행 품질 등급." execution_quality_outcome: canonical_name: "execution_quality_outcome" type: "string" unit: "enum" aliases: ["Execution_Quality_Outcome", "executionQualityOutcome"] note: "실행 품질 결과 분류." threshold_adjustment_proposals: canonical_name: "threshold_adjustment_proposals" type: "array" unit: "json" aliases: ["Threshold_Adjustment_Proposals", "thresholdAdjustmentProposals"] note: "임계치 조정 제안 목록." max_child_qty: canonical_name: "max_child_qty" type: "number" unit: "count" aliases: ["Max_Child_Qty", "maxChildQty"] note: "TWAP 분할 최대 자식 주문 수량." n_slices: canonical_name: "n_slices" type: "number" unit: "count" aliases: ["N_Slices", "nSlices"] note: "분할 주문 횟수." participation_rate: canonical_name: "participation_rate" type: "number" unit: "ratio" aliases: ["Participation_Rate", "participationRate"] note: "시장 참여율." twap_required: canonical_name: "twap_required" type: "boolean" unit: "boolean" aliases: ["Twap_Required", "twapRequired"] note: "TWAP 필요 여부." institutional_flow_5d: canonical_name: "institutional_flow_5d" type: "number" unit: "KRW" aliases: ["Institutional_Flow_5D", "institutionalFlow5d"] note: "기관 5일 누적 순매수 금액." foreign_flow_5d: canonical_name: "foreign_flow_5d" type: "number" unit: "KRW" aliases: ["Foreign_Flow_5D", "foreignFlow5d"] note: "외국인 5일 누적 순매수 금액." sector_relative_strength_5d: canonical_name: "sector_relative_strength_5d" type: "number" unit: "ratio" aliases: ["Sector_Relative_Strength_5D", "sectorRelativeStrength5d"] note: "섹터 5일 상대강도." secular_leader_gate: canonical_name: "secular_leader_gate" type: "string" unit: "enum" aliases: ["secularLeaderGate"] note: "SECULAR_LEADER_REGIME_GATE_V1 결과 enum." breakout_quality_gate: canonical_name: "breakout_quality_gate" type: "string" unit: "enum" aliases: ["breakoutQualityGate", "breakout_quality_gate_state"] note: "BREAKOUT_QUALITY_GATE_V2 상태 enum." dart_risk: canonical_name: "dart_risk" type: "string" unit: "text" aliases: ["DART_Risk"] note: "공시 리스크 요약." final_action: canonical_name: "final_action" type: "string" unit: "enum" aliases: ["Final_Action"] note: "하네스 최종 액션." cash_preserve_style: canonical_name: "cash_preserve_style" type: "string" unit: "enum" aliases: ["Cash_Preserve_Style"] note: "현금확보 매도 스타일." allowed_action: canonical_name: "allowed_action" type: "string" unit: "enum" aliases: ["Allowed_Action"] note: "내부 허용 액션." t1_forced_sell_risk_score: canonical_name: "t1_forced_sell_risk_score" type: "number" unit: "score_0_100" aliases: ["T1_Forced_Sell_Risk_Score"] note: "매수 후 다음 거래일 강제 매도 위험 점수." sell_conflict_score: canonical_name: "sell_conflict_score" type: "number" unit: "score_0_100" aliases: ["Sell_Conflict_Score"] note: "매도/현금확보 게이트와 신규매수 충돌 점수." holding_stale_json: canonical_name: "holding_stale_json" type: "json" unit: "array" aliases: ["holdingStaleJson"] note: "N4_HOLDING_STALE_REVIEW_V1 — 보유 기간 기반 재검토 플래그 배열" holding_days: canonical_name: "holding_days" type: "number" unit: "integer_days" aliases: ["holdingDays"] note: "N4: entry_date 기준 보유 일수" stale_status: canonical_name: "stale_status" type: "string" unit: "enum" aliases: ["staleStatus"] note: "N4: STALE_POSITION(>60d)/REVIEW_SOON(>30d)/FRESH(<=30d)/ENTRY_DATE_MISSING" entry_date: canonical_name: "entry_date" type: "string" unit: "ISO_date" aliases: ["entryDate", "Entry_Date", "entry_date_iso"] note: "N4: account_snapshot의 진입일 컬럼 — HOLDING_STALE_REVIEW_V1 입력" regime_cash_uplift_min_pct: canonical_name: "regime_cash_uplift_min_pct" type: "number" unit: "pct" aliases: ["regimeCashUpliftMinPct"] note: "N5_REGIME_CASH_UPLIFT_V1 — 국면 상향 적용 후 실제 현금 최소 비율 (%). GAS 결정론적 산출" # ── O4 입력 필드 (performance sheet) ──────────────────────────────────── win_rate_30: canonical_name: "win_rate_30" type: "number" unit: "ratio_0_to_1" aliases: ["winRate30", "win_rate"] note: "O4 입력: 최근 30거래 승률 (0.0~1.0). readPerformanceSheet_() 산출" trades_used: canonical_name: "trades_used" type: "number" unit: "integer" aliases: ["tradesUsed"] note: "O4 입력: 성능 계산에 사용된 거래 수. 10 미만이면 INSUFFICIENT_HISTORY" # ── O-group 출력 필드 (2026-05-20) ───────────────────────────────────── single_position_weight_gate: canonical_name: "single_position_weight_gate" type: "string" unit: "enum" aliases: ["singlePositionWeightGate"] note: "O1_SINGLE_POSITION_WEIGHT_CAP_V1 — OVERWEIGHT_TRIM/PASS. 개별 종목 비중 상한 초과 여부" single_position_weight_json: canonical_name: "single_position_weight_json" type: "json" unit: "array" aliases: ["singlePositionWeightJson"] note: "O1: 종목별 weight_pct vs cap_pct 상태 배열" semiconductor_cluster_gate: canonical_name: "semiconductor_cluster_gate" type: "string" unit: "enum" aliases: ["semiconductorClusterGate"] note: "O2_SEMICONDUCTOR_CLUSTER_GATE_V1 — CLUSTER_BLOCK/PASS. 005930+000660 합산 비중의 국면별 상한 초과 여부" semiconductor_cluster_json: canonical_name: "semiconductor_cluster_json" type: "json" unit: "object" aliases: ["semiconductorClusterJson"] note: "O2: 반도체 클러스터 합산 비중 및 종목별 상세. threshold_pct는 국면별 가변" portfolio_drawdown_gate: canonical_name: "portfolio_drawdown_gate" type: "string" unit: "enum" aliases: ["portfolioDrawdownGate"] note: "O3_PORTFOLIO_DRAWDOWN_GATE_V1 — DRAWDOWN_FORCE_RISK_OFF/DRAWDOWN_CAUTION/PASS/INSUFFICIENT_DATA" portfolio_drawdown_pct: canonical_name: "portfolio_drawdown_pct" type: "number" unit: "pct" aliases: ["portfolioDrawdownPct"] note: "O3: 고점 대비 낙폭 % (양수=낙폭). GAS 결정론적 산출" portfolio_peak_krw: canonical_name: "portfolio_peak_krw" type: "number" unit: "KRW" aliases: ["portfolioPeakKrw"] note: "O3: 역대 총자산 고점 (원). settings 시트 자동 갱신" win_loss_streak_state: canonical_name: "win_loss_streak_state" type: "string" unit: "enum" aliases: ["winLossStreakState"] note: "O4_WIN_LOSS_STREAK_GUARD_V1 — EDGE_OK/EDGE_WEAK/EDGE_DEGRADED/EDGE_CRITICAL/INSUFFICIENT_HISTORY" win_loss_streak_buy_scale: canonical_name: "win_loss_streak_buy_scale" type: "number" unit: "multiplier" aliases: ["winLossStreakBuyScale"] note: "O4: atrQty에 곱해지는 배수 (0.25~1.0). GAS 결정론적 산출" win_loss_streak_win_rate_pct: canonical_name: "win_loss_streak_win_rate_pct" type: "number" unit: "pct" aliases: ["winLossStreakWinRatePct"] note: "O4: 최근 30거래 승률 % (0~100)" position_count_gate: canonical_name: "position_count_gate" type: "string" unit: "enum" aliases: ["positionCountGate"] note: "O5_POSITION_COUNT_LIMIT_V1 — POSITION_COUNT_BLOCK/PASS" position_count: canonical_name: "position_count" type: "number" unit: "integer" aliases: ["positionCount"] note: "O5: 현재 보유 종목 수 (holdings.length)" position_count_max: canonical_name: "position_count_max" type: "number" unit: "integer" aliases: ["positionCountMax"] note: "O5: 국면별 최대 허용 종목 수 (NEUTRAL:8, RISK_OFF:6)" # ── P5 입력 필드 (게이트 열거형) ──────────────────────────────────────── heat_gate_status: canonical_name: "heat_gate_status" type: "string" unit: "enum" aliases: ["heatGateStatus", "heat_gate"] note: "P5 입력: BLOCK_NEW_BUY/HALVE_NEW_BUY_QUANTITY/ALLOW_CONTINUE" cash_floor_status: canonical_name: "cash_floor_status" type: "string" unit: "enum" aliases: ["cashFloorStatus"] note: "P5 입력: HARD_BLOCK/TRIM_REQUIRED/PASS — cash_floor 게이트 상태" # ── P-group 출력 필드 (2026-05-20) ───────────────────────────────────── stop_breach_gate: canonical_name: "stop_breach_gate" type: "string" unit: "enum" aliases: ["stopBreachGate"] note: "P1_STOP_BREACH_ALERT_V1 — BREACH/APPROACHING/PASS" stop_breach_alert_json: canonical_name: "stop_breach_alert_json" type: "json" unit: "array" aliases: ["stopBreachAlertJson"] note: "P1: 종목별 손절가 이탈 경보 상태·gap_pct 배열" gap_pct: canonical_name: "gap_pct" type: "number" unit: "pct" aliases: ["gapPct"] note: "P1: (close - stop_price) / stop_price × 100. 양수=여유, 음수=이탈" tp_trigger_gate: canonical_name: "tp_trigger_gate" type: "string" unit: "enum" aliases: ["tpTriggerGate"] note: "P2_TP_TRIGGER_ALERT_V1 — TRIGGERED/PASS" tp_trigger_alert_json: canonical_name: "tp_trigger_alert_json" type: "json" unit: "array" aliases: ["tpTriggerAlertJson"] note: "P2: 익절가 도달 종목·tp_qty 연계 배열" heat_concentration_gate: canonical_name: "heat_concentration_gate" type: "string" unit: "enum" aliases: ["heatConcentrationGate"] note: "P3_HEAT_CONCENTRATION_ALERT_V1 — HEAT_CONCENTRATED/PASS/INSUFFICIENT_DATA" heat_concentration_json: canonical_name: "heat_concentration_json" type: "json" unit: "array" aliases: ["heatConcentrationJson"] note: "P3: 종목별 heat_krw·heat_share_pct 배열" heat_share_pct: canonical_name: "heat_share_pct" type: "number" unit: "pct" aliases: ["heatSharePct"] note: "P3: 해당 종목 Heat / totalHeatKrw × 100" regime_transition_type: canonical_name: "regime_transition_type" type: "string" unit: "enum" aliases: ["regimeTransitionType"] note: "P4_REGIME_TRANSITION_ALERT_V1 — UPGRADE/DOWNGRADE/LATERAL_SHIFT/NO_CHANGE" regime_transition_json: canonical_name: "regime_transition_json" type: "json" unit: "object" aliases: ["regimeTransitionJson"] note: "P4: 국면 전환 상세 (prev_regime, current_regime, affected_gates)" portfolio_health_label: canonical_name: "portfolio_health_label" type: "string" unit: "enum" aliases: ["portfolioHealthLabel"] note: "P5_PORTFOLIO_HEALTH_SCORE_V1 — HEALTHY/CAUTION/CRITICAL. 보고서 첫 줄 표시 의무" portfolio_health_score: canonical_name: "portfolio_health_score" type: "number" unit: "score_0_to_100" aliases: ["portfolioHealthScore"] note: "P5: 0~100 건전성 점수. max(0, 100-critical×30-caution×10)" portfolio_health_blocked_json: canonical_name: "portfolio_health_blocked_json" type: "json" unit: "array" aliases: ["portfolioHealthBlockedJson"] note: "P5: 활성화된 게이트별 severity(CRITICAL/CAUTION) 상세 배열" # ── [2026-05-21_CLA_HARNESS_V1] RS/Composite/RAG/SFG 판정 필드 ───────────── ss001_grade: canonical_name: "ss001_grade" type: "string" unit: "enum [A, B, C, D]" aliases: ["SS001_Grade", "ss001Grade"] note: "SS001_SCORE_V1 종합 등급. A=최우수, D=최하. composite_verdict 입력값." excess_ret_10d: canonical_name: "excess_ret_10d" type: "number" unit: "pct" aliases: ["Excess_Ret_10D", "excessRet10D"] note: "RS_VERDICT_V1: 종목 10일 수익률 − KOSPI 10일 수익률." rs_verdict: canonical_name: "rs_verdict" type: "string" unit: "enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]" aliases: ["RS_Verdict", "rsVerdict"] note: "RS_VERDICT_V1 판정. COMPOSITE_VERDICT_V1 및 RAG_V1 선행 입력." composite_verdict: canonical_name: "composite_verdict" type: "string" unit: "enum [PRIME_CANDIDATE, WATCH_CANDIDATE, REDUCE_CANDIDATE, EXIT_REVIEW, CLOSE_POSITION]" aliases: ["Composite_Verdict", "compositeVerdict"] note: "COMPOSITE_VERDICT_V1: ss001_grade × rs_verdict 매트릭스 판정." rag_v1: canonical_name: "rag_v1" type: "string" unit: "enum [PASS, FAIL, EXEMPT]" aliases: ["RAG_Verdict", "ragV1"] note: "REPLACEMENT_ALPHA_GATE_V1: 위성 신규 BUY 알파 검증 결과. FAIL → HOLD 강제." sfg_v1: canonical_name: "sfg_v1" type: "string" unit: "enum [TRIGGERED, CLEAR]" aliases: ["SFG_V1", "sfgV1"] note: "SATELLITE_FAILURE_GATE_V1: 위성 집단 실패 게이트. TRIGGERED → 모든 위성 BUY 차단." stock_drawdown_from_high_pct: canonical_name: "stock_drawdown_from_high_pct" type: "number" unit: "pct" aliases: ["Stock_Drawdown_From_High_Pct", "stockDrawdownFromHighPct"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: 종목 52주/가용 고점 대비 낙폭." excess_drawdown_pctp: canonical_name: "excess_drawdown_pctp" type: "number" unit: "pct_points" aliases: ["Excess_Drawdown_PctP", "excessDrawdownPctp"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: 종목 낙폭 - KOSPI 낙폭. 양수=시장보다 더 빠짐." recovery_ratio_5d: canonical_name: "recovery_ratio_5d" type: "number" unit: "ratio" aliases: ["Recovery_Ratio_5D", "recoveryRatio5d"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 5D 양수 구간 회복률." recovery_ratio_20d: canonical_name: "recovery_ratio_20d" type: "number" unit: "ratio" aliases: ["Recovery_Ratio_20D", "recoveryRatio20d"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 20D 양수 구간 회복률." downside_beta: canonical_name: "downside_beta" type: "number" unit: "ratio" aliases: ["Downside_Beta", "downsideBeta"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: KOSPI 하락 구간 수익률 비율. 프록시 사용 시 brt_method에 표시." rs_line_20d_slope: canonical_name: "rs_line_20d_slope" type: "number" unit: "slope" aliases: ["RS_Line_20D_Slope", "rsLine20dSlope"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: 20D 상대강도선 기울기." rs_line_60d_slope: canonical_name: "rs_line_60d_slope" type: "number" unit: "slope" aliases: ["RS_Line_60D_Slope", "rsLine60dSlope"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1: 60D 상대강도선 기울기." brt_verdict: canonical_name: "brt_verdict" type: "string" unit: "enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]" aliases: ["BRT_Verdict", "brtVerdict"] note: "BENCHMARK_RELATIVE_TIMESERIES_V1 최종 판정. RS_VERDICT_V2 입력." brt_method: canonical_name: "brt_method" type: "string" unit: "text" aliases: ["BRT_Method", "brtMethod"] note: "BRT 산출 방식. 과거 시계열 부재 시 PROXY_FROM_RET20_RET60." rs_verdict_v1_raw: canonical_name: "rs_verdict_v1_raw" type: "string" unit: "enum [LEADER, MARKET, LAGGARD, BROKEN, UNKNOWN]" aliases: ["RS_Verdict_V1_Raw", "rsVerdictV1Raw"] note: "RS_VERDICT_V2 감사용 V1 원본." saqg_v1: canonical_name: "saqg_v1" type: "string" unit: "enum [ELIGIBLE, WATCHLIST_ONLY, EXCLUDED, EXEMPT]" aliases: ["SAQG_V1", "saqgV1"] note: "SATELLITE_ALPHA_QUALITY_GATE_V1: 위성 후보 품질 게이트." sapg_status: canonical_name: "sapg_status" type: "string" unit: "enum [PASS, SAPG_ALERT, SAPG_CRITICAL, INSUFFICIENT_DATA]" aliases: ["SAPG_Status", "sapgStatus"] note: "SATELLITE_AGGREGATE_PNL_GATE_V1: 위성 합산 손익 게이트." globalKospiRet5D_: canonical_name: "globalKospiRet5D_" type: "number" unit: "pct" aliases: ["KOSPI_Ret5D_PreRead"] note: "GAS preReads: KOSPI 5D 수익률." globalKospiRet20D_: canonical_name: "globalKospiRet20D_" type: "number" unit: "pct" aliases: ["KOSPI_Ret20D_PreRead"] note: "GAS preReads: KOSPI 20D 수익률." globalKospiRet60D_: canonical_name: "globalKospiRet60D_" type: "number" unit: "pct" aliases: ["KOSPI_Ret60D_PreRead"] note: "GAS preReads: KOSPI 60D 수익률." globalKospiDrawdown_: canonical_name: "globalKospiDrawdown_" type: "number" unit: "pct" aliases: ["KOSPI_Drawdown_PreRead"] note: "GAS preReads: KOSPI 가용 고점 대비 낙폭." profit_loss: canonical_name: "profit_loss" type: "number" unit: "KRW" aliases: ["unrealized_pnl_krw", "profit_loss_krw"] note: "account_snapshot 평가손익. SATELLITE_AGGREGATE_PNL_GATE_V1 입력." cash_creation_purpose_lock: canonical_name: "cash_creation_purpose_lock" type: "string" unit: "enum" aliases: ["Cash_Creation_Purpose_Lock"] note: "CASH_CREATION_PURPOSE_LOCK_V1 출력 상태." alpha_evaluation_window_json: canonical_name: "alpha_evaluation_window_json" type: "json" unit: "array" aliases: ["Alpha_Evaluation_Window_JSON"] note: "ALPHA_EVALUATION_WINDOW_V1 T+20/T+60 알파 평가 결과." t20_return_pct: canonical_name: "t20_return_pct" type: "number" unit: "pct" aliases: ["T20_Return_Pct"] note: "ALPHA_EVALUATION_WINDOW_V1 입력." t60_return_pct: canonical_name: "t60_return_pct" type: "number" unit: "pct" aliases: ["T60_Return_Pct"] note: "ALPHA_EVALUATION_WINDOW_V1 입력." benchmark_core_return_pct: canonical_name: "benchmark_core_return_pct" type: "number" unit: "pct" aliases: ["Benchmark_Core_Return_Pct"] note: "ALPHA_EVALUATION_WINDOW_V1 벤치마크 코어 수익률." # ── [2026-05-23_PROPOSAL46] 신규 하네스 입력 필드 ──────────────────────────── volume_ratio_5d: canonical_name: "volume_ratio_5d" type: "number" unit: "ratio" aliases: ["Volume_Ratio_5D", "vol_ratio_5d"] note: "최근 당일 거래량 / 5일 평균 거래량. PREDICTIVE_ALPHA_ENGINE_V1 thesis 입력." distribution_signals_count: canonical_name: "distribution_signals_count" type: "number" unit: "float" aliases: ["weighted_sum", "Distribution_Signals_Count"] note: "DISTRIBUTION_SELL_DETECTOR_V1 가중합산 점수. ANTI_LATE_ENTRY_GATE_V2 GATE_3 입력." foreign_sell_consecutive_days: canonical_name: "foreign_sell_consecutive_days" type: "integer" unit: "days" aliases: ["foreign_consecutive_sell_days", "Foreign_Sell_Consecutive_Days"] note: "외국인 순매도 연속 일수. PREDICTIVE_ALPHA_ENGINE_V1 antithesis 및 MACRO_EVENT_SYNCHRONIZER_V1 입력." foreign_sell_krw_today: canonical_name: "foreign_sell_krw_today" type: "number" unit: "KRW" aliases: ["Foreign_Sell_KRW_Today"] note: "당일 외국인 순매도 금액(원). mega_sell_alert 판정 기준. macro 시트 _foreignFlow." days_since_entry: canonical_name: "days_since_entry" type: "integer" unit: "days" aliases: ["Days_Since_Entry"] note: "진입 후 경과 영업일 수. PREDICTIVE_ALPHA_ENGINE_V1 stale_position 판정 입력." fomc_days_remaining: canonical_name: "fomc_days_remaining" type: "integer" unit: "days" aliases: ["FOMC_Days_Remaining"] note: "다음 FOMC까지 남은 일수. settings 시트 event_calendar. MACRO_EVENT_SYNCHRONIZER_V1 입력." domestic_cpi: canonical_name: "domestic_cpi" type: "number" unit: "percent" aliases: ["Domestic_CPI", "cpi_yoy"] note: "국내 소비자물가지수 전년비(%). macro 시트. MACRO_EVENT_SYNCHRONIZER_V1 입력." vix: canonical_name: "vix" type: "number" unit: "index" aliases: ["VIX", "cboe_vix"] note: "CBOE VIX 공포지수. macro 시트 _vix. MACRO_EVENT_SYNCHRONIZER_V1 입력." us500_1w_change: canonical_name: "us500_1w_change" type: "number" unit: "percent" aliases: ["US500_1W_Change", "sp500_1w_change"] note: "S&P500 1주일 등락률(%). macro 시트 _us500Close. MACRO_EVENT_SYNCHRONIZER_V1 입력." base_qty: canonical_name: "base_qty" type: "integer" unit: "shares" aliases: ["Base_Qty", "base_sell_qty"] note: "SELL_QUANTITY_ALLOCATOR_V1 산출 기준 매도 수량. CASH_PRESERVATION_SELL_ENGINE_V2 입력." # ── [2026-06-17_P0_v8_9_ADOPTION] PORTFOLIO_TRANSITION_UTILITY_V1 신규 필드 ── ce70_net_profit_krw: canonical_name: "ce70_net_profit_krw" type: "number_or_null" unit: "KRW" aliases: ["CE70_NET_PROFIT_KRW", "ce70_profit"] note: "forecast_simulation_engine_v1 산출 — 세후비용 차감 손익분포의 30%분위(CE70). 표본 부족 시 null(DATA_MISSING)." tax_fee_slippage_krw: canonical_name: "tax_fee_slippage_krw" type: "number" unit: "KRW" aliases: ["TAX_FEE_SLIPPAGE_KRW", "tax_fee_slippage"] note: "sell_waterfall_engine_v4 산출 — 세금·수수료·슬리피지 합산 비용." cash_repair_benefit_krw: canonical_name: "cash_repair_benefit_krw" type: "number" unit: "KRW" aliases: ["CASH_REPAIR_BENEFIT_KRW"] note: "smart_cash_recovery_v9 연동 — 현금방어선 회복으로 인한 효용 가치." concentration_reduction_benefit_krw: canonical_name: "concentration_reduction_benefit_krw" type: "number" unit: "KRW" aliases: ["CONCENTRATION_REDUCTION_BENEFIT_KRW"] note: "portfolio_exposure.concentration_caps_v8_9_supplement 초과 해소로 인한 효용 가치." turnover_penalty_krw: canonical_name: "turnover_penalty_krw" type: "number" unit: "KRW" aliases: ["TURNOVER_PENALTY_KRW"] note: "회전율 예산 초과분에 대한 페널티. rebalancing_engine_v8_9.turnover_budget 참조." transition_utility_krw: canonical_name: "transition_utility_krw" type: "number_or_null" unit: "KRW" aliases: ["TRANSITION_UTILITY_KRW"] note: "PORTFOLIO_TRANSITION_UTILITY_V1 산출 — 양수일 때만 전환 후보 채택 검토. 입력 결측 시 null(NO_TRADE_AND_QUARANTINE)." avoided_tail_loss_krw: canonical_name: "avoided_tail_loss_krw" type: "number" unit: "KRW" aliases: ["AVOIDED_TAIL_LOSS_KRW"] note: "SELL_LOT_PARETO_SELECTOR_V1 입력 — 해당 lot을 매도하지 않았을 때 예상되는 꼬리위험 손실 회피액." tax_loss_benefit_krw: canonical_name: "tax_loss_benefit_krw" type: "number" unit: "KRW" aliases: ["TAX_LOSS_BENEFIT_KRW"] note: "SELL_LOT_PARETO_SELECTOR_V1 입력 — 손실 lot 매도 시 세금 절감 효과. 계좌유형 미확인 시 0(DATA_MISSING 표기)." reentry_cost_krw: canonical_name: "reentry_cost_krw" type: "number" unit: "KRW" aliases: ["REENTRY_COST_KRW"] note: "SELL_LOT_PARETO_SELECTOR_V1 입력 — 매도 후 재진입 시 예상 거래비용·스프레드." missed_upside_penalty_krw: canonical_name: "missed_upside_penalty_krw" type: "number" unit: "KRW" aliases: ["MISSED_UPSIDE_PENALTY_KRW"] note: "SELL_LOT_PARETO_SELECTOR_V1 입력 — CE70_NET_PROFIT_KRW 분포 기반 추정 상승분. 분포 없으면 0(보수적 하한)." lot_sell_score_krw: canonical_name: "lot_sell_score_krw" type: "number_or_null" unit: "KRW" aliases: ["LOT_SELL_SCORE_KRW"] note: "SELL_LOT_PARETO_SELECTOR_V1 산출 — 동일 hard_precedence 단계 내 lot 우선순위 점수." ce90_net_profit_krw: canonical_name: "ce90_net_profit_krw" type: "number_or_null" unit: "KRW" aliases: ["CE90_NET_PROFIT_KRW"] note: "FORECAST_SIMULATION_ENGINE_V1 산출 — 손익분포 10%분위(CE90). 표본 부족 시 null(WATCH_ONLY)." cvar95_loss_krw: canonical_name: "cvar95_loss_krw" type: "number_or_null" unit: "KRW" aliases: ["CVAR95_LOSS_KRW"] note: "FORECAST_SIMULATION_ENGINE_V1 산출 — 95% 신뢰구간 꼬리손실 평균. 표본 부족 시 null(WATCH_ONLY)." sample_count_total: canonical_name: "sample_count_total" type: "integer" unit: "count" aliases: ["SAMPLE_COUNT_TOTAL"] note: "FORECAST_SIMULATION_ENGINE_V1 입력 — 전체 손익 표본 수. spec/29_backtest_harness_contract.yaml 연동." sample_count_same_regime: canonical_name: "sample_count_same_regime" type: "integer" unit: "count" aliases: ["SAMPLE_COUNT_SAME_REGIME"] note: "FORECAST_SIMULATION_ENGINE_V1 입력 — 동일 레짐 손익 표본 수." net_profit_distribution_after_tax_fee_slippage: canonical_name: "net_profit_distribution_after_tax_fee_slippage" type: "list_or_null" unit: "list_of_KRW" aliases: ["NET_PROFIT_DISTRIBUTION"] note: "FORECAST_SIMULATION_ENGINE_V1 입력 — 세후·비용 차감 손익 표본 분포. spec/29_backtest_harness_contract.yaml 연동." execution_mode: canonical_name: "execution_mode" type: "string" unit: "none" aliases: ["EXECUTION_MODE", "global_execution_gate"] note: "AUDIT_ONLY | SHADOW | PILOT | LIVE_LIMITED | LIVE_FULL. PORTFOLIO_TRANSITION_UTILITY_V1·FORECAST_SIMULATION_ENGINE_V1 입력." # ── [2026-06-17_P1_v8_9_ADOPTION] SECTOR_EXPOSURE_GRAPH_V1 / LEADER_LIFECYCLE_GATE_V1 ── direct_weight_pct: canonical_name: "direct_weight_pct" type: "number" unit: "percent" aliases: ["DIRECT_WEIGHT_PCT"] note: "SECTOR_EXPOSURE_GRAPH_V1 입력 — 종목 직접보유 비중." etf_constituents_json: canonical_name: "etf_constituents_json" type: "list_or_null" unit: "json" aliases: ["ETF_CONSTITUENTS_JSON"] note: "SECTOR_EXPOSURE_GRAPH_V1 입력 — ETF 구성종목 [{ticker, weight_pct, sector_id}]. 미확인 시 ETF_BUY_BLOCKED." etf_weight_pct: canonical_name: "etf_weight_pct" type: "number" unit: "percent" aliases: ["ETF_WEIGHT_PCT"] note: "SECTOR_EXPOSURE_GRAPH_V1 입력 — 포트폴리오 내 ETF 비중." sector_id: canonical_name: "sector_id" type: "string" unit: "none" aliases: ["SECTOR_ID"] note: "canonical_sector_id_format(L1:L2:L3:L4) 준수. 예: EQ:TECH:SEMIS:HBM." peer_sector_betas: canonical_name: "peer_sector_betas" type: "list_or_null" unit: "list_of_ratio" aliases: ["PEER_SECTOR_BETAS"] note: "SECTOR_EXPOSURE_GRAPH_V1 입력 — 동일 macro_driver 공유 섹터 베타 목록. 미확인 시 raw beta 사용 + PARTIAL 표기." sector_family_total_pct: canonical_name: "sector_family_total_pct" type: "number_or_null" unit: "percent" aliases: ["SECTOR_FAMILY_TOTAL_PCT"] note: "SECTOR_EXPOSURE_GRAPH_V1 산출 — direct_weight_pct + lookthrough_etf_weight_pct." relative_strength_leads_sector: canonical_name: "relative_strength_leads_sector" type: "boolean" unit: "none" aliases: ["RELATIVE_STRENGTH_LEADS_SECTOR"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목." volume_quality_confirmed: canonical_name: "volume_quality_confirmed" type: "boolean" unit: "none" aliases: ["VOLUME_QUALITY_CONFIRMED"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목." above_ma60_or_reclaim_confirmed: canonical_name: "above_ma60_or_reclaim_confirmed" type: "boolean" unit: "none" aliases: ["ABOVE_MA60_OR_RECLAIM_CONFIRMED"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — promotion_requires_all 항목, demotion_triggers_any 항목." earnings_revision_status: canonical_name: "earnings_revision_status" type: "string" unit: "none" aliases: ["EARNINGS_REVISION_STATUS"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — positive | neutral | negative." institutional_flow_status: canonical_name: "institutional_flow_status" type: "string" unit: "none" aliases: ["INSTITUTIONAL_FLOW_STATUS"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — accumulation | neutral | distribution." current_role: canonical_name: "current_role" type: "string" unit: "none" aliases: ["CURRENT_ROLE"] note: "LEADER_LIFECYCLE_GATE_V1 입력 — 직전 평가 leader_role. 최초 평가 시 LAGGARD." leader_role: canonical_name: "leader_role" type: "string" unit: "none" aliases: ["LEADER_ROLE"] note: "LEADER_LIFECYCLE_GATE_V1 산출 — CAPTAIN | CORE_LEADER | ENABLER | CYCLICAL_BETA | LAGGARD | DISTRIBUTION_RISK." # ── [2026-06-17_P1_v8_9_ADOPTION] EXECUTION_CAPACITY_LADDER_V1 신규 필드 ── planned_order_amount_krw: canonical_name: "planned_order_amount_krw" type: "number" unit: "KRW" aliases: ["PLANNED_ORDER_AMOUNT_KRW"] note: "EXECUTION_CAPACITY_LADDER_V1 입력 — 계획된 주문금액." avg_trade_value_20d_krw: canonical_name: "avg_trade_value_20d_krw" type: "number_or_null" unit: "KRW" aliases: ["AVG_TRADE_VALUE_20D_KRW", "AvgTradeValue_20D"] note: "EXECUTION_CAPACITY_LADDER_V1 입력 — 20일 평균거래대금. 미확인 시 EXECUTION_PLAN_BLOCKED." intraday_trade_value_krw: canonical_name: "intraday_trade_value_krw" type: "number_or_null" unit: "KRW" aliases: ["INTRADAY_TRADE_VALUE_KRW"] note: "EXECUTION_CAPACITY_LADDER_V1 입력 — 당일 누적 거래대금." orderbook_top3_depth_krw: canonical_name: "orderbook_top3_depth_krw" type: "number_or_null" unit: "KRW" aliases: ["ORDERBOOK_TOP3_DEPTH_KRW"] note: "EXECUTION_CAPACITY_LADDER_V1 입력 — 호가창 상위 3단계 누적 깊이." spread_bps: canonical_name: "spread_bps" type: "number_or_null" unit: "basis_points" aliases: ["SPREAD_BPS"] note: "EXECUTION_CAPACITY_LADDER_V1 입력 — 매수/매도 호가 스프레드. spread_widen_cancel_rule 연동." order_capacity_krw: canonical_name: "order_capacity_krw" type: "number_or_null" unit: "KRW" aliases: ["ORDER_CAPACITY_KRW"] note: "EXECUTION_CAPACITY_LADDER_V1 산출 — 체결 가능 용량 상한. 결측 입력 시 null(EXECUTION_PLAN_BLOCKED)." # ── [2026-06-17_P1_v8_9_ADOPTION] MODEL_GOVERNANCE_KILL_SWITCH_V1 신규 필드 ── data_quarantine_rate_pct: canonical_name: "data_quarantine_rate_pct" type: "number_or_null" unit: "percent" aliases: ["DATA_QUARANTINE_RATE_PCT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 결측/충돌로 quarantine된 입력 비율. >5%면 kill switch." implementation_shortfall_ratio: canonical_name: "implementation_shortfall_ratio" type: "number_or_null" unit: "ratio" aliases: ["IMPLEMENTATION_SHORTFALL_RATIO"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 실제/기대 슬리피지 비율. >2.0이면 kill switch." t5_hit_rate_pct: canonical_name: "t5_hit_rate_pct" type: "number_or_null" unit: "percent" aliases: ["T5_HIT_RATE_PCT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/29_backtest_harness_contract.yaml:t5_op_rate 연동." t5_sample_count: canonical_name: "t5_sample_count" type: "integer" unit: "count" aliases: ["T5_SAMPLE_COUNT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — t5_hit_rate_pct 표본 수. 30건 미만이면 hit_rate kill switch 미적용." calibration_error: canonical_name: "calibration_error" type: "number_or_null" unit: "ratio" aliases: ["CALIBRATION_ERROR"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/calibration_registry.yaml 연동." calibration_error_limit: canonical_name: "calibration_error_limit" type: "number" unit: "ratio" aliases: ["CALIBRATION_ERROR_LIMIT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — calibration_error 허용 상한." account_mdd_pct: canonical_name: "account_mdd_pct" type: "number_or_null" unit: "percent" aliases: ["ACCOUNT_MDD_PCT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — 현재 계좌 MDD." account_mdd_budget_pct: canonical_name: "account_mdd_budget_pct" type: "number" unit: "percent" aliases: ["ACCOUNT_MDD_BUDGET_PCT"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 입력 — spec/risk/aggregate_risk.yaml MDD 예산." kill_switch_triggered: canonical_name: "kill_switch_triggered" type: "boolean" unit: "none" aliases: ["KILL_SWITCH_TRIGGERED"] note: "MODEL_GOVERNANCE_KILL_SWITCH_V1 산출 — kill_switch_conditions 중 하나 이상 true." # ── [2026-06-17_P2_v8_9_ADOPTION] SCENARIO_SHOCK_MATRIX_V1 신규 필드 ── scenario_id: canonical_name: "scenario_id" type: "string" unit: "none" aliases: ["SCENARIO_ID"] note: "SCENARIO_SHOCK_MATRIX_V1 입력 — base_case | adverse_case | liquidity_drought_case | crisis_case | fx_shock_case | tax_cost_case." scenario_results: canonical_name: "scenario_results" type: "list_or_null" unit: "list_of_object" aliases: ["SCENARIO_RESULTS"] note: "SCENARIO_SHOCK_MATRIX_V1 산출 — [{scenario_id, scenario_ce70_krw, scenario_cvar95_krw}]. 분포 결측 시 null." # ── [2026-06-17_P2_v8_9_ADOPTION] TRANSITION_SET_ENUMERATOR_V1 신규 필드 ── evaluated_candidates: canonical_name: "evaluated_candidates" type: "list" unit: "list_of_object" aliases: ["EVALUATED_CANDIDATES"] note: "TRANSITION_SET_ENUMERATOR_V1 입력 — PORTFOLIO_TRANSITION_UTILITY_V1.candidate_actions 산출물." max_set_size: canonical_name: "max_set_size" type: "integer" unit: "count" aliases: ["MAX_SET_SIZE"] note: "TRANSITION_SET_ENUMERATOR_V1 입력 — 조합 폭발 방지 상한. 기본값 3." selected_transition_set: canonical_name: "selected_transition_set" type: "list" unit: "list_of_string" aliases: ["SELECTED_TRANSITION_SET"] note: "TRANSITION_SET_ENUMERATOR_V1 산출 — 최종 선택된 candidate_id 조합. 빈 리스트면 NO_TRADE." # ── [2026-06-17_P2_v8_9_ADOPTION] IMMUTABLE_DECISION_LEDGER_V1 신규 필드 ── decision_id: canonical_name: "decision_id" type: "string" unit: "none" aliases: ["DECISION_ID"] note: "IMMUTABLE_DECISION_LEDGER_V1 입력 — 동일 ID 재기록 시 DUPLICATE_DECISION_ID." input_hash_bundle: canonical_name: "input_hash_bundle" type: "string" unit: "none" aliases: ["INPUT_HASH_BUNDLE"] note: "IMMUTABLE_DECISION_LEDGER_V1 입력 — 의사결정 시점 입력 데이터 해시 묶음." candidate_ids: canonical_name: "candidate_ids" type: "list" unit: "list_of_string" aliases: ["CANDIDATE_IDS"] note: "IMMUTABLE_DECISION_LEDGER_V1 입력 — 평가 대상이 된 candidate_id 목록." selected_transition_id: canonical_name: "selected_transition_id" type: "string_or_null" unit: "none" aliases: ["SELECTED_TRANSITION_ID"] note: "IMMUTABLE_DECISION_LEDGER_V1 입력 — NO_TRADE면 null." ledger_append_status: canonical_name: "ledger_append_status" type: "string" unit: "none" aliases: ["LEDGER_APPEND_STATUS"] note: "IMMUTABLE_DECISION_LEDGER_V1 산출 — APPENDED | DUPLICATE_DECISION_ID | REJECTED_MISSING_FIELDS." # ── [2026-06-17_P2_v8_9_ADOPTION] EXECUTION_PLAN_COMPILER_V1 신규 필드 ── revalidation_snapshot: canonical_name: "revalidation_snapshot" type: "object_or_null" unit: "json" aliases: ["REVALIDATION_SNAPSHOT"] note: "EXECUTION_PLAN_COMPILER_V1 입력 — slice 직전 시점 {cash_floor_pct, deployable_cash_krw, order_capacity_krw, spread_bps}." baseline_snapshot: canonical_name: "baseline_snapshot" type: "object_or_null" unit: "json" aliases: ["BASELINE_SNAPSHOT"] note: "EXECUTION_PLAN_COMPILER_V1 입력 — slice 1 컴파일 시점 스냅샷. cancel_remaining_if 기준값." compiled_slices: canonical_name: "compiled_slices" type: "list_or_null" unit: "list_of_object" aliases: ["COMPILED_SLICES"] note: "EXECUTION_PLAN_COMPILER_V1 산출 — [{slice_index, slice_amount_krw, status}]." # ── [2026-06-17_P3_v8_9_ADOPTION] STATE_VECTOR_CONSTRUCTOR_V1 / REBALANCE_CADENCE_GATE_V1 신규 필드 ── cash_ladder: canonical_name: "cash_ladder" type: "object_or_null" unit: "json" aliases: ["CASH_LADDER"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/formulas/domains/cash.yaml:CASH_RATIOS_V1 산출." positions: canonical_name: "positions" type: "list_or_null" unit: "list_of_object" aliases: ["POSITIONS"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/15_account_snapshot_contract.yaml 보유종목 목록." sector_exposure_graph: canonical_name: "sector_exposure_graph" type: "list_or_null" unit: "list_of_object" aliases: ["SECTOR_EXPOSURE_GRAPH"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — SECTOR_EXPOSURE_GRAPH_V1.rows 산출." goal_progress_pct: canonical_name: "goal_progress_pct" type: "number_or_null" unit: "percent" aliases: ["GOAL_PROGRESS_PCT"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — total_asset_krw / target_asset_krw * 100." factor_exposures: canonical_name: "factor_exposures" type: "list_or_null" unit: "list_of_object" aliases: ["FACTOR_EXPOSURES"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/factor_risk.yaml 연동." tax_lots: canonical_name: "tax_lots" type: "list_or_null" unit: "list_of_object" aliases: ["TAX_LOTS"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/15_account_snapshot_contract.yaml 연동." risk_bucket_weights: canonical_name: "risk_bucket_weights" type: "object_or_null" unit: "json" aliases: ["RISK_BUCKET_WEIGHTS"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/portfolio_exposure.yaml 연동." macro_regime_probabilities: canonical_name: "macro_regime_probabilities" type: "object_or_null" unit: "json" aliases: ["MACRO_REGIME_PROBABILITIES"] note: "STATE_VECTOR_CONSTRUCTOR_V1 입력 — spec/risk/market_risk_cash.yaml 연동." state_vector: canonical_name: "state_vector" type: "object_or_null" unit: "json" aliases: ["STATE_VECTOR"] note: "STATE_VECTOR_CONSTRUCTOR_V1 산출 — 결측 component는 null + missing_components 기록." missing_components: canonical_name: "missing_components" type: "list" unit: "list_of_string" aliases: ["MISSING_COMPONENTS"] note: "STATE_VECTOR_CONSTRUCTOR_V1 산출 — null로 남은 component 이름 목록." transition_utility_after_tax_cost_krw: canonical_name: "transition_utility_after_tax_cost_krw" type: "number_or_null" unit: "KRW" aliases: ["TRANSITION_UTILITY_AFTER_TAX_COST_KRW"] note: "REBALANCE_CADENCE_GATE_V1 입력 — PORTFOLIO_TRANSITION_UTILITY_V1.transition_utility_krw와 동일 출처." hard_risk_block_active: canonical_name: "hard_risk_block_active" type: "boolean_or_null" unit: "none" aliases: ["HARD_RISK_BLOCK_ACTIVE"] note: "REBALANCE_CADENCE_GATE_V1 입력 — spec/risk/aggregate_risk.yaml 연동." rebalance_execution_allowed: canonical_name: "rebalance_execution_allowed" type: "boolean" unit: "none" aliases: ["REBALANCE_EXECUTION_ALLOWED"] note: "REBALANCE_CADENCE_GATE_V1 산출 — true여야 실제 리밸런싱 실행 가능." # ── [2026-06-17_P3_v8_9_ADOPTION] WALK_FORWARD_BOOTSTRAP_V1 신규 필드 ── historical_returns: canonical_name: "historical_returns" type: "list_or_null" unit: "list_of_object" aliases: ["HISTORICAL_RETURNS"] note: "WALK_FORWARD_BOOTSTRAP_V1 입력 — [{date, regime_state, net_return_after_cost_pct}]. spec/29_backtest_harness_contract.yaml 연동." current_regime_state: canonical_name: "current_regime_state" type: "string" unit: "none" aliases: ["CURRENT_REGIME_STATE"] note: "WALK_FORWARD_BOOTSTRAP_V1 입력 — regime_matched 리샘플링 필터 기준." bootstrap_method: canonical_name: "bootstrap_method" type: "string" unit: "none" aliases: ["BOOTSTRAP_METHOD"] note: "WALK_FORWARD_BOOTSTRAP_V1 입력 — walk_forward | regime_matched." # ── [2026-06-17_P3_v8_9_ADOPTION] WEEKLY_LEGACY_TRANSFER_PLAN_V1 신규 필드 ── weekly_legacy_to_cma_transfer_plan_krw: canonical_name: "weekly_legacy_to_cma_transfer_plan_krw" type: "number" unit: "KRW" aliases: ["WEEKLY_LEGACY_TO_CMA_TRANSFER_PLAN_KRW"] note: "WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — spec/risk/portfolio_exposure.yaml operator_cashflow_config 고정 계획값." transfer_confirmed: canonical_name: "transfer_confirmed" type: "boolean_or_null" unit: "none" aliases: ["TRANSFER_CONFIRMED"] note: "WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — null은 false로 간주(보수적)." transfer_confirmed_amount_krw: canonical_name: "transfer_confirmed_amount_krw" type: "number_or_null" unit: "KRW" aliases: ["TRANSFER_CONFIRMED_AMOUNT_KRW"] note: "WEEKLY_LEGACY_TRANSFER_PLAN_V1 입력 — transfer_confirmed=true일 때만 값 존재." # ── [2026-06-18_TECHNICAL_SIGNALS_P4] 10개 고전 기술전략 갭분석 채택 신규 필드 ── ma20_prev: canonical_name: "ma20_prev" type: "number_or_null" unit: "KRW_per_share" aliases: ["MA20_PREV"] note: "GOLDEN_CROSS_SIGNAL_V1 입력 — 전일 ma20." ma60_prev: canonical_name: "ma60_prev" type: "number_or_null" unit: "KRW_per_share" aliases: ["MA60_PREV"] note: "GOLDEN_CROSS_SIGNAL_V1 입력 — 전일 ma60." ma120: canonical_name: "ma120" type: "number_or_null" unit: "KRW_per_share" aliases: ["MA120", "120일선"] note: "TREND_FILTER_GATE_V1 입력 — 120일 이동평균." ma120_prev: canonical_name: "ma120_prev" type: "number_or_null" unit: "KRW_per_share" aliases: ["MA120_PREV"] note: "TREND_FILTER_GATE_V1 입력 — 전일 ma120." high_price: canonical_name: "high_price" type: "number" unit: "KRW_per_share" aliases: ["High", "고가", "high"] note: "STRONG_CLOSE_SIGNAL_V1 입력 — 당일 고가." low_price: canonical_name: "low_price" type: "number" unit: "KRW_per_share" aliases: ["Low", "저가", "low"] note: "STRONG_CLOSE_SIGNAL_V1 입력 — 당일 저가." bb_width: canonical_name: "bb_width" type: "number_or_null" unit: "percent" aliases: ["BB_WIDTH"] note: "VOLATILITY_EXPANSION_BREAKOUT_V1 입력 — 20일 볼린저밴드 폭." bb_width_20d_percentile: canonical_name: "bb_width_20d_percentile" type: "number_or_null" unit: "percent" aliases: ["BB_WIDTH_20D_PERCENTILE"] note: "VOLATILITY_EXPANSION_BREAKOUT_V1 입력 — 최근 20일 분포 내 bb_width 백분위. 낮을수록 squeeze." daily_close_changes: canonical_name: "daily_close_changes" type: "list_or_null" unit: "list_of_percent" aliases: ["DAILY_CLOSE_CHANGES"] note: "CONSECUTIVE_STREAK_V1 입력 — 최근 N거래일 일별 종가 변화율(%) 리스트, 최신값이 마지막." prior_high: canonical_name: "prior_high" type: "number_or_null" unit: "KRW_per_share" aliases: ["PRIOR_HIGH"] note: "BREAKOUT_FAILURE_STOP_V1 입력 — 진입 당시 돌파 기준 전고점." golden_cross_today: canonical_name: "golden_cross_today" type: "boolean_or_null" unit: "none" aliases: ["GOLDEN_CROSS_TODAY"] note: "GOLDEN_CROSS_SIGNAL_V1 산출 — STRATEGY_SCORING 보조신호. 단독 BUY 트리거 금지." strong_close: canonical_name: "strong_close" type: "boolean_or_null" unit: "none" aliases: ["STRONG_CLOSE"] note: "STRONG_CLOSE_SIGNAL_V1 산출." close_position_pct: canonical_name: "close_position_pct" type: "number_or_null" unit: "percent" aliases: ["CLOSE_POSITION_PCT"] note: "STRONG_CLOSE_SIGNAL_V1 산출 — (close-low)/(high-low)*100." volatility_expansion_breakout: canonical_name: "volatility_expansion_breakout" type: "boolean_or_null" unit: "none" aliases: ["VOLATILITY_EXPANSION_BREAKOUT"] note: "VOLATILITY_EXPANSION_BREAKOUT_V1 산출 — BREAKOUT_QUALITY_GATE_V2 통과 전제." fifty_two_week_high_breakout: canonical_name: "fifty_two_week_high_breakout" type: "boolean_or_null" unit: "none" aliases: ["FIFTY_TWO_WEEK_HIGH_BREAKOUT"] note: "FIFTY_TWO_WEEK_HIGH_TRIGGER_V1 산출 — BREAKOUT_QUALITY_GATE_V2 입력 전용." up_streak: canonical_name: "up_streak" type: "integer_or_null" unit: "count" aliases: ["UP_STREAK"] note: "CONSECUTIVE_STREAK_V1 산출 — 연속 상승 일수." trend_filter_pass: canonical_name: "trend_filter_pass" type: "boolean_or_null" unit: "none" aliases: ["TREND_FILTER_PASS"] note: "TREND_FILTER_GATE_V1 산출 — close>ma120 AND ma120 상승 중." breakout_failure: canonical_name: "breakout_failure" type: "boolean_or_null" unit: "none" aliases: ["BREAKOUT_FAILURE"] note: "BREAKOUT_FAILURE_STOP_V1 산출 — true이면 SELL_RISK_EXIT_REVIEW." deployable_cash_contribution_krw: canonical_name: "deployable_cash_contribution_krw" type: "number" unit: "KRW" aliases: ["DEPLOYABLE_CASH_CONTRIBUTION_KRW"] note: "WEEKLY_LEGACY_TRANSFER_PLAN_V1 산출 — 확정 전이면 0, 확정 후 transfer_confirmed_amount_krw." plan_status: canonical_name: "plan_status" type: "string" unit: "none" aliases: ["PLAN_STATUS"] note: "WEEKLY_LEGACY_TRANSFER_PLAN_V1 산출 — PLANNED_NOT_DEPLOYABLE | CONFIRMED_DEPLOYABLE." normalization_rules: - id: "FIELD_ALIAS_CANONICALIZATION" rule: "모든 입력은 계산 전 canonical_name으로 변환한다." - id: "KRW_100M_TO_KRW" applies_to: ["avg_trade_value_5d"] condition: "source field suffix is _M or value labeled 억원" transform: "value * 100000000" - id: "FLOW_YN_TO_BOOLEAN" applies_to: ["flow_ok"] transform: "Y=true, N=false" - id: "SHARES_INTEGER" applies_to: ["quantity", "flow_rows"] transform: "must be integer; decimal shares are invalid except final floor in sizing"