chore: 최상위 룰 매니페스트 파일을 spec/ 폴더로 정리하고 도구 경로 참조 수정
This commit is contained in:
@@ -0,0 +1,519 @@
|
||||
meta:
|
||||
title: "은퇴자산 투자 포트폴리오 운용 지침 — Modular Manifest"
|
||||
version: "2026-05-20-HARNESS_V4"
|
||||
language: "ko-KR"
|
||||
timezone: "Asia/Seoul"
|
||||
currency: "KRW"
|
||||
target_asset_krw: 500000000
|
||||
target_deadline: "2026-12-31"
|
||||
purpose: >
|
||||
이 파일은 LLM이 투자 판단에 사용할 구조화 명세의 manifest다.
|
||||
상세 알고리즘은 spec/*.yaml에 분리하고, 보고서 양식은 RetirementAssetPortfolioReportTemplate.yaml에 둔다.
|
||||
자연어 설명보다 구조화 명세와 수치 공식이 우선한다.
|
||||
제공 raw 분석 데이터의 1차 LLM 입력은 'GatherTradingData.json'이며,
|
||||
xlsx는 GAS/Google Sheets 원본·감사·JSON 재생성 소스다.
|
||||
JSON의 필수 경로와 컬럼은 spec/02_data_contract.yaml 및 tools/validate_data_sample_json.py로 검증한다.
|
||||
|
||||
primary_raw_data:
|
||||
json: "GatherTradingData.json"
|
||||
source_workbook: "GatherTradingData.xlsx"
|
||||
role: "provided_raw_analysis_data_json"
|
||||
required_json_paths: ["data.data_feed", "data.sector_flow", "data.macro", "data.event_risk", "data.core_satellite"]
|
||||
validation_tool: "tools/validate_data_sample_json.py"
|
||||
conversion_tool: "tools/convert_xlsx_to_json.py"
|
||||
mapping_file: "spec/14_raw_workbook_mapping.yaml"
|
||||
account_snapshot_contract: "spec/15_account_snapshot_contract.yaml"
|
||||
precedence: "사용자 제공 raw JSON이 공개 웹 조회보다 우선한다. 웹 조회는 누락·충돌·최신성 검산용 보조 소스다."
|
||||
xlsx_usage: "xlsx는 원본 감사 또는 JSON 재생성 확인에만 직접 사용한다. 일반 LLM 분석에서 xlsx 직접 파싱 금지."
|
||||
sheet_diet_policy:
|
||||
canonical_required: ["data_feed", "sector_flow", "macro", "event_risk", "core_satellite"]
|
||||
retained_support: ["settings", "account_snapshot", "sector_universe", "sector_flow_history", "etf_nav_manual", "universe", "monthly_history", "performance"]
|
||||
deprecated_sheets: ["positions", "chat_input", "etf_raw", "core_satellite_status", "orbit_gap", "asset_history"]
|
||||
transient_delete_when_complete: ["cs_chunk_N"]
|
||||
rule: "orbit_gap·asset_history는 monthly_history로 통합. etf_raw는 in-memory map 전환. core_satellite_status는 ScriptProperties 이전. cs_chunk_N은 병합 완료 후 삭제."
|
||||
last_cleanup:
|
||||
completed_at: "2026-05-18T09:50:00+09:00"
|
||||
removed_sheets: ["cs_chunk_0"]
|
||||
backup_file: "GatherTradingData.xlsx.20260518_095000.bak"
|
||||
validation_status: "PASS"
|
||||
|
||||
accepted_proposals:
|
||||
- proposal_id: "2026-05-18_SENIOR_VETERAN_UPGRADE"
|
||||
source_file: "proposals/2026-05-18_시니어_전문가_고도화_제안_SafeLanding_Factor.yaml"
|
||||
adopted_scope: "PARTIAL_MANIFEST_ONLY"
|
||||
adopted_items:
|
||||
- "Safe Landing Protocol은 spec/01_objective_profile.yaml에 이미 존재하므로 manifest에는 중복 본문을 복사하지 않는다."
|
||||
- "Factor Exposure Overload Brake는 동일 섹터 외 고베타·고모멘텀 과집중 차단 원칙으로 채택한다."
|
||||
- "Non-Linear Gap Risk Buffer는 이벤트 3거래일 전~당일 신규 진입 수량 산출 보수화 원칙으로 채택한다."
|
||||
- "Signal-Price Divergence Guard는 HTS 현재가와 JSON 기준 가격 3% 초과 괴리 시 BUY_BLOCKED 원칙으로 채택한다."
|
||||
rejected_or_deferred_items:
|
||||
- "canonical spec 세부 공식 수정은 별도 surgical update로만 수행한다."
|
||||
- "risk hard stop 완화, 목표 미달에 따른 risk_budget 강제 상향, 중복 SLP 본문 추가는 반영하지 않는다."
|
||||
duplicate_work_prevention: "이 proposal_id는 manifest 레벨에서 처리 완료. 동일 제안 재검토 시 미반영 세부 spec만 별도 target_file로 제안한다."
|
||||
completed_at: "2026-05-18T09:40:11+09:00"
|
||||
backup_file: "은퇴자산포트폴리오_20260518_094011.yaml.bak"
|
||||
validation_status: "PASS"
|
||||
|
||||
source_of_truth_order:
|
||||
1: "spec/00_execution_contract.yaml — master prohibitions, hard stops, capture ledger, order validation"
|
||||
2: "spec/risk/aggregate_risk.yaml — Total_Heat and portfolio hard stops"
|
||||
3: "spec/risk/circuit_breakers.yaml — circuit breakers and trading controls"
|
||||
4: "spec/risk/market_risk_cash.yaml — market risk score and cash rules"
|
||||
5: "spec/risk/portfolio_exposure.yaml — cash floor, duplicate exposure, target allocation"
|
||||
6: "spec/12_field_dictionary.yaml — canonical field names, aliases, units, missing policies"
|
||||
7: "spec/13_formula_registry.yaml — executable formula contracts for LLM calculation"
|
||||
7a: "spec/03_formulas/formula_registry.normalized.yaml — normalized formula registry index for governance validation"
|
||||
7b2: "spec/03_formulas/output_field_owner_ledger.yaml — output field owner ledger for writer precedence validation"
|
||||
7b: "spec/13b_harness_formulas.yaml — harness V4 formulas: TP_VALIDITY_CHECK_V1, PROFIT_LOCK_STAGE_CLASSIFIER_V1, REGIME_TRIM_WEIGHT_V1"
|
||||
7c: "spec/factor_lifecycle_registry.yaml — factor lifecycle status core/retired classification"
|
||||
8: "spec/14_raw_workbook_mapping.yaml — market raw JSON path/column mapping"
|
||||
9: "spec/15_account_snapshot_contract.yaml — image capture account/holding/cash contract"
|
||||
9b: "spec/gas_adapter_contract.yaml — Apps Script exported function sheets and arities contract"
|
||||
10: "spec/19_harness_contract.yaml — deterministic harness contract, lock semantics, sync validation"
|
||||
10b: "spec/20_harness_output_schema.yaml — mandatory numeric output schema; GAS coverage measurement baseline"
|
||||
10c: "spec/21_harness_governance_contract.yaml — harness governance 3-layer lock and release hardlocks"
|
||||
11: "spec/02_data_contract.yaml — source priority, data completeness, freshness, parsing rules"
|
||||
12: "spec/09_decision_flow.yaml — state-machine decision order"
|
||||
13: "spec/11_market_regime.yaml — canonical only for market regime classification"
|
||||
14: "spec/08_scoring_rules.yaml — rule_id based hard filters, scoring, grade thresholds"
|
||||
15: "spec/10_portfolio_rules.yaml — account routing, exposure, cash and contribution constraints"
|
||||
16: "spec/strategy/sector_model.yaml — sector and stock scoring model"
|
||||
17: "spec/strategy/entry_core.yaml — core entry gates"
|
||||
18: "spec/strategy/leader_scan.yaml — daily leader scan and anti-climax gate"
|
||||
19: "spec/strategy/staged_entry.yaml — staged entry and pullback reentry"
|
||||
20: "spec/05_position_sizing.yaml — volatility targeting, Bayesian/Kelly brake, integer quantity"
|
||||
21: "spec/exit/stop_loss.yaml — stop loss policy"
|
||||
22: "spec/exit/take_profit.yaml — take profit policy"
|
||||
23: "spec/exit/proactive_exit_radar.yaml — proactive exit radar"
|
||||
24: "spec/01_objective_profile.yaml — objective, account constraints, contribution policy"
|
||||
24b: "spec/property_invariants.yaml — property invariants specification"
|
||||
24c: "spec/anti_late_entry_contract.yaml — anti late entry contract"
|
||||
24d: "spec/profit_preservation_contract.yaml — profit preservation contract"
|
||||
24e: "spec/operating_cadence.yaml — weekly/monthly cadence specification"
|
||||
25: "spec/07_output_schema.yaml — recommendation grade, tables, HTS output schema"
|
||||
26: "schemas/output_schema.json — machine-readable output contract for LLM responses"
|
||||
27: "RetirementAssetPortfolioReportTemplate.yaml — human-readable report templates loaded only when report output is needed"
|
||||
28: "prompts/*.md — reusable prompt entrypoints for analysis/review"
|
||||
29: "examples/*.yaml and examples/examples.jsonl — examples are illustrative and never override rules"
|
||||
30: "tests/*.yaml — consistency checks for future edits"
|
||||
31: "spec/03_risk_policy.yaml — legacy redirect stub for backward compatibility"
|
||||
32: "spec/04_strategy_rules.yaml — legacy redirect stub for backward compatibility"
|
||||
|
||||
load_sequence:
|
||||
STEP_1_always:
|
||||
files:
|
||||
- "RetirementAssetPortfolio.yaml"
|
||||
- "spec/00_execution_contract.yaml"
|
||||
- "spec/risk/aggregate_risk.yaml"
|
||||
- "spec/risk/circuit_breakers.yaml"
|
||||
- "spec/risk/market_risk_cash.yaml"
|
||||
- "spec/risk/portfolio_exposure.yaml"
|
||||
- "spec/risk/factor_risk.yaml"
|
||||
- "spec/12_field_dictionary.yaml"
|
||||
- "spec/13_formula_registry.yaml"
|
||||
- "spec/03_formulas/formula_registry.normalized.yaml"
|
||||
- "spec/03_formulas/output_field_owner_ledger.yaml"
|
||||
- "spec/factor_lifecycle_registry.yaml"
|
||||
- "spec/13b_harness_formulas.yaml"
|
||||
- "spec/14_raw_workbook_mapping.yaml"
|
||||
- "spec/15_account_snapshot_contract.yaml"
|
||||
- "spec/gas_adapter_contract.yaml"
|
||||
- "spec/19_harness_contract.yaml"
|
||||
- "spec/20_harness_output_schema.yaml"
|
||||
- "spec/21_harness_governance_contract.yaml"
|
||||
- "spec/40_final_decision_packet_contract.yaml"
|
||||
- "spec/41_release_dag.yaml"
|
||||
- "spec/43_quant_factor_taxonomy.yaml"
|
||||
- "spec/45_number_provenance_contract.yaml"
|
||||
- "spec/46_low_capability_execution_pack.yaml"
|
||||
- "spec/47_packaging_policy.yaml"
|
||||
- "spec/property_invariants.yaml"
|
||||
- "spec/anti_late_entry_contract.yaml"
|
||||
- "spec/profit_preservation_contract.yaml"
|
||||
- "spec/operating_cadence.yaml"
|
||||
- "spec/formula_lifecycle_index.yaml"
|
||||
- "spec/release/low_capability_context_aliases.yaml"
|
||||
- "spec/release/version_retirement_policy.yaml"
|
||||
- "spec/48_module_io_contract_registry.yaml"
|
||||
- "spec/49_refactor_methodology_contract.yaml"
|
||||
- "spec/51_formula_lifecycle_registry.yaml"
|
||||
- "Temp/final_decision_packet_v4.json"
|
||||
- "spec/02_data_contract.yaml"
|
||||
- "spec/01_objective_profile.yaml"
|
||||
purpose: "위험 차단, 데이터 사용 가능성, 계좌 제약을 먼저 확정한다."
|
||||
STEP_2_for_buy_sell_decision:
|
||||
files:
|
||||
- "spec/09_decision_flow.yaml"
|
||||
- "spec/11_market_regime.yaml"
|
||||
- "spec/08_scoring_rules.yaml"
|
||||
- "spec/10_portfolio_rules.yaml"
|
||||
- "spec/strategy/sector_model.yaml"
|
||||
- "spec/strategy/entry_core.yaml"
|
||||
- "spec/strategy/leader_scan.yaml"
|
||||
- "spec/strategy/staged_entry.yaml"
|
||||
- "spec/05_position_sizing.yaml"
|
||||
- "spec/exit/stop_loss.yaml"
|
||||
- "spec/exit/take_profit.yaml"
|
||||
- "spec/exit/proactive_exit_radar.yaml"
|
||||
purpose: "진입·청산·수량 산출을 결정한다."
|
||||
STEP_3_for_output:
|
||||
files:
|
||||
- "spec/07_output_schema.yaml"
|
||||
- "schemas/output_schema.json"
|
||||
- "RetirementAssetPortfolioReportTemplate.yaml"
|
||||
- "spec/40_final_decision_packet_contract.yaml"
|
||||
- "spec/46_low_capability_execution_pack.yaml"
|
||||
- "Temp/final_decision_packet_v4.json"
|
||||
- "Temp/final_context_for_llm_v4.yaml"
|
||||
purpose: "JSON 출력 계약, HTS 입력표, 상세 보고서 양식을 확정한다. 사용자 출력 보고서의 모든 상태값·레이블은 spec/07_output_schema.yaml의 korean_display_labels 매핑을 적용해 한글로 표시한다."
|
||||
STEP_4_for_validation:
|
||||
files:
|
||||
- "tests/strategy_tests.yaml"
|
||||
- "examples/*.yaml"
|
||||
- "examples/examples.jsonl"
|
||||
purpose: "규칙 일관성 점검과 예시 대조에 사용한다."
|
||||
STEP_5_for_prompt_entrypoints:
|
||||
files:
|
||||
- "prompts/analysis_prompt.md"
|
||||
- "prompts/review_prompt.md"
|
||||
purpose: "반복 분석과 리뷰 작업의 시작 프롬프트로 사용한다."
|
||||
|
||||
spec_files:
|
||||
execution_contract: "spec/00_execution_contract.yaml"
|
||||
objective_profile: "spec/01_objective_profile.yaml"
|
||||
data_contract: "spec/02_data_contract.yaml"
|
||||
field_dictionary: "spec/12_field_dictionary.yaml"
|
||||
formula_registry: "spec/13_formula_registry.yaml"
|
||||
formula_registry_normalized: "spec/03_formulas/formula_registry.normalized.yaml"
|
||||
output_field_owner_ledger: "spec/03_formulas/output_field_owner_ledger.yaml"
|
||||
formula_registry_manifest: "spec/formulas/manifest.yaml"
|
||||
formula_domain_manifest: "spec/formulas/domains/manifest.yaml"
|
||||
formula_domain_risk: "spec/formulas/domains/risk.yaml"
|
||||
formula_domain_entry: "spec/formulas/domains/entry.yaml"
|
||||
formula_domain_exit: "spec/formulas/domains/exit.yaml"
|
||||
formula_domain_cash: "spec/formulas/domains/cash.yaml"
|
||||
formula_domain_portfolio: "spec/formulas/domains/portfolio.yaml"
|
||||
formula_domain_reporting: "spec/formulas/domains/reporting.yaml"
|
||||
formula_domain_fundamental: "spec/formulas/domains/fundamental.yaml"
|
||||
formula_domain_smart_money: "spec/formulas/domains/smart_money.yaml"
|
||||
formula_domain_macro: "spec/formulas/domains/macro.yaml"
|
||||
formula_domain_simulation: "spec/formulas/domains/simulation.yaml"
|
||||
formula_domain_sector: "spec/formulas/domains/sector.yaml"
|
||||
formula_domain_execution: "spec/formulas/domains/execution.yaml"
|
||||
formula_domain_governance: "spec/formulas/domains/governance.yaml"
|
||||
harness_formula_registry: "spec/13b_harness_formulas.yaml"
|
||||
raw_workbook_mapping: "spec/14_raw_workbook_mapping.yaml"
|
||||
account_snapshot_contract: "spec/15_account_snapshot_contract.yaml"
|
||||
harness_contract: "spec/19_harness_contract.yaml"
|
||||
harness_governance_contract: "spec/21_harness_governance_contract.yaml"
|
||||
pipeline_runtime_contract: "spec/22_pipeline_runtime_contract.yaml"
|
||||
low_capability_llm_pipeline_todo: "spec/23_low_capability_llm_pipeline_todo.yaml"
|
||||
strategy_hardening_todo_v1: "spec/24_strategy_hardening_todo_v1.yaml"
|
||||
canonical_metrics_registry: "spec/25_canonical_metrics_registry.yaml"
|
||||
behavioral_coverage_contract: "spec/26_behavioral_coverage_contract.yaml"
|
||||
calibration_registry: "spec/calibration_registry.yaml"
|
||||
formula_golden_cases_v2: "spec/formula_golden_cases_v2.yaml"
|
||||
formula_golden_cases_v3: "spec/formula_golden_cases_v3.yaml"
|
||||
formula_golden_cases_v4: "spec/formula_golden_cases_v4.yaml"
|
||||
formula_golden_cases_nf: "spec/formula_golden_cases_nf.yaml"
|
||||
canonical_artifact_resolver_v1: "spec/32_canonical_artifact_resolver.yaml"
|
||||
execution_precedence_lock_v1: "spec/33_execution_precedence_lock.yaml"
|
||||
architecture_boundaries_v1: "spec/34_architecture_boundaries.yaml"
|
||||
rule_lifecycle_governance_v3: "spec/35_rule_lifecycle_governance_v3.yaml"
|
||||
gas_thin_adapter_policy: "spec/39_gas_thin_adapter_policy.yaml"
|
||||
goal_risk_budget_harness_v1: "spec/36_goal_risk_budget_harness.yaml"
|
||||
evaluation_dashboard_v1: "spec/37_evaluation_dashboard_contract.yaml"
|
||||
bch_calibration_runbook: "spec/27_bch_calibration_runbook.yaml"
|
||||
imputed_data_exposure_contract: "spec/28_imputed_data_exposure_contract.yaml"
|
||||
backtest_harness_contract: "spec/29_backtest_harness_contract.yaml"
|
||||
completion_criteria_contract: "spec/30_completion_criteria_contract.yaml"
|
||||
semiconductor_concentration_policy: "spec/strategy/semiconductor_concentration_policy.yaml"
|
||||
strategy_execution_lock_policy: "spec/strategy_execution_lock_policy.yaml"
|
||||
low_capability_llm_response_contract: "spec/31_low_capability_llm_response_contract.yaml"
|
||||
final_decision_packet_contract_v4: "spec/40_final_decision_packet_contract.yaml"
|
||||
release_dag_v1: "spec/41_release_dag.yaml"
|
||||
quant_factor_taxonomy_v1: "spec/43_quant_factor_taxonomy.yaml"
|
||||
live_replay_separation_v2: "spec/44_live_replay_separation.yaml"
|
||||
number_provenance_contract_v1: "spec/45_number_provenance_contract.yaml"
|
||||
low_capability_execution_pack_v1: "spec/46_low_capability_execution_pack.yaml"
|
||||
packaging_policy_v1: "spec/47_packaging_policy.yaml"
|
||||
property_invariants: "spec/property_invariants.yaml"
|
||||
anti_late_entry_contract: "spec/anti_late_entry_contract.yaml"
|
||||
profit_preservation_contract: "spec/profit_preservation_contract.yaml"
|
||||
operating_cadence: "spec/operating_cadence.yaml"
|
||||
formula_lifecycle_index: "spec/formula_lifecycle_index.yaml"
|
||||
low_capability_context_aliases: "spec/release/low_capability_context_aliases.yaml"
|
||||
version_retirement_policy: "spec/release/version_retirement_policy.yaml"
|
||||
repository_entropy_budget_v1: "spec/release/repository_entropy_budget.yaml"
|
||||
execution_authority_matrix_v2: "spec/execution_authority_matrix_v2.yaml"
|
||||
entry_freshness_score_v1: "spec/strategy/entry_freshness_score_v1.yaml"
|
||||
data_gaps_roadmap: "spec/16_data_gaps_roadmap.yaml"
|
||||
performance_contract: "spec/17_performance_contract.yaml"
|
||||
settings_contract: "spec/18_settings_contract.yaml"
|
||||
risk_control_index: "spec/risk/risk_control.yaml"
|
||||
aggregate_risk: "spec/risk/aggregate_risk.yaml"
|
||||
circuit_breakers: "spec/risk/circuit_breakers.yaml"
|
||||
market_risk_cash: "spec/risk/market_risk_cash.yaml"
|
||||
portfolio_exposure: "spec/risk/portfolio_exposure.yaml"
|
||||
risk_quality_control: "spec/risk/quality_control.yaml"
|
||||
factor_risk: "spec/risk/factor_risk.yaml"
|
||||
sector_model: "spec/strategy/sector_model.yaml"
|
||||
entry_gates_index: "spec/strategy/entry_gates.yaml"
|
||||
entry_core: "spec/strategy/entry_core.yaml"
|
||||
leader_scan: "spec/strategy/leader_scan.yaml"
|
||||
staged_entry: "spec/strategy/staged_entry.yaml"
|
||||
strategy_discovery: "spec/strategy/discovery.yaml"
|
||||
stock_model: "spec/strategy/stock_model.yaml"
|
||||
action_matrix: "spec/strategy/action_matrix.yaml"
|
||||
rebalancing_trigger: "spec/strategy/rebalancing_trigger.yaml"
|
||||
fundamental_quality: "spec/strategy/fundamental_quality.yaml"
|
||||
fundamental_quality_v2: "spec/strategy/fundamental_quality_v2.yaml"
|
||||
fundamental_quality_v3: "spec/strategy/fundamental_quality_v3.yaml"
|
||||
fundamental_and_horizon_gate_v1: "spec/strategy/fundamental_and_horizon_gate_v1.yaml"
|
||||
horizon_allocation_v1: "spec/strategy/horizon_allocation_v1.yaml"
|
||||
smart_money_liquidity_gate_v1: "spec/strategy/smart_money_liquidity_gate_v1.yaml"
|
||||
anti_late_entry_pullback_gate_v4: "spec/strategy/anti_late_entry_pullback_gate_v4.yaml"
|
||||
pre_distribution_early_warning_v3: "spec/strategy/pre_distribution_early_warning_v3.yaml"
|
||||
anti_late_entry_pullback_gate_v5: "spec/strategy/anti_late_entry_pullback_gate_v5.yaml"
|
||||
pre_distribution_early_warning_v4: "spec/strategy/pre_distribution_early_warning_v4.yaml"
|
||||
macro_event_synchronizer_v2: "spec/strategy/macro_event_synchronizer_v2.yaml"
|
||||
value_preserving_cash_raise_optimizer_v7: "spec/exit/value_preserving_cash_raise_optimizer_v7.yaml"
|
||||
predictive_alpha_dialectic_v1: "spec/strategy/predictive_alpha_dialectic_v1.yaml"
|
||||
field_dictionary_strict: "spec/fields/field_dictionary.yaml"
|
||||
data_quality_expectations: "spec/data_quality/expectations.yaml"
|
||||
decision_graph_dag: "spec/routing/decision_graph.yaml"
|
||||
shadow_ledger_contract: "spec/outputs/shadow_ledger_contract.yaml"
|
||||
renderer_contract: "spec/render/renderer_contract.yaml"
|
||||
release_train: "spec/release/release_train.yaml"
|
||||
predictive_alpha_dialectic_v2: "spec/strategy/predictive_alpha_dialectic_v2.yaml"
|
||||
routing_trace_v2: "spec/routing_trace_v2.yaml"
|
||||
market_regime: "spec/11_market_regime.yaml"
|
||||
scoring_rules: "spec/08_scoring_rules.yaml"
|
||||
decision_flow: "spec/09_decision_flow.yaml"
|
||||
portfolio_rules: "spec/10_portfolio_rules.yaml"
|
||||
position_sizing: "spec/05_position_sizing.yaml"
|
||||
exit_policy_index: "spec/06_exit_policy.yaml"
|
||||
stop_loss: "spec/exit/stop_loss.yaml"
|
||||
take_profit: "spec/exit/take_profit.yaml"
|
||||
proactive_exit_radar: "spec/exit/proactive_exit_radar.yaml"
|
||||
event_response: "spec/exit/event_response.yaml"
|
||||
position_review: "spec/exit/position_review.yaml"
|
||||
dynamic_value_preservation_sell_v3: "spec/exit/dynamic_value_preservation_sell_v3.yaml"
|
||||
qualitative_sell_strategy_v1: "spec/exit/qualitative_sell_strategy_v1.yaml"
|
||||
output_schema: "spec/07_output_schema.yaml"
|
||||
machine_output_schema: "schemas/output_schema.json"
|
||||
report_templates: "RetirementAssetPortfolioReportTemplate.yaml"
|
||||
prompts: "prompts/*.md"
|
||||
examples: "examples/*.yaml"
|
||||
examples_jsonl: "examples/examples.jsonl"
|
||||
tests: "tests/*.yaml"
|
||||
proposals: "proposals/*.yaml"
|
||||
factor_lifecycle_registry: "spec/factor_lifecycle_registry.yaml"
|
||||
# ── H001~H008 신규 하네스 계약 (P5-T01, 2026-06-10) ──────────────────────
|
||||
decision_trace_replay_contract: "spec/52_decision_trace_replay_contract.yaml"
|
||||
factor_conflict_matrix: "spec/53_factor_conflict_matrix.yaml"
|
||||
temporal_data_integrity: "spec/54_temporal_data_integrity.yaml"
|
||||
execution_simulator_contract: "spec/55_execution_simulator_contract.yaml"
|
||||
renderer_copy_only_contract: "spec/56_renderer_copy_only_contract.yaml"
|
||||
shadow_promotion_scorecard: "spec/57_shadow_promotion_scorecard.yaml"
|
||||
llm_determinism_contract: "spec/58_llm_determinism_contract.yaml"
|
||||
llm_radar_trust_tiers_v1: "spec/llm_radar_trust_tiers_v1.yaml"
|
||||
llm_reading_guide_v2: "spec/llm_reading_guide_v2.yaml"
|
||||
|
||||
governance:
|
||||
ownership_map: "spec/ownership_map.yaml"
|
||||
aliases: "spec/aliases.yaml"
|
||||
xref_matrix: "spec/xref_matrix.yaml"
|
||||
future_split_indexes:
|
||||
risk: "spec/risk/README.md"
|
||||
strategy: "spec/strategy/README.md"
|
||||
active_canonical_splits:
|
||||
risk:
|
||||
- "spec/risk/aggregate_risk.yaml"
|
||||
- "spec/risk/circuit_breakers.yaml"
|
||||
- "spec/risk/market_risk_cash.yaml"
|
||||
- "spec/risk/portfolio_exposure.yaml"
|
||||
- "spec/risk/risk_control.yaml"
|
||||
- "spec/risk/quality_control.yaml"
|
||||
exit:
|
||||
- "spec/exit/stop_loss.yaml"
|
||||
- "spec/exit/take_profit.yaml"
|
||||
- "spec/exit/proactive_exit_radar.yaml"
|
||||
- "spec/exit/event_response.yaml"
|
||||
- "spec/exit/position_review.yaml"
|
||||
- "spec/exit/dynamic_value_preservation_sell_v3.yaml"
|
||||
- "spec/exit/qualitative_sell_strategy_v1.yaml"
|
||||
strategy:
|
||||
- "spec/strategy/sector_model.yaml"
|
||||
- "spec/strategy/entry_gates.yaml"
|
||||
- "spec/strategy/entry_core.yaml"
|
||||
- "spec/strategy/leader_scan.yaml"
|
||||
- "spec/strategy/staged_entry.yaml"
|
||||
- "spec/strategy/discovery.yaml"
|
||||
- "spec/strategy/stock_model.yaml"
|
||||
- "spec/strategy/action_matrix.yaml"
|
||||
- "spec/strategy/rebalancing_trigger.yaml"
|
||||
- "spec/strategy/fundamental_and_horizon_gate_v1.yaml"
|
||||
- "spec/strategy/horizon_allocation_v1.yaml"
|
||||
- "spec/strategy/smart_money_liquidity_gate_v1.yaml"
|
||||
- "spec/strategy/predictive_alpha_dialectic_v1.yaml"
|
||||
|
||||
conflict_resolution:
|
||||
priority: "상위 source_of_truth_order가 하위 규칙보다 항상 우선한다."
|
||||
risk_vs_strategy: "리스크 차단 규칙과 매수/증액 규칙이 충돌하면 리스크 차단 규칙만 적용한다."
|
||||
data_vs_decision: "데이터 완성도·최신성 미달이면 등급·수량·주문 결론을 보류한다."
|
||||
table_vs_text: "표/수치/공식과 서술형 설명이 충돌하면 표/수치/공식을 우선한다."
|
||||
examples_vs_rules: "examples는 판단 예시이며 어떤 경우에도 spec 규칙을 override하지 않는다."
|
||||
tie_rule: "동급 규칙이 충돌하면 보류하고 필요한 추가 데이터와 다음 확인 출처를 출력한다."
|
||||
secular_leader_vs_safety: >
|
||||
SECULAR_LEADER_RISK_ON 활성 중 EVENT_SHOCK 또는 RISK_OFF 발동 시
|
||||
공격 모드 즉시 비활성. 공격 모드는 안전·리스크 차단 모드를 절대 우선하지 않는다.
|
||||
우선순위: EVENT_SHOCK > RISK_OFF > SECULAR_LEADER_RISK_ON > LEADER_CONCENTRATION > NEUTRAL > RISK_ON.
|
||||
참조: spec/11_market_regime.yaml.SECULAR_LEADER_RISK_ON.priority_over_lower_states.
|
||||
goal_protection_vs_orbit_gap: >
|
||||
Safe Landing Protocol, hard stop, cash_floor, Total_Heat, 데이터 완성도 차단은
|
||||
orbit_gap 또는 목표 미달 기반 공격 슬롯 확대보다 항상 우선한다.
|
||||
목표 미달·필요수익률 상승은 risk_budget 상향 또는 데이터 게이트 완화 사유가 아니다.
|
||||
목표자산 90% 이상 접근 시 spec/01_objective_profile.yaml.safe_landing_protocol을 우선 확인한다.
|
||||
|
||||
non_negotiable_principles:
|
||||
- "spec/00_execution_contract.yaml의 master_prohibitions P1~P5가 모든 규칙보다 우선한다."
|
||||
- "보유수량 미확인 상태에서 매도수량 숫자 기재 금지."
|
||||
- "ATR20 미확인 상태에서 정수 매수수량 산출 금지."
|
||||
- "Total_Heat, cash_floor, hard stop을 우회하는 공격 슬롯 금지."
|
||||
- "Flow_Rows<20이면 20D 수급 기반 A등급·즉시매수 금지."
|
||||
- "매수 제안은 지정가·수량·손절가·손절수량·익절가·익절수량 세트가 모두 있을 때만 유효."
|
||||
- "소수점 매수 금지. 모든 주문 수량은 정수."
|
||||
- "SECULAR_LEADER_RISK_ON은 spec/11_market_regime.yaml 5개 조건 동시 충족 시에만 활성화된다. 활성 중에도 master_prohibitions P1~P5, Total_Heat hard stop, ATR20, 보유수량 확인, cash_floor 제약은 그대로 적용된다. 이 모드는 safety gate를 열지 않는다."
|
||||
- "목표자산 90% 이상 접근 시 Safe Landing Protocol이 orbit_gap 공격 슬롯 확대, 위성 비중 확대, 신규 탐색매수보다 우선한다."
|
||||
- "동일 섹터가 아니어도 고베타·고모멘텀 팩터가 과집중이면 신규 고베타 종목 매수를 보류하고 저변동성·현금·단기채 대안을 우선 검토한다."
|
||||
- "이벤트 3거래일 전부터 당일까지 신규 진입은 갭 리스크 버퍼를 수량 산출에 반영하지 않으면 정수 수량을 확정하지 않는다."
|
||||
- "HTS 현재가와 JSON 기준 가격의 괴리율이 3%를 초과하면 BUY_BLOCKED 처리하고 JSON 재생성 또는 가격 출처 재검산을 먼저 요구한다."
|
||||
|
||||
surgical_update_policy:
|
||||
rule: "규칙 변경은 전체 재작성 금지. target_file, target_path, change_type, rationale를 남기는 최소 침습 변경만 허용한다."
|
||||
required_fields: ["target_file", "target_path", "change_type", "rationale", "before", "after", "validation"]
|
||||
prohibited_changes:
|
||||
- "master prohibitions 삭제"
|
||||
- "risk hard stop 완화"
|
||||
- "데이터 누락 상태에서 BUY 허용"
|
||||
- "목표수익률 압박을 이유로 risk_budget 강제 상향"
|
||||
- "SECULAR_LEADER_RISK_ON 활성을 이유로 master_prohibitions·cash_floor·Total_Heat·ATR20 제약 완화 금지"
|
||||
completed_update_markers:
|
||||
required_fields: ["proposal_id", "adopted_scope", "completed_at", "backup_file", "validation_status"]
|
||||
rule: "외부 제안 반영 후 accepted_proposals에 완료 표기를 남겨 동일 proposal_id 중복 반영을 방지한다."
|
||||
validation_status_values: ["PENDING", "PASS", "FAIL", "PARTIAL"]
|
||||
|
||||
output_contract:
|
||||
machine_readable_schema: "schemas/output_schema.json"
|
||||
json_schema_version: "2026-05-15-F6-compat-output"
|
||||
required_first_outputs:
|
||||
- "사용 데이터 기준시각과 출처"
|
||||
- "capture_read_ledger 판독 원장"
|
||||
- "데이터 완성도 매트릭스"
|
||||
- "4단계 주문 검산 결과"
|
||||
- "decision_trace 판단 추적표"
|
||||
- "리스크/현금/Total_Heat 차단 여부"
|
||||
- "HTS 입력 가능 주문표 또는 산출금지 사유"
|
||||
- "학습형 해설은 요청 시 후반부 market_context_learning_note로만 출력"
|
||||
report_template_file: "RetirementAssetPortfolioReportTemplate.yaml"
|
||||
|
||||
bundle_outputs:
|
||||
full_bundle: "dist/retirement_portfolio_bundle.yaml"
|
||||
compact_bundle: "dist/retirement_portfolio_compact.yaml"
|
||||
ultra_compact_bundle: "dist/retirement_portfolio_ultra_compact.yaml"
|
||||
bundle_selection_policy:
|
||||
full_bundle: "문서 정합성 리뷰, 리팩토링, 규칙 충돌 점검에 사용한다."
|
||||
compact_bundle: "일반 분석에서 충분한 컨텍스트가 필요할 때 사용한다."
|
||||
ultra_compact_bundle: "토큰 비용을 줄여야 하거나 반복 실행용 LLM 입력으로 사용한다. 상세 보고서 양식과 illustrative examples는 포함하지 않는다."
|
||||
|
||||
bundle_profiles:
|
||||
compact:
|
||||
output: "dist/retirement_portfolio_compact.yaml"
|
||||
purpose: "분석에 필요한 canonical 핵심 문서만 묶은 축약 LLM 입력용 합본"
|
||||
files:
|
||||
- "RetirementAssetPortfolio.yaml"
|
||||
- "AGENTS.md"
|
||||
- "spec/00_execution_contract.yaml"
|
||||
- "spec/02_data_contract.yaml"
|
||||
- "spec/risk/aggregate_risk.yaml"
|
||||
- "spec/risk/circuit_breakers.yaml"
|
||||
- "spec/risk/market_risk_cash.yaml"
|
||||
- "spec/risk/portfolio_exposure.yaml"
|
||||
- "spec/12_field_dictionary.yaml"
|
||||
- "spec/13_formula_registry.yaml"
|
||||
- "spec/13b_harness_formulas.yaml"
|
||||
- "spec/14_raw_workbook_mapping.yaml"
|
||||
- "spec/llm_reading_guide_v2.yaml"
|
||||
- "spec/15_account_snapshot_contract.yaml"
|
||||
- "spec/09_decision_flow.yaml"
|
||||
- "spec/11_market_regime.yaml"
|
||||
- "spec/08_scoring_rules.yaml"
|
||||
- "spec/10_portfolio_rules.yaml"
|
||||
- "spec/strategy/sector_model.yaml"
|
||||
- "spec/strategy/entry_core.yaml"
|
||||
- "spec/strategy/leader_scan.yaml"
|
||||
- "spec/strategy/staged_entry.yaml"
|
||||
- "spec/05_position_sizing.yaml"
|
||||
- "spec/exit/stop_loss.yaml"
|
||||
- "spec/exit/take_profit.yaml"
|
||||
- "spec/exit/proactive_exit_radar.yaml"
|
||||
- "spec/40_final_decision_packet_contract.yaml"
|
||||
- "spec/41_release_dag.yaml"
|
||||
- "spec/43_quant_factor_taxonomy.yaml"
|
||||
- "spec/45_number_provenance_contract.yaml"
|
||||
- "spec/46_low_capability_execution_pack.yaml"
|
||||
- "spec/47_packaging_policy.yaml"
|
||||
- "spec/property_invariants.yaml"
|
||||
- "spec/anti_late_entry_contract.yaml"
|
||||
- "spec/profit_preservation_contract.yaml"
|
||||
- "spec/operating_cadence.yaml"
|
||||
- "spec/formula_lifecycle_index.yaml"
|
||||
- "spec/release/low_capability_context_aliases.yaml"
|
||||
- "spec/release/version_retirement_policy.yaml"
|
||||
- "spec/48_module_io_contract_registry.yaml"
|
||||
- "spec/49_refactor_methodology_contract.yaml"
|
||||
- "spec/51_formula_lifecycle_registry.yaml"
|
||||
- "Temp/final_decision_packet_v4.json"
|
||||
- "schemas/output_schema.json"
|
||||
ultra_compact:
|
||||
output: "dist/retirement_portfolio_ultra_compact.yaml"
|
||||
purpose: "실행계약, 데이터, 리스크, 상태머신, 수량, 청산, 출력계약만 담은 최소 LLM 입력용 합본"
|
||||
files:
|
||||
- "RetirementAssetPortfolio.yaml"
|
||||
- "AGENTS.md"
|
||||
- "spec/00_execution_contract.yaml"
|
||||
- "spec/02_data_contract.yaml"
|
||||
- "spec/risk/aggregate_risk.yaml"
|
||||
- "spec/risk/circuit_breakers.yaml"
|
||||
- "spec/risk/market_risk_cash.yaml"
|
||||
- "spec/risk/portfolio_exposure.yaml"
|
||||
- "spec/12_field_dictionary.yaml"
|
||||
- "spec/13_formula_registry.yaml"
|
||||
- "spec/13b_harness_formulas.yaml"
|
||||
- "spec/14_raw_workbook_mapping.yaml"
|
||||
- "spec/15_account_snapshot_contract.yaml"
|
||||
- "spec/09_decision_flow.yaml"
|
||||
- "spec/08_scoring_rules.yaml"
|
||||
- "spec/05_position_sizing.yaml"
|
||||
- "spec/exit/stop_loss.yaml"
|
||||
- "spec/exit/take_profit.yaml"
|
||||
- "spec/exit/proactive_exit_radar.yaml"
|
||||
- "spec/40_final_decision_packet_contract.yaml"
|
||||
- "spec/41_release_dag.yaml"
|
||||
- "spec/43_quant_factor_taxonomy.yaml"
|
||||
- "spec/45_number_provenance_contract.yaml"
|
||||
- "spec/46_low_capability_execution_pack.yaml"
|
||||
- "spec/47_packaging_policy.yaml"
|
||||
- "spec/property_invariants.yaml"
|
||||
- "spec/anti_late_entry_contract.yaml"
|
||||
- "spec/profit_preservation_contract.yaml"
|
||||
- "spec/operating_cadence.yaml"
|
||||
- "spec/formula_lifecycle_index.yaml"
|
||||
- "spec/release/low_capability_context_aliases.yaml"
|
||||
- "spec/release/version_retirement_policy.yaml"
|
||||
- "spec/48_module_io_contract_registry.yaml"
|
||||
- "spec/49_refactor_methodology_contract.yaml"
|
||||
- "spec/51_formula_lifecycle_registry.yaml"
|
||||
- "Temp/final_decision_packet_v4.json"
|
||||
- "schemas/output_schema.json"
|
||||
@@ -0,0 +1,665 @@
|
||||
meta:
|
||||
title: "은퇴자산포트폴리오 — 상세 보고서 양식"
|
||||
parent_file: "RetirementAssetPortfolio.yaml"
|
||||
version: "2026-05-15-G1"
|
||||
purpose: >
|
||||
보고서 출력 시에만 로드하는 상세 양식 파일.
|
||||
투자 판단(분석·수량산출)만 필요한 세션에서는 이 파일 없이 메인 파일만으로 충분.
|
||||
load_instruction: "메인 manifest의 load_sequence.STEP_3_for_output 및 spec_files.report_templates 참조."
|
||||
|
||||
output_format_templates:
|
||||
|
||||
rendering_contract:
|
||||
purpose: "사람용 보고서를 표 중심으로 렌더링하기 위한 상위 양식 계약."
|
||||
language_rendering:
|
||||
default_locale: "ko-KR"
|
||||
section_title_korean_first: true
|
||||
status_label_map_source: "spec/07_output_schema.yaml:korean_display_labels"
|
||||
prefer_korean_reason_text: true
|
||||
preserve_english_only_for:
|
||||
- "공식_ID"
|
||||
- "종목코드"
|
||||
- "파일경로"
|
||||
- "명령어"
|
||||
- "JSON key"
|
||||
prohibit_direct_english_status:
|
||||
- "PASS"
|
||||
- "FAIL"
|
||||
- "BLOCKED"
|
||||
- "ACTIVE"
|
||||
- "INACTIVE"
|
||||
- "BUY"
|
||||
- "SELL"
|
||||
- "TRIM"
|
||||
required_sequence:
|
||||
- "routing_serving_trace"
|
||||
- "QEH_AUDIT_BLOCK"
|
||||
- "capture_read_ledger"
|
||||
- "data_completeness_matrix"
|
||||
- "backdata_feature_bank_table"
|
||||
- "benchmark_relative_harness_table"
|
||||
- "alpha_lead_table"
|
||||
- "anti_distribution_table"
|
||||
- "profit_preservation_table"
|
||||
- "smart_cash_raise_table"
|
||||
- "execution_quality_table"
|
||||
- "proposal_reference_sheet"
|
||||
# ── [2026-05-20_HARNESS_V5] 신규 필수 섹션 ──────────────────────────────
|
||||
- "breakout_quality_gate_table"
|
||||
- "anti_whipsaw_gate_table"
|
||||
- "smart_cash_raise_v2_table"
|
||||
# ─────────────────────────────────────────────────────────────────────────
|
||||
- "order_quantity_4stage_gate"
|
||||
- "decision_trace_table"
|
||||
- "sell_priority_decision_table 또는 발동조건 미충족 사유"
|
||||
- "current_holdings_analysis_report_template 또는 발동조건 미충족 사유"
|
||||
- "proposal_reference_sheet 또는 제안 산출 불가 사유"
|
||||
- "concise_hts_input_sheet 또는 산출금지 사유"
|
||||
- "reference_price_ledger 또는 WATCH 없음"
|
||||
- "immediate_execution_playbook 또는 산출금지 사유"
|
||||
- "market_context_learning_note 또는 생략 사유"
|
||||
- "core_satellite_timing_gate_table"
|
||||
- "engine_feedback_loop_report"
|
||||
- "prediction_evaluation_improvement_report"
|
||||
blocked_report_rule:
|
||||
id: "BLOCKED_REPORT_V5"
|
||||
trigger: "required_sequence의 필수 섹션이 하나라도 누락된 경우"
|
||||
action: "해당 섹션 이후의 모든 주문표·HTS 입력 시트를 BLOCKED_REPORT로 처리"
|
||||
hard_lock_sections:
|
||||
- section: "breakout_quality_gate_table"
|
||||
missing_action: "신규 BUY 주문표 전체 BLOCKED_BREAKOUT_GATE_MISSING"
|
||||
- section: "anti_whipsaw_gate_table"
|
||||
missing_action: "SELL/TRIM 주문표 전체 BLOCKED_WHIPSAW_GATE_MISSING"
|
||||
- section: "smart_cash_raise_v2_table"
|
||||
missing_action: "현금확보 매도 주문표 BLOCKED_CASH_ROUTE_MISSING"
|
||||
prose_rule:
|
||||
allowed: "각 표의 근거·매도사유·다음확인사항 칸 안의 짧은 문장"
|
||||
prohibited: "서론/본론/결론형 산문, 임의 제목, 표 밖 수량·현금·평단 근거 서술"
|
||||
enum_rule:
|
||||
order_type: ["BUY", "SELL", "STOP_LOSS", "TAKE_PROFIT", "TRAILING_STOP", "HOLD", "WATCH"]
|
||||
mode: ["lead", "lag", "hybrid", "none"]
|
||||
validation_status: ["PASS", "BLOCKED", "INSUFFICIENT_DATA", "MANUAL_CHECK_REQUIRED"]
|
||||
human_label_rule: "사용자 보고서에는 spec/07_output_schema.yaml:korean_display_labels를 적용하되, 원 enum에서 벗어난 새 용어를 만들지 않는다."
|
||||
terminology_rule:
|
||||
prohibited_order_terms: ["부분감액", "1차 감액", "부분정리", "전량", "전량매도"]
|
||||
replacement_rule: "주문구분은 SELL/TRIM 등 canonical action으로, 수량은 확인된 정수 수량으로 분리한다."
|
||||
note: "'전량'은 모드가 아니다. 보유수량 검산 후 SELL 수량이 현재보유수량과 같을 때만 근거 칸에서 설명 가능하다."
|
||||
learning_note_rule:
|
||||
location: "주문 검산·HTS 주문표·보유주 진단 이후에만 배치한다."
|
||||
role: "사용자 이해를 돕는 해설이며 주문 검증, 수량 산출, validation_status를 대체하지 않는다."
|
||||
prohibition:
|
||||
- "학습 해설에서 신규 주문수량·지정가·손절가·익절가·현금 숫자 생성 금지"
|
||||
- "표에서 검증되지 않은 계좌·보유·현금 숫자 인용 금지"
|
||||
- "거시 설명만으로 BUY/SELL/TRIM/ROTATE 결론 변경 금지"
|
||||
|
||||
routing_serving_trace_report:
|
||||
purpose: "요청 라우팅·번들·프롬프트·JSON 검증 상태를 QEH_AUDIT_BLOCK 이전에 고정하는 서빙 원장."
|
||||
columns: ["항목", "확정값", "근거", "검산상태", "차단사유"]
|
||||
required_rows:
|
||||
- "request_route"
|
||||
- "bundle_selected"
|
||||
- "prompt_entrypoint"
|
||||
- "json_validation_status"
|
||||
- "capture_required"
|
||||
- "cash_ledger_basis"
|
||||
fill_rule:
|
||||
- "RetirementAssetPortfolio.yaml manifest와 DATA_SOURCE_ROUTING 결과를 사용한다."
|
||||
- "JSON 검증 실패 또는 bundle/entrypoint 미확정이면 QEH_AUDIT_BLOCK 이후 주문표는 BLOCKED_REPORT로 제한한다."
|
||||
- "cash_ledger_basis는 settlement_cash_d2_krw 원칙을 명시한다."
|
||||
|
||||
QEH_AUDIT_BLOCK_report:
|
||||
purpose: "하네스 공식 검산 표. 주문표·판단표보다 먼저 출력한다."
|
||||
columns: ["공식_ID", "사용입력", "하네스값", "LLM_변경여부", "판정", "차단/허용 액션"]
|
||||
required_formulas: ["TOTAL_HEAT_V1", "CASH_RATIOS_V1", "SELL_PRIORITY_V1"]
|
||||
optional_formulas: ["GOAL_RETIREMENT_V1", "CASH_SHORTFALL_V1"]
|
||||
fill_rule:
|
||||
- "data._harness_context 값은 재계산하지 않고 그대로 복사한다."
|
||||
- "LLM_변경여부는 항상 NO여야 하며, 다른 값이면 보고서 INVALID."
|
||||
- "blocked_actions는 산문으로 완화하지 않는다."
|
||||
|
||||
backdata_feature_bank_table:
|
||||
purpose: "GAS 자동 수집 진입-청산 백데이터 원장. 수동 등록보다 GAS 원장을 우선한다."
|
||||
canonical_ref: "spec/16_data_gaps_roadmap.yaml:phase_4_backdata_collection.B1_gas_backdata_feature_bank"
|
||||
columns: ["Record_Date", "Trade_ID", "Signal_Date", "Ticker", "Name", "Account", "Entry_Stage", "Source_Origin", "Entry_Price", "Close_At_Entry", "MA20_At_Entry", "MA60_At_Entry", "ATR20_At_Entry", "Volume_Ratio_5D", "Flow_Credit", "Late_Chase_Risk_Score", "Follow_Through_Score", "Breakout_Score", "Rebound_Preservation_Score", "Setup_Decision", "Exit_Reason", "PnL_Pct", "Holding_Days", "MAE_Pct", "MFE_Pct"]
|
||||
fill_rule:
|
||||
- "backdata_feature_bank_json 값을 그대로 사용한다."
|
||||
- "Source_Origin=GAS_AUTO 행을 우선 표기하고, performance fallback이나 manual correction은 뒤로 둔다."
|
||||
- "값이 없으면 추정하지 말고 '_' 또는 '-'로 비운다."
|
||||
|
||||
benchmark_relative_harness_table:
|
||||
purpose: "KOSPI 대비 시계열 상대평가와 위성 품질·손익·현금창출 목적 잠금을 표시한다."
|
||||
canonical_ref: "spec/13_formula_registry.yaml:BENCHMARK_RELATIVE_TIMESERIES_V1, SATELLITE_ALPHA_QUALITY_GATE_V1, SATELLITE_AGGREGATE_PNL_GATE_V1, CASH_CREATION_PURPOSE_LOCK_V1"
|
||||
columns: ["종목", "brt_verdict", "excess_drawdown_pctp", "recovery_ratio_20d", "downside_beta", "rs_line_20d_slope", "saqg_v1", "sell_reason_validity", "sapg_status", "공식_ID"]
|
||||
fill_rule:
|
||||
- "benchmark_relative_timeseries_json, saqg_json, sapg_json, cash_creation_purpose_lock_json 값을 그대로 사용한다."
|
||||
- "saqg_v1=EXCLUDED 또는 WATCHLIST_ONLY이면 BUY 후보·파일럿·HTS 주문표에 포함하지 않는다."
|
||||
- "sapg_status=SAPG_CRITICAL이면 위성 신규 BUY는 전면 차단한다."
|
||||
- "LLM이 초과낙폭·회복률·하락장 베타·RS선 기울기를 재계산하지 않는다."
|
||||
|
||||
alpha_lead_table:
|
||||
purpose: "뒷북 매수를 줄이기 위한 선행 알파 후보와 추격 금지 상태를 표시한다."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:ALPHA_LEAD_SCORE_V1, FOLLOW_THROUGH_CONFIRM_V1"
|
||||
columns: ["종목", "alpha_lead_score", "follow_through_status", "rs_rank", "volume_surge", "upside_pct", "buy_permission", "공식_ID", "검산상태"]
|
||||
fill_rule:
|
||||
- "alpha_lead_json 및 follow_through_json 값을 그대로 사용한다."
|
||||
- "buy_permission_json이 BLOCKED이면 HTS BUY 주문표를 생성하지 않는다."
|
||||
- "선행 점수의 산문 재해석으로 final_action을 변경하지 않는다."
|
||||
|
||||
anti_distribution_table:
|
||||
purpose: "설거지·분산매도 구간의 추격 매수와 늦은 물타기를 차단한다."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:DISTRIBUTION_RISK_SCORE_V1"
|
||||
columns: ["종목", "distribution_risk_score", "risk_label", "price_position", "val_surge_pct", "inst20d", "frg20d", "blocked_action", "공식_ID"]
|
||||
fill_rule:
|
||||
- "distribution_risk_json 값을 그대로 사용한다."
|
||||
- "risk_label=HIGH 또는 blocked_action 존재 시 BUY/ADD_ON은 BLOCKED로만 출력한다."
|
||||
|
||||
profit_preservation_table:
|
||||
purpose: "수익 포지션의 이익 보호 상태와 손절 상향·익절·트레일링 상태를 고정한다."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:PROFIT_PRESERVATION_STATE_V1"
|
||||
columns: ["종목", "profit_state", "unrealized_pnl_pct", "ratchet_state", "tp_state", "trailing_state", "allowed_action", "공식_ID"]
|
||||
fill_rule:
|
||||
- "profit_preservation_json 값을 그대로 사용한다."
|
||||
- "수익 포지션을 현금확보 대상으로 쓸 때도 smart_cash_raise_table의 제안그룹과 충돌 여부를 표시한다."
|
||||
|
||||
smart_cash_raise_table:
|
||||
purpose: "현금확보 매도를 일괄 투매가 아니라 즉시매도·반등대기·보류로 나누는 제안 계획표."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:SMART_CASH_RAISE_PLAN_V1, SELL_QUANTITY_ALLOCATOR_V1, REBOUND_SELL_TRIGGER_V1"
|
||||
columns: ["우선순위", "종목", "cash_raise_group", "target_cash_krw", "immediate_sell_qty", "rebound_wait_qty", "protected_qty", "rebound_trigger", "예상순현금", "공식_ID"]
|
||||
fill_rule:
|
||||
- "cash_raise_plan_json과 smart_sell_quantities_json 값을 그대로 사용한다."
|
||||
- "보유수량 미확인 또는 CAPTURE_REQUIRED이면 수량 칸에 숫자를 쓰지 않는다."
|
||||
- "rebound_wait_qty는 즉시 HTS 매도수량이 아니므로 concise_hts_input_sheet에 합산하지 않는다."
|
||||
|
||||
execution_quality_table:
|
||||
purpose: "주문 단가·호가·체결 품질·유동성 조건을 최종 주문표 전에 검산한다."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:EXECUTION_QUALITY_GUARD_V1, LIMIT_PRICE_POLICY_V1"
|
||||
columns: ["종목", "order_type", "limit_price", "tick_status", "liquidity_status", "gap_status", "execution_permission", "차단사유", "공식_ID"]
|
||||
fill_rule:
|
||||
- "execution_quality_json과 limit_price_policy_json 값을 그대로 사용한다."
|
||||
- "tick_status != VALID 또는 execution_permission != PASS이면 HTS 주문표 검산상태 PASS 금지."
|
||||
|
||||
proposal_reference_sheet:
|
||||
purpose: "사용자 판단용 제안 원장. 가격·수량·기준시점·차단사유만 남기고 주문 실행 의미는 섞지 않는다."
|
||||
columns: ["계좌", "종목", "종목명", "제안구분", "예상지정가(원)", "기준시점(종가/장중)", "제안가 기준", "예상수량(주)", "수량 기준", "손절1(원)", "손절수량1(주)", "손절2(원)", "손절수량2(주)", "손절3(원)", "손절수량3(주)", "익절가1(원)", "익절수량1(주)", "익절가2(원)", "익절수량2(주)", "익절가3(원)", "익절수량3(주)", "실행가능여부", "차단사유"]
|
||||
fill_rule:
|
||||
- "prices_json, sell_quantities_json, buy_qty_inputs_json, decisions_json 값을 우선 사용한다."
|
||||
- "validation_status=PASS 여부와 무관하게 산출 가능한 가격·수량은 표시한다."
|
||||
- "실행가능여부는 proposal_only / execution_wait / execution_ready 중 하나를 사용한다."
|
||||
- "이 표는 HTS 즉시 입력표가 아니므로 concise_hts_input_sheet와 반드시 분리한다."
|
||||
- "SELL/TRIM/방어 제안은 예상지정가에 stop_price를 우선 사용한다."
|
||||
- "익절 제안은 예상지정가에 tp1_price를 우선 사용하고 없으면 tp2_price를 사용한다."
|
||||
- "BUY 제안은 order_blueprint limit_price 우선, 없으면 buy_qty_inputs_json 보조 입력을 사용한다."
|
||||
- "WATCH/HOLD는 주문가가 아니라 참고 방어가임을 차단사유 또는 설명에 명시한다."
|
||||
- "SELL/TRIM 제안 수량은 sell_quantities_json.sell_qty 우선 사용한다."
|
||||
- "BUY 제안 수량은 buy_qty_inputs_json.final_qty 우선 사용한다."
|
||||
- "WATCH/HOLD는 주문 실행 수량이 아니라 판단 참고 수량임을 수량 기준 컬럼에 명시한다."
|
||||
- "익절 1/2/3 가격·수량은 tp_quantity_ladder_json과 prices_json을 결합해 표시한다."
|
||||
- "손절1/2는 stop_loss.core/satellite quantity_rule 기준으로 core=50/50, satellite=70/30 분할을 표시한다."
|
||||
- "손절3은 profit_preservation_json.protected_stop_price 또는 auto_trailing_stop가 있을 때만 표시한다."
|
||||
|
||||
reference_price_ledger:
|
||||
purpose: "WATCH/PENDING/BLOCKED 행의 참고 가격 원장. 주문표가 아니며 평가용 참고 상태를 공개한다."
|
||||
title_required: "WATCH 감시 원장 — 주문 아님, HTS 입력 금지"
|
||||
columns: ["ticker", "name", "reference_stop_price", "reference_price_basis", "reference_tp_state", "hts_allowed", "reason_code"]
|
||||
forbidden_columns: ["지정가", "손절가", "익절가", "매도가", "주문가", "주문수량", "손절수량", "익절수량", "매도수량", "주문금액"]
|
||||
fill_rule:
|
||||
- "hts_allowed는 항상 false로 기재한다."
|
||||
- "WATCH 행에 주문 가능 단가·수량처럼 보이는 한글 컬럼명을 쓰면 INVALID_COLUMN 처리한다."
|
||||
- "reference_tp_state는 tp1/tp2 상태를 함께 공개한다. 예: tp1=PENDING; tp2=PENDING."
|
||||
|
||||
capture_read_ledger_report:
|
||||
purpose: "계좌·보유·현금 판독 증빙 원장. 이 표 없이 HTS 주문표를 출력하지 않는다."
|
||||
columns: ["파일/화면", "계좌", "화면종류", "읽은값", "확신도", "주문표반영", "판독_상태", "다음확인사항"]
|
||||
fill_rule:
|
||||
- "spec/00_execution_contract.yaml:capture_read_ledger.columns를 우선 적용한다."
|
||||
- "보유수량·평단·현금·미체결 주문의 출처를 읽은값에 구분해 적는다."
|
||||
- "NOT_PROVIDED 또는 CAPTURE_READ_FAILED이면 해당 계좌 주문수량은 산출하지 않는다."
|
||||
prohibition:
|
||||
- "자동투자/약정 화면 수치를 보유수량·평단·현금으로 사용 금지"
|
||||
- "원장 행 없이 본문에서 총자산·현금·보유수량 근거 생성 금지"
|
||||
|
||||
order_quantity_4stage_gate_report:
|
||||
purpose: "주문표 출력 직전 4단계 검산 결과 표."
|
||||
columns: ["계좌", "종목명", "1단계_원장", "2단계_현금", "3단계_보유수량", "4단계_미체결", "최종검산상태", "차단사유", "다음확인사항"]
|
||||
pass_rule: "네 단계가 모두 통과일 때만 immediate_execution_playbook 검산상태=PASS를 허용한다."
|
||||
fail_rule: "하나라도 실패·미확인이면 주문표 대신 산출금지 사유를 출력한다."
|
||||
|
||||
decision_trace_table:
|
||||
purpose: "상태 머신의 각 판단 단계에서 어떤 규칙이 적용되어 어떤 결론이 선택/차단됐는지 남기는 재현성 검산 표."
|
||||
canonical_ref: "spec/09_decision_flow.yaml:decision_flow.deterministic_execution_control"
|
||||
activation:
|
||||
trigger: "모든 분석·주문·리뷰 출력에서 필수"
|
||||
priority: "order_quantity_4stage_gate 이후, 보유주 진단 및 HTS 주문표 이전"
|
||||
columns: ["단계", "check_id", "rule_ref", "사용입력", "결과", "선택행동", "차단행동", "누락입력", "동률처리", "다음상태"]
|
||||
fill_rule:
|
||||
- "각 행은 decision_flow.states의 상태 또는 output validation 단계 하나를 나타낸다."
|
||||
- "rule_ref는 파일 경로와 YAML path를 함께 적는다."
|
||||
- "사용입력은 실제 사용한 필드명만 적고, 값이 민감하거나 길면 evidence 참조로 대체한다."
|
||||
- "누락입력이 있으면 선택행동은 BLOCKED/INSUFFICIENT_DATA/WATCH 중 하나로 제한한다."
|
||||
- "동률처리는 deterministic_execution_control.tie_breaker_order 번호를 적는다."
|
||||
prohibition:
|
||||
- "판단 추적표 없이 final_action 또는 HTS 주문표 출력 금지"
|
||||
- "decision_trace에 없는 rule_id를 근거로 최종 결론 변경 금지"
|
||||
- "동률처리 없이 동일 점수 후보 중 임의 선택 금지"
|
||||
|
||||
sell_priority_decision_table:
|
||||
purpose: "여러 매도·축소·교체 후보가 동시에 존재할 때 HTS 주문 실행 순서를 정하는 포트폴리오 단위 표. 활성 시 current_holdings_analysis_report_template보다 먼저 렌더링한다."
|
||||
canonical_ref: "spec/risk/portfolio_exposure.yaml:portfolio_exposure_framework.sell_priority_engine"
|
||||
activation:
|
||||
trigger:
|
||||
- "SELL/TRIM/ROTATE 후보가 2개 이상"
|
||||
- "cash_floor 미달 또는 이벤트 주 현금 상향 필요"
|
||||
- "중복노출 축소와 보유주 진단 축소 후보가 동시에 존재"
|
||||
priority: "order_quantity_4stage_gate 이후, current_holdings_analysis_report_template보다 먼저"
|
||||
columns: ["우선순위", "계좌", "종목명", "실행그룹", "현재보유수량", "매도가능검산", "매도유형", "우선순위단계", "Sell_Priority_Score", "예상순현금", "세금/비용", "매도사유", "보류사유", "다음확인사항"]
|
||||
fill_rule:
|
||||
- "우선순위단계는 sell_priority_engine.hard_precedence 중 하나를 사용한다."
|
||||
- "Sell_Priority_Score는 동일 단계 후보 정렬용이며 hard_precedence를 뒤집지 않는다."
|
||||
- "현재보유수량 또는 평균단가가 미확인이면 매도가능검산=미통과, 수량은 미산출로 둔다."
|
||||
- "예상순현금은 세금·수수료 미확인 시 숫자 대신 '세금/비용 확인 필요'로 둔다."
|
||||
prohibition:
|
||||
- "이 표 없이 여러 매도 후보의 실행 순서를 산문으로만 제시 금지"
|
||||
- "보유수량 미확인 후보에 정수 매도수량 기재 금지"
|
||||
- "세금 최적화만으로 hard stop 후보를 후순위로 미루지 않는다."
|
||||
|
||||
market_context_learning_note:
|
||||
purpose: "거시·미시 경제 상황, 시장 움직임, 투자자 고민 포인트, 핵심 용어, 판단근거를 학습용으로 정리하는 조건부 해설 블록."
|
||||
activation:
|
||||
trigger:
|
||||
- "사용자가 학습형 설명을 요청한 경우"
|
||||
- "주간·월간 점검 보고서"
|
||||
- "시장국면 변경, 리밸런싱, 대규모 매도/축소, 신규 주도주 편입 검토가 발생한 경우"
|
||||
priority: "주문 검산·HTS 주문표·보유주 진단 이후, 부록 또는 후반부"
|
||||
note: "실행 판단을 먼저 확정한 뒤 독자의 이해를 돕기 위한 해설로만 사용한다."
|
||||
columns: ["구분", "현재 관찰값/상태", "투자자가 고민할 점", "판단에 미친 영향", "핵심 용어", "다음 확인 데이터"]
|
||||
row_types:
|
||||
macro: "금리, 환율, 유가, VIX, KOSPI/KOSDAQ 추세, credit spread 등 포트폴리오 위험예산과 현금비중에 영향을 주는 배경."
|
||||
micro_market: "섹터 순환, 주도주 집중, 거래대금, 외국인/기관 수급, ETF·직접주 중복노출 등 시장 내부 움직임."
|
||||
investor_dilemma: "지금 사야 하는가, 기다려야 하는가, 현금을 얼마나 남겨야 하는가, 손실 종목을 버틸 근거가 있는가 같은 실제 의사결정 질문."
|
||||
decision_basis: "BUY/HOLD/SELL/TRIM/ROTATE/WATCH 결론에 영향을 준 rule_id, 수치, hard stop, missing_data."
|
||||
glossary: "Total_Heat, cash_floor, ATR20, Expected_Edge, Flow_Rows, flow_credit, lead/lag/hybrid mode 등 보고서 내 핵심 용어."
|
||||
fill_rule:
|
||||
- "현재 관찰값/상태는 data_basis, data_completeness_matrix, risk_gate, market_regime_state, sector_flow, macro에서 검증된 값만 사용한다."
|
||||
- "판단에 미친 영향은 어떤 주문 결론을 새로 만들지 말고 이미 확정된 portfolio_decision 또는 prohibited_calculations에 연결한다."
|
||||
- "다음 확인 데이터는 구체 출처를 적는다. 예: macro 시트, sector_flow 시트, HTS 보유종목 화면, 미체결 주문 화면."
|
||||
- "수치가 없으면 추정하지 말고 '미확인' 또는 '다음 확인 필요'로 적는다."
|
||||
example_rows:
|
||||
macro: ["거시", "VIX·환율·KOSPI MA20 상태 확인 필요", "현금비중을 낮춰도 되는가", "MRS와 cash_floor 판단에만 반영", "MRS, cash_floor", "macro 시트, KOSPI MA20, USD/KRW"]
|
||||
micro_market: ["미시/시장", "특정 섹터 수급 집중 여부 확인", "ETF와 직접주 중 어느 노출이 효율적인가", "중복노출·리밸런싱 후보 판단에 반영", "sector_flow, duplicate_exposure", "sector_flow, core_satellite"]
|
||||
investor_dilemma: ["고민 포인트", "매수 신호는 있어도 ATR20 또는 현금이 미확인일 수 있음", "기회비용과 검산 실패 중 무엇을 우선할 것인가", "validation_status 미통과 시 주문 금지", "ATR20, validation_status", "data_feed, account_snapshot"]
|
||||
decision_basis: ["판단근거", "Total_Heat·cash_floor·Flow_Rows가 핵심 gate", "왜 A등급이어도 즉시매수가 아닐 수 있는가", "hard stop이 전략 점수보다 우선", "Total_Heat, Flow_Rows", "risk_gate, triggered_rules"]
|
||||
glossary: ["용어", "Expected_Edge는 기대수익 대비 손실위험 비율", "손절폭이 넓으면 수량이 줄어드는 이유", "position_sizing 산식 이해 보조", "Expected_Edge, ATR20", "spec/13_formula_registry.yaml"]
|
||||
output_rule:
|
||||
- "각 행은 교육 목적의 해설이며 주문 산출 근거 표를 대체하지 않는다."
|
||||
- "항목별 설명은 2~3문장 이내로 제한한다."
|
||||
- "용어 설명은 보고서에서 실제 사용한 용어를 우선한다."
|
||||
- "판단근거는 rule_id 또는 파일 경로를 함께 적는다."
|
||||
prohibition:
|
||||
- "학습 해설에서 신규 매수·매도 결론 생성 금지"
|
||||
- "학습 해설만으로 validation_status를 PASS로 변경 금지"
|
||||
- "웹이나 일반 지식만으로 workbook/account_snapshot 결론 대체 금지"
|
||||
- "출처 없는 최신 시장 상황 단정 금지"
|
||||
|
||||
data_flow_analysis_report:
|
||||
purpose: >
|
||||
블록 2(데이터 완성도 매트릭스) 직후, 블록 3(캡처 판독 원장) 전에 1페이지로 삽입.
|
||||
데이터→신호→판단→행동 4단계 흐름을 표로 가시화해 병목 단계를 즉시 파악.
|
||||
flow_table:
|
||||
columns:
|
||||
- "종목명"
|
||||
- "[D]데이터상태 (OK/PARTIAL/MISSING)"
|
||||
- "[S]신호 (추세/수급/유동성 각각 Pass/Fail)"
|
||||
- "[J]판단 (A/B/C/D등급·이유)"
|
||||
- "[A]행동 (즉시/조건부/보류/금지)"
|
||||
- "병목단계 (D/S/J 중 어느 단계가 블록인지)"
|
||||
- "다음확인우선순위"
|
||||
fill_rule:
|
||||
- "[D]: 블록 2 데이터 완성도 매트릭스에서 직접 참조."
|
||||
- "[S]: minimalist_buy_gate 3핵심 지표 결과."
|
||||
- "[J]: sector_model.grade + Expected_Edge + flow_credit 종합. (결합 공식 → fill_rule_J_detail)"
|
||||
- "[A]: 최종 즉시실행/조건부/보류/금지 결론."
|
||||
- "병목단계: [D]에서 막히면 'D', [S]에서 막히면 'S', [J]에서 막히면 'J'."
|
||||
absence_rule: "통과 이유 없는 A등급 금지. 모든 칸은 값 또는 '없음'으로 채운다."
|
||||
fill_rule_J_detail: # [P139] [J] 단계별 상한 설정 — 3개 시스템 결합 공식
|
||||
step_1: "sector_model.score_axes_formula 산출 → A_core/B_wait/C_watch/D_exclude 상한 설정"
|
||||
step_2: "Expected_Edge < 1.5이면 최대 B등급 (A 승격 불가)"
|
||||
step_3: "flow_credit < 0.40이면 최대 C등급 (A·B 승격 불가)"
|
||||
step_4: "step_1~3 모두 통과 시에만 sector_model.grade 결론 채택"
|
||||
precedence: "Expected_Edge 기준 > sector_model.grade (충분조건 vs 필요조건)"
|
||||
output_format: "A/B/C/D 중 하나 + 근거 (예: B — Expected_Edge 1.8 충족, flow_credit 0.55 partial)"
|
||||
minimalist_output:
|
||||
- "3지표([S]) 모두 Pass인 종목은 강조 표시."
|
||||
- "병목이 [D]인 종목은 '다음확인우선순위'에 구체 출처 명시."
|
||||
- "병목이 [S]인 종목은 실패한 지표와 임계치 명시."
|
||||
|
||||
current_holdings_analysis_report_template:
|
||||
purpose: "현재 보유주를 대상으로 유지/축소/교체/관찰을 판단하는 전용 보고서 양식."
|
||||
activation:
|
||||
trigger: "보유수량이 확인된 종목이 1개 이상이거나 position_review_cycle.documentation 점검 주기에 도달했을 때"
|
||||
priority: "제안 검토 표 다음, 매수/매도 예시 이전"
|
||||
note: "신규 종목 추천이 아니라 기존 보유 포지션 점검 전용이다."
|
||||
decision_score_formula: >
|
||||
current_holdings_score = 0.30*trend_score + 0.30*flow_score + 0.20*edge_score + 0.10*concentration_score + 0.10*execution_score.
|
||||
trend_score, flow_score, edge_score, concentration_score, execution_score는 모두 0~100 정규화 값으로 입력한다.
|
||||
score_components: # [R4] 컴포넌트별 산출 규칙
|
||||
trend_score:
|
||||
"100": "현재가 > 20일선 AND 20일선 > 60일선 AND 5일선 위 주행"
|
||||
"70": "현재가 > 20일선 AND 20일선 > 60일선 (5일선 이탈)"
|
||||
"40": "현재가 > 20일선 (60일선 하향배열)"
|
||||
"10": "현재가 < 20일선"
|
||||
missing: "20일선·60일선 미확인 → 50점(중립)"
|
||||
flow_score:
|
||||
"100": "Frg_5D + Inst_5D 동반 순매수 AND flow_credit >= 0.60"
|
||||
"70": "Frg_5D 또는 Inst_5D 중 1개 순매수 AND flow_credit >= 0.40"
|
||||
"40": "flow_credit 0.20~0.39"
|
||||
"10": "Frg_5D + Inst_5D 동반 순매도"
|
||||
missing: "Flow_OK=N 또는 Flow_Rows<5 → 25점"
|
||||
edge_score:
|
||||
formula: "Expected_Edge = (익절가 - 진입가) / (진입가 - 손절가)"
|
||||
"100": "Expected_Edge >= 2.5"
|
||||
"70": "1.8 <= Expected_Edge < 2.5"
|
||||
"40": "1.2 <= Expected_Edge < 1.8"
|
||||
"10": "Expected_Edge < 1.2"
|
||||
missing: "손절가·익절가 미설정(legacy_position) → 0점"
|
||||
concentration_score:
|
||||
"100": "current_weight <= target_weight"
|
||||
"70": "target_weight < current_weight <= target_weight + 3%p"
|
||||
"40": "target_weight + 3%p < current_weight <= target_weight + 5%p"
|
||||
"10": "current_weight > target_weight + 5%p"
|
||||
missing: "target_weight 미설정 → 50점(중립)"
|
||||
execution_score:
|
||||
"100": "진입 후 D+5 이내 수익 구간 진입 OR 시범진입 후 본진입 계획 유효"
|
||||
"70": "진입 후 D+20 이내 플러스 구간 유지"
|
||||
"40": "진입 후 D+20 경과, 0% 근방"
|
||||
"10": "진입 후 D+20 경과, 손실 구간 AND time_stop 임박"
|
||||
missing: "진입일 미확인 → 50점(중립)"
|
||||
thresholds:
|
||||
keep: "score >= 70 AND current_weight within target_band ±5%p AND grade in (A,B)"
|
||||
trim: "score 50~69 OR current_weight exceeds target_band by >5%p OR duplicate_factor_overweight"
|
||||
rotate: "score < 50 OR grade in (C,D) AND flow_negative_20d"
|
||||
watch: "보유수량 0 또는 판독 미완료"
|
||||
keep_criteria:
|
||||
- "현재비중이 목표비중 대비 ±5%p 이내"
|
||||
- "등급 A 또는 B"
|
||||
- "기대수익비(Expected_Edge) >= 1.8"
|
||||
- "20일 수급과 추세가 동시에 유지"
|
||||
trim_criteria:
|
||||
- "현재비중이 목표비중 대비 +5%p 초과"
|
||||
- "기대수익비(Expected_Edge) 1.2~1.8"
|
||||
- "동일 섹터 또는 동일 팩터 중복 노출이 상한 초과"
|
||||
- "수익률이 플러스여도 포트폴리오 집중도만 과다하면 축소"
|
||||
rotate_criteria:
|
||||
- "등급 C 또는 D"
|
||||
- "20일 수급 음수"
|
||||
- "반등 실패 또는 대체주 우위"
|
||||
- "손익률 -5% 이하이면서 회복 논리 부재"
|
||||
watch_criteria:
|
||||
- "보유수량 0"
|
||||
- "평단 또는 현재가 판독 미완료"
|
||||
- "핵심 데이터 누락으로 score 산출 불가"
|
||||
columns: ["계좌", "종목명", "현재보유수량", "평단", "현재가", "현재비중(%)", "손익률(%)", "섹터/팩터", "등급", "판단점수", "유지/축소/교체", "근거", "다음점검일"]
|
||||
input_example:
|
||||
fields: ["trend_score", "flow_score", "edge_score", "concentration_score", "execution_score", "current_weight", "target_band", "grade", "Expected_Edge"]
|
||||
sample_values: ["85", "78", "82", "60", "75", "12.4", "10.0", "A", "2.1"]
|
||||
sample_calc: "0.30*85 + 0.30*78 + 0.20*82 + 0.10*60 + 0.10*75 = 78.2"
|
||||
sample_judgement: "점수 78.2, 현재비중 12.4%, 목표밴드 10.0% 대비 +2.4%p, grade A이므로 유지"
|
||||
sample_fill_rule: "trend/flow/edge는 데이터에서, concentration/execution은 계좌비중과 주문검산에서 채운다."
|
||||
output_phrases:
|
||||
keep: "유지 — 점수 {score}, 비중 {current_weight}%가 목표밴드 {target_band}% 이내, 등급 {grade}, 기대수익비 {expected_edge}."
|
||||
trim: "축소 — 점수 {score}, 현재비중이 목표밴드 대비 과다, 중복 노출 또는 기대수익비 저하 확인."
|
||||
rotate: "교체 — 점수 {score}, 20일 수급 음수 또는 반등 실패로 기존 포지션 교체 필요."
|
||||
watch: "관찰 — 보유수량 0 또는 핵심 데이터 미완료로 판단 보류."
|
||||
output_rule:
|
||||
- "판단점수와 등급을 함께 표기한다."
|
||||
- "유지/축소/교체/관찰 중 하나만 최종 출력한다."
|
||||
- "문장형 근거와 수치형 점수를 동시에 보여준다."
|
||||
keep_row: ["일반계좌", "예시종목", "120", "24800", "27500", "12.4", "+10.8", "반도체", "A", "82", "유지", "주도 섹터 + 수급 유지 + 기대수익비 충족", "D+5"]
|
||||
trim_row: ["ISA", "예시종목", "80", "38000", "36000", "8.1", "-5.3", "전력기기", "B", "61", "축소", "섹터 중복 + 기대수익비 저하 + 리밸런싱 대상", "D+3"]
|
||||
rotate_row: ["연금저축", "예시종목", "50", "59000", "54500", "4.2", "-7.6", "개별 성장주", "C", "42", "교체", "수급 이탈 + 반등 실패 + 대체주 우위", "D+2"]
|
||||
watch_row: ["일반계좌", "예시종목", "0", "0", "0", "0.0", "0.0", "없음", "D", "0", "관찰", "보유 없음 또는 판독 미완료", "D+7"]
|
||||
required_inputs:
|
||||
- "현재보유수량"
|
||||
- "평단"
|
||||
- "현재가"
|
||||
- "현재비중"
|
||||
- "섹터/팩터"
|
||||
- "등급"
|
||||
- "기대수익비"
|
||||
prohibition:
|
||||
- "현재보유수량·평단·현재가 없이 보유주 분석 금지"
|
||||
- "신규매수 제안과 동일 표에 혼용 금지"
|
||||
- "보유주 분석에서 손절가·익절가를 강제로 생성하지 않는다"
|
||||
|
||||
market_leader_screening_report_template:
|
||||
purpose: "떠오르는 주도주를 관찰 후보·편입 후보·금지 후보로 나누는 전용 스크리닝 보고서."
|
||||
activation:
|
||||
trigger: "sector_flow 또는 quant_feed 갱신 시, 또는 매주 정기 점검 시"
|
||||
priority: "current_holdings_analysis_report_template 및 immediate_execution_playbook 다음"
|
||||
note: "이 블록은 core_satellite 자산배분 표와 분리된 주도주 발굴용이다."
|
||||
source_binding:
|
||||
required_sheets: ["core_satellite", "sector_flow", "macro", "event_risk"]
|
||||
freshness_rule: "주도주 후보 표의 모든 행은 Price_Date, sector_flow.AsOfDate, macro.AsOfDate를 함께 적고, 하나라도 다르면 '데이터 불일치'로 표시한다."
|
||||
unit_normalization_rule: "AvgTradeValue_5D_M와 AvgTradeValue_20D_M는 보고서 출력 시 억원 단위로 환산해 표기한다. 원 단위와 혼용 금지."
|
||||
quantity_integrity_rule: "보유수량, 주문수량, 계좌원장, 판독상태 중 하나라도 미확정이면 후보 분류보다 '판독 미완료'를 우선한다."
|
||||
columns: ["종목명", "섹터", "Rotation_Score", "5D수급", "20D수급", "상대강도", "유동성", "실적추정", "등급", "분류", "액션", "편입근거", "금지근거"]
|
||||
observe_row: ["한미반도체", "반도체 장비", "88", "양호", "양호", "우수", "충분", "상향", "A", "관찰 후보", "현금·중복노출 확인 후 재평가", "반도체 과다보유 시 즉시 편입 금지"]
|
||||
include_row: ["기아", "자동차", "82", "양호", "양호", "우수", "충분", "유지", "A", "편입 후보", "섹터 순환매와 수급 동시 확인", "현금 미확보 시 추격매수 금지"]
|
||||
ban_row: ["LS ELECTRIC", "AI전력", "58", "혼조", "혼조", "보통", "충분", "혼조", "C", "금지 후보", "테마는 강하나 단기 수급 이탈", "상대강도 회복 전까지 신규매수 금지"]
|
||||
incomplete_row: ["TIGER 코리아AI전력기기", "AI전력 ETF", "판독 미완료", "판독 미완료", "판독 미완료", "판독 미완료", "판독 미완료", "판독 미완료", "판독 미완료", "판독 미완료", "수량·비중·판독상태 미확정", "수량 미확정은 후보 판단보다 먼저 보류"]
|
||||
candidate_gate:
|
||||
observe_candidate: "Allowed_Action=CONDITIONAL_HOLD 이고 Rotation_Score >= 50 이면 관찰 후보"
|
||||
include_candidate: "Allowed_Action=CONDITIONAL_HOLD 이고 sector_flow.Alert_Level in (INFLOW_MODERATE, NEUTRAL) 이며 중복노출이 과도하지 않을 때 편입 후보"
|
||||
ban_candidate: "Allowed_Action=SELL_ALLOWED 또는 sector_flow.Alert_Level in (OUTFLOW_ALERT, OUTFLOW_CAUTION) 이면 금지 후보"
|
||||
incomplete_candidate: "판독 미완료 또는 수량 미확정이면 어떤 등급도 부여하지 않고 데이터 재확인으로 되돌린다."
|
||||
rules:
|
||||
- "주도주 후보는 core_satellite 자산배분 후보와 다른 개념으로 표기한다."
|
||||
- "관찰 후보는 강하지만 계좌 중복노출이 높아 즉시 매수하면 안 되는 종목이다."
|
||||
- "편입 후보는 현금·수량·손절가·익절가를 갖춘 경우에만 매수 제안으로 전환한다."
|
||||
- "금지 후보는 테마성 강세라도 수급·유동성·실적 중 하나라도 훼손되면 신규매수 금지로 둔다."
|
||||
- "핵심 데이터의 단위가 맞지 않으면 후보 분류보다 데이터 불일치 표기를 우선한다."
|
||||
- "수량 판독이 불완전한 종목은 절대 관찰/편입 후보로 승격하지 않는다."
|
||||
required_inputs:
|
||||
- "sector_flow Rotation_Score"
|
||||
- "5D/20D 수급"
|
||||
- "상대강도"
|
||||
- "유동성"
|
||||
- "실적추정"
|
||||
- "기존 보유와의 중복노출"
|
||||
prohibition:
|
||||
- "주도주 후보를 core_satellite 후보로 오독하지 않는다"
|
||||
- "관찰 후보를 즉시매수 후보로 승격하지 않는다"
|
||||
- "금지 후보를 테마가 강하다는 이유로 편입하지 않는다"
|
||||
|
||||
market_micro_macro_flow_scenario_report_template:
|
||||
purpose: "미시(종목)·거시(국면)·전체 자금흐름·향후 시나리오를 한 페이지로 묶는 통합 진단 보고서."
|
||||
activation:
|
||||
trigger: "macro_snapshot, sector_flow, quant_feed 중 2개 이상 갱신되었거나 주간 점검일에 도달했을 때"
|
||||
priority: "current_holdings_analysis_report_template 다음, buy/sell 예시 이전"
|
||||
note: "미시·거시·흐름 중 하나라도 빠지면 시나리오 결론을 내리지 않고 '보류'로 적는다."
|
||||
micro_panel:
|
||||
columns: ["종목명", "가격상태", "수급상태", "유동성상태", "실적상태", "등급", "판단"]
|
||||
required_inputs: ["Price_Status", "Flow_OK", "Flow_Rows", "AvgTradeValue_5D_M", "컨센서스 방향", "등급"]
|
||||
rule: "개별 종목은 추세·수급·유동성·실적 4축이 동시에 맞아야 A/B 판정을 허용한다."
|
||||
macro_panel:
|
||||
columns: ["지표", "최근값", "추세", "국면판정", "포트폴리오함의"]
|
||||
required_inputs: ["KOSPI", "KOSDAQ", "USD/KRW", "VIX", "미국 10년물", "미국 HY OAS", "WTI", "국내 CP/CD 스프레드"]
|
||||
rule: "거시는 위험선호/중립/위험회피의 국면판정에만 사용하고, 개별 종목의 가격대는 대체하지 않는다."
|
||||
capital_flow_panel:
|
||||
columns: ["흐름항목", "방향", "강도", "해석", "행동"]
|
||||
required_inputs: ["외국인 5D/20D", "기관 5D/20D", "sector_flow Rotation_Score", "ETF 상대강도", "현금비중", "미체결 주문"]
|
||||
rule: "전체 자금흐름은 매수 트리거가 아니라 비중조절·후행진입·리밸런싱 우선순위를 정하는 입력값이다."
|
||||
scenario_matrix:
|
||||
columns: ["시나리오", "발동조건", "확률가중", "예상국면", "우선행동", "금지행동"]
|
||||
base_probability_rule: "점수 대신 국면·흐름·가격 일치 정도로 가중만 부여하고, 정밀 확률처럼 과장하지 않는다."
|
||||
bull_extension:
|
||||
trigger: "Risk-On + VIX<18 + KOSPI 20일선 위 + 외국인/기관 20D 순매수 + sector_flow 집중"
|
||||
probability_weight: "높음"
|
||||
implication: "주도주 유지, 선행형은 소액 시범진입, 약한 보유주는 축소"
|
||||
action: "코어 유지, 위성은 주도 섹터로만 제한적으로 이동"
|
||||
rotation:
|
||||
trigger: "KOSPI 횡보 + 섹터별 상대강도 급변 + 자금이 기존 주도주에서 신규 리더로 이동"
|
||||
probability_weight: "중간"
|
||||
implication: "보유주 교체보다 자금 재배치 우선"
|
||||
action: "보유주 진단에서 교체 후보와 유지 후보 분리"
|
||||
risk_off_squeeze:
|
||||
trigger: "VIX>25 또는 KOSPI 20일·60일선 동시 하회 + 외국인/기관 20D 동반 매도"
|
||||
probability_weight: "중간~높음"
|
||||
implication: "현금 비중 확대, 신규매수 축소, 반등매도 우선"
|
||||
action: "후행형만 허용, 전술 위성 축소, 리밸런싱 우선"
|
||||
event_shock:
|
||||
trigger: "DART 리스크/금리/환율/유가 급변으로 1~3일 내 가격·수급 동시 충격"
|
||||
probability_weight: "낮음~중간"
|
||||
implication: "일시적 노이즈와 구조적 훼손을 분리"
|
||||
action: "즉시 추격매수 금지, 데이터 재확인 후 대응"
|
||||
sideways_drift:
|
||||
trigger: "가격·수급·거시가 모두 중립이고 거래대금이 축소"
|
||||
probability_weight: "중간"
|
||||
implication: "회전율 낮추고 현금·대기 비중을 높임"
|
||||
action: "보유주 유지/관찰 중심, 신규진입 보류"
|
||||
output_rule:
|
||||
- "미시·거시·자금흐름·시나리오를 한 표 안에 함께 보여준다."
|
||||
- "시나리오 결론은 우선행동과 금지행동을 동시에 써야 한다."
|
||||
- "확률은 정밀 예측이 아니라 상대적 가중으로만 표기한다."
|
||||
prohibition:
|
||||
- "거시만 보고 종목 매수/매도 결론을 내리지 않는다"
|
||||
- "자금흐름만 보고 추격매수 결론을 내리지 않는다"
|
||||
- "시나리오를 한 가지만 고정해 다른 국면 전환 가능성을 지우지 않는다"
|
||||
|
||||
engine_feedback_loop_report:
|
||||
purpose: "매일 제안값과 다음 거래일 결과를 비교해 오차 원인과 개선 제안을 누적하는 평가 섹션."
|
||||
canonical_ref: "Temp/proposal_evaluation_history.json"
|
||||
location: "QEH_AUDIT_BLOCK 직후"
|
||||
columns: ["제안일", "평가일", "종목", "제안", "검산", "제안가", "결과가", "T+1수익률%", "평가", "원인", "개선제안"]
|
||||
fill_rule:
|
||||
- "tools/update_proposal_evaluation_history.py가 생성한 proposal_evaluation_history records를 사용한다."
|
||||
- "T+1 평가 전 행은 PENDING_T1로 두고 성패를 단정하지 않는다."
|
||||
- "MISMATCHED 행은 원인을 rule/feature 수준으로 분류하고 개선 제안을 남긴다."
|
||||
- "표본이 적을 때는 임계치 변경을 제안하되 즉시 강제하지 않는다."
|
||||
|
||||
prediction_evaluation_improvement_report:
|
||||
purpose: "예측 결과 평가 수치와 YAML/GS/JSON/PY 갭을 함께 보여주어 엔진 개선 우선순위를 정하는 섹션."
|
||||
canonical_ref: "Temp/proposal_evaluation_history.json, tools/measure_harness_coverage.py, tools/update_proposal_evaluation_history.py"
|
||||
location: "engine_feedback_loop_report 직후, alpha_feedback_loop_report 이전"
|
||||
columns: ["항목", "값", "의미", "갭"]
|
||||
fill_rule:
|
||||
- "proposal_evaluation_history summary와 하네스 커버리지 측정 결과를 그대로 사용한다."
|
||||
- "YAML/GS/JSON/PY 각 층의 커버리지와 갭을 숫자로 병기한다."
|
||||
- "개선 제안은 평가 기록의 improvement_proposal과 error_cause를 우선 사용한다."
|
||||
- "이 섹션은 다음날 엔진 개선과 반복오류 방지의 근거 원장이다."
|
||||
- "gap 경고가 '경고'이면 운영 검증 실패로 처리하고 주문 실행표를 차단한다."
|
||||
- "커버리지 목표는 YAML/GS/JSON/PY 각 100%이며 미달 시 원인코드를 함께 출력한다."
|
||||
|
||||
core_satellite_timing_gate_table:
|
||||
purpose: "core_satellite 후보의 T+1 강제매도 위험과 매도충돌을 분리 평가하는 표."
|
||||
canonical_ref: "spec/13_formula_registry.yaml:T1_FORCED_SELL_RISK_V1"
|
||||
location: "reference_price_ledger 직후, alpha_feedback_loop_report 이전"
|
||||
columns: ["종목", "종목명", "후보등급", "실행추천상태", "타이밍", "진입점수", "청산점수", "T+1위험", "T+1상태", "매도충돌", "충돌상태", "공식근거"]
|
||||
fill_rule:
|
||||
- "core_satellite.Execution_Recommendation_State를 그대로 출력한다."
|
||||
- "BUY_PILOT_ALLOWED 이외 상태는 HTS 주문표로 승격하지 않는다."
|
||||
- "SELL_OR_TRIM_FIRST, BUY_BLOCKED_SELL_CONFLICT, BUY_BLOCKED_T1_EXIT_RISK 순으로 중요도 정렬한다."
|
||||
|
||||
# ── [2026-05-20_HARNESS_V5] H6: 뒷박 차단 게이트 표 ────────────────────────
|
||||
breakout_quality_gate_table:
|
||||
purpose: "신규 BUY 후보의 뒷박(Late Chase) 차단 점수와 게이트 상태를 하네스 값으로 표시."
|
||||
canonical_ref: "spec/13_formula_registry.yaml:BREAKOUT_QUALITY_GATE_V2"
|
||||
harness_key: "breakout_quality_gate_json"
|
||||
location: "execution_quality_table 직후, order_quantity_4stage_gate 이전"
|
||||
columns:
|
||||
- "종목"
|
||||
- "종목명"
|
||||
- "뒷박점수(0~100)"
|
||||
- "게이트상태"
|
||||
- "주요차단사유"
|
||||
- "BUY허용여부"
|
||||
gate_states:
|
||||
PILOT_ALLOWED: "BUY 허용 — 정상 진입 가능"
|
||||
WATCH_COOLING_OFF: "대기 — 추격 리스크 있음. 신규 BUY 보류."
|
||||
BLOCKED_LATE_CHASE: "차단 — 뒷박 판정. BUY 절대 금지."
|
||||
fill_rule:
|
||||
- "breakout_quality_gate_json 하네스 값을 그대로 복사한다. LLM 재계산 금지."
|
||||
- "BLOCKED_LATE_CHASE 종목은 BUY허용여부='NO (H6 차단)' 기재 후 주문표 승격 금지."
|
||||
- "breakout_quality_gate_json 없으면 표 전체를 'DATA_MISSING — GAS 재실행 필요'로 표시."
|
||||
prohibition:
|
||||
- "breakout_quality_score를 LLM이 재계산하거나 조정 금지"
|
||||
- "BLOCKED_LATE_CHASE 상태를 서사로 완화해 BUY 허용으로 승격 금지"
|
||||
- "이 표 없이 신규 BUY 주문표 출력 금지 (BLOCKED_BREAKOUT_GATE_MISSING)"
|
||||
version: "2026-05-20_HARNESS_V5"
|
||||
|
||||
# ── [2026-05-20_HARNESS_V5] H7: 가짜 매도 차단 게이트 표 ──────────────────
|
||||
anti_whipsaw_gate_table:
|
||||
purpose: "매도 후보의 가짜 매도(Whipsaw) 가능성을 하네스 값으로 표시하고 1거래일 홀드 여부 결정."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:ANTI_WHIPSAW_HOLD_GATE_V1"
|
||||
harness_key: "anti_whipsaw_gate_json"
|
||||
location: "breakout_quality_gate_table 직후"
|
||||
columns:
|
||||
- "종목"
|
||||
- "종목명"
|
||||
- "Whipsaw점수"
|
||||
- "게이트상태"
|
||||
- "홀드일수"
|
||||
- "당일매도허용여부"
|
||||
- "주요사유"
|
||||
gate_states:
|
||||
CONFIRMED_SELL: "매도 허용"
|
||||
INCONCLUSIVE: "50% 매도 허용, 50% 1거래일 후 재평가"
|
||||
WHIPSAW_SUSPECTED: "당일 매도 전량 차단 — 1거래일 홀드"
|
||||
fill_rule:
|
||||
- "anti_whipsaw_gate_json 하네스 값을 그대로 복사한다. LLM 재계산 금지."
|
||||
- "WHIPSAW_SUSPECTED 종목은 당일 매도허용여부='NO (H7 WHIPSAW_SUSPECTED)' 기재."
|
||||
- "anti_whipsaw_gate_json 없으면 'DATA_MISSING — GAS 재실행 필요' 표시."
|
||||
prohibition:
|
||||
- "anti_whipsaw_score를 LLM이 재계산하거나 조정 금지"
|
||||
- "WHIPSAW_SUSPECTED 종목을 서사로 완화해 당일 전량 매도 허용 금지"
|
||||
- "이 표 없이 SELL/TRIM 주문표 출력 금지 (BLOCKED_WHIPSAW_GATE_MISSING)"
|
||||
version: "2026-05-20_HARNESS_V5"
|
||||
|
||||
# ── [2026-05-20_HARNESS_V5] H8: 4경로 현금확보 결정 표 ─────────────────────
|
||||
smart_cash_raise_v2_table:
|
||||
purpose: "현금 부족 시 4경로(ROUTE_A~D) 결정론적 현금확보 라우팅 결과를 하네스 값으로 표시."
|
||||
canonical_ref: "spec/13b_harness_formulas.yaml:SMART_CASH_RAISE_V2"
|
||||
harness_key: "smart_cash_raise_json"
|
||||
location: "anti_whipsaw_gate_table 직후"
|
||||
columns:
|
||||
- "종목"
|
||||
- "종목명"
|
||||
- "확정경로"
|
||||
- "경로설명"
|
||||
- "매도수량"
|
||||
- "반등대기비율(%)"
|
||||
- "결정근거"
|
||||
route_labels:
|
||||
ROUTE_A: "위성 비중 트림 (33~50% 즉시)"
|
||||
ROUTE_B: "과매도 분할 매도 (K2 50/50)"
|
||||
ROUTE_C: "코어 익절 잠금 (익절수량만)"
|
||||
ROUTE_D: "긴급 전량매도 (인간 승인 필수)"
|
||||
NO_ACTION: "현금확보 비대상"
|
||||
fill_rule:
|
||||
- "smart_cash_raise_json 하네스 값을 그대로 복사한다. LLM 라우트 선택 금지."
|
||||
- "ROUTE_D는 emergency_full_sell=true 또는 BREACH_IMMEDIATE_EXIT 사유를 반드시 기재."
|
||||
- "smart_cash_raise_json 없으면 현금확보 매도 주문표를 BLOCKED_CASH_ROUTE_MISSING으로 처리."
|
||||
prohibition:
|
||||
- "smart_cash_raise_route를 LLM이 임의 변경 금지"
|
||||
- "ROUTE_D를 인간 승인 없이 서사로 발동 금지"
|
||||
- "이 표 없이 현금확보 매도 주문표 출력 금지"
|
||||
version: "2026-05-20_HARNESS_V5"
|
||||
|
||||
rebalancing_report_template:
|
||||
purpose: "리밸런싱이 필요할 때만 출력하는 전용 보고서 양식. 목표비중·이탈폭·세후 순현금·제안순서를 한 번에 보여준다."
|
||||
activation:
|
||||
trigger: "rebalancing_trigger.threshold 또는 cash_floor.rebalancing_hard_stop 충족 시"
|
||||
priority: "제안 검토 표 다음, 통합 주문표 이전"
|
||||
note: "리밸런싱이 아니면 기본 출력 금지"
|
||||
columns: ["계좌", "종목명", "현재비중(%)", "목표비중(%)", "이탈폭(p)", "조치유형", "지정가(원)", "수량(주)", "예상순현금(원)", "세금수수료(원)", "실행순서", "검산상태"]
|
||||
trim_row: ["일반계좌", "예시종목", "15.0", "10.0", "+5.0", "축소", "24800", "60", "1488000", "12000", "중복 ETF → 약한 위성 순", "PASS"]
|
||||
buy_row: ["ISA", "예시종목", "8.0", "10.0", "-2.0", "매수", "12500", "80", "-1000000", "8000", "현금 확보 후 분할 재배치", "PASS"]
|
||||
required_inputs:
|
||||
- "현재비중"
|
||||
- "목표비중"
|
||||
- "이탈폭"
|
||||
- "예상 세금·수수료"
|
||||
- "예상 순현금"
|
||||
prohibition:
|
||||
- "현재비중·목표비중·이탈폭 없이 리밸런싱 표 금지"
|
||||
- "세후 순현금 계산 없이 축소/매수 결정 금지"
|
||||
- "리밸런싱은 일반 매수제안 표와 혼용하지 않는다"
|
||||
Reference in New Issue
Block a user