Files
QuantEngineByItz/spec/12_field_dictionary.yaml
T
kjh2064 ee3e799de1 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>
2026-06-13 13:20:14 +09:00

2205 lines
77 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 입력."
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"