feat(quant-engine): 10개 고전 기술전략 갭분석 후 7개 보조신호 채택
사용자 제시 10개 고전 기술전략(골든크로스/모멘텀/52주신고가/연속상승하락/이격도/돌파실패/ 강한종가/변동성확장/평균회귀/추세필터)을 기존 엔진과 대조한 갭분석 결과: - 이미 구현됨: 모멘텀(VELOCITY_V1/RS_MOMENTUM_V1), 이격도·평균회귀(MEAN_REVERSION_GATE_V1) - 신규 채택 7개: GOLDEN_CROSS_SIGNAL_V1, STRONG_CLOSE_SIGNAL_V1, VOLATILITY_EXPANSION_BREAKOUT_V1, FIFTY_TWO_WEEK_HIGH_TRIGGER_V1, CONSECUTIVE_STREAK_V1, BREAKOUT_FAILURE_STOP_V1, TREND_FILTER_GATE_V1 AGENTS.md 하드룰(추격매수 방지, anti-late-entry gate 필수통과)에 따라 BUY 방향 신호 전부를 STRATEGY_SCORING의 보조신호로만 편입 — BREAKOUT_QUALITY_GATE_V2/FOLLOW_THROUGH_DAY_CONFIRM_V1/ ANTI_LATE_ENTRY_GATE_V2 게이트 체인을 우회하는 독립 BUY 트리거로는 사용하지 않음. 검증: validate_specs/validate_golden_coverage_100(100%)/validate_calibration_registry_v1/ validate_schema_model_generation_v1/validate_agents_shrink_v1 전부 PASS. golden test 22/22 PASS. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,13 @@ formula_registry:
|
||||
- REBALANCE_CADENCE_GATE_V1
|
||||
- WALK_FORWARD_BOOTSTRAP_V1
|
||||
- WEEKLY_LEGACY_TRANSFER_PLAN_V1
|
||||
- GOLDEN_CROSS_SIGNAL_V1
|
||||
- STRONG_CLOSE_SIGNAL_V1
|
||||
- VOLATILITY_EXPANSION_BREAKOUT_V1
|
||||
- FIFTY_TWO_WEEK_HIGH_TRIGGER_V1
|
||||
- CONSECUTIVE_STREAK_V1
|
||||
- BREAKOUT_FAILURE_STOP_V1
|
||||
- TREND_FILTER_GATE_V1
|
||||
implementation_map:
|
||||
REGIME_CONDITIONAL_MACRO_FACTOR_V1: tools/build_predictive_alpha_dialectic_engine_v2.py:NF1
|
||||
REBOUND_CAPTURE_THESIS_FACTOR_V1: tools/build_predictive_alpha_dialectic_engine_v2.py:NF2
|
||||
@@ -151,6 +158,13 @@ formula_registry:
|
||||
REBALANCE_CADENCE_GATE_V1: tools/build_rebalance_cadence_gate_v1.py
|
||||
WALK_FORWARD_BOOTSTRAP_V1: tools/build_walk_forward_bootstrap_v1.py
|
||||
WEEKLY_LEGACY_TRANSFER_PLAN_V1: tools/build_weekly_legacy_transfer_plan_v1.py
|
||||
GOLDEN_CROSS_SIGNAL_V1: tools/build_golden_cross_signal_v1.py
|
||||
STRONG_CLOSE_SIGNAL_V1: tools/build_strong_close_signal_v1.py
|
||||
VOLATILITY_EXPANSION_BREAKOUT_V1: tools/build_volatility_expansion_breakout_v1.py
|
||||
FIFTY_TWO_WEEK_HIGH_TRIGGER_V1: tools/build_fifty_two_week_high_trigger_v1.py
|
||||
CONSECUTIVE_STREAK_V1: tools/build_consecutive_streak_v1.py
|
||||
BREAKOUT_FAILURE_STOP_V1: tools/build_breakout_failure_stop_v1.py
|
||||
TREND_FILTER_GATE_V1: tools/build_trend_filter_gate_v1.py
|
||||
formulas:
|
||||
FLOW_CREDIT_V1:
|
||||
purpose: 가격·거래량·5D 수급 품질을 0~1 점수로 계산
|
||||
@@ -3162,6 +3176,135 @@ formula_registry:
|
||||
canonical_ref: spec/risk/portfolio_exposure.yaml:cash_floor
|
||||
implementation: tools/build_weekly_legacy_transfer_plan_v1.py
|
||||
version: 2026-06-17_P3_v8_9_adoption
|
||||
GOLDEN_CROSS_SIGNAL_V1:
|
||||
purpose: >
|
||||
단기 이동평균(ma20)이 장기 이동평균(ma60)을 상향 돌파하는 골든크로스를 정량 판정한다.
|
||||
STRATEGY_SCORING 보조신호로만 사용 — 단독 BUY 트리거 금지.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-1)
|
||||
inputs:
|
||||
- field: ma20
|
||||
unit: KRW_per_share
|
||||
- field: ma20_prev
|
||||
unit: KRW_per_share
|
||||
- field: ma60
|
||||
unit: KRW_per_share
|
||||
- field: ma60_prev
|
||||
unit: KRW_per_share
|
||||
expression: "golden_cross_today = (ma20_prev <= ma60_prev) AND (ma20 > ma60)"
|
||||
output:
|
||||
field: golden_cross_today
|
||||
unit: boolean
|
||||
missing_policy: ma20_prev/ma60_prev 결측 시 null.
|
||||
canonical_ref: spec/formulas/domains/entry.yaml:GOLDEN_CROSS_SIGNAL_V1
|
||||
implementation: tools/build_golden_cross_signal_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
STRONG_CLOSE_SIGNAL_V1:
|
||||
purpose: >
|
||||
종가가 당일 고가-저가 범위 중 고가 근처에서 마감하는지 판정한다.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-2)
|
||||
inputs:
|
||||
- field: close_price
|
||||
unit: KRW_per_share
|
||||
- field: high_price
|
||||
unit: KRW_per_share
|
||||
- field: low_price
|
||||
unit: KRW_per_share
|
||||
expression: "close_position_pct = (close_price-low_price)/(high_price-low_price)*100; strong_close = close_position_pct >= 80"
|
||||
output:
|
||||
field: strong_close
|
||||
unit: boolean
|
||||
missing_policy: high_price==low_price면 null.
|
||||
canonical_ref: spec/formulas/domains/entry.yaml:STRONG_CLOSE_SIGNAL_V1
|
||||
implementation: tools/build_strong_close_signal_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
VOLATILITY_EXPANSION_BREAKOUT_V1:
|
||||
purpose: >
|
||||
bb_width 수축(squeeze) 후 급등하는 패턴을 판정한다. BREAKOUT_QUALITY_GATE_V2 통과가 전제조건.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-3)
|
||||
inputs:
|
||||
- field: bb_width
|
||||
unit: percent
|
||||
- field: bb_width_20d_percentile
|
||||
unit: percent
|
||||
- field: ret_1d
|
||||
unit: percent
|
||||
expression: "squeeze_detected = bb_width_20d_percentile <= 20; volatility_expansion_breakout = squeeze_detected_previous_day AND ret_1d >= 3.0"
|
||||
output:
|
||||
field: volatility_expansion_breakout
|
||||
unit: boolean
|
||||
missing_policy: bb_width_20d_percentile 결측 시 null.
|
||||
canonical_ref: spec/formulas/domains/entry.yaml:VOLATILITY_EXPANSION_BREAKOUT_V1
|
||||
implementation: tools/build_volatility_expansion_breakout_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
FIFTY_TWO_WEEK_HIGH_TRIGGER_V1:
|
||||
purpose: >
|
||||
종가가 52주 최고가(high52w)를 갱신하는지 판정해 BREAKOUT_QUALITY_GATE_V2 입력으로 공급한다.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-4)
|
||||
inputs:
|
||||
- field: close_price
|
||||
unit: KRW_per_share
|
||||
- field: high52w
|
||||
unit: KRW_per_share
|
||||
expression: "fifty_two_week_high_breakout = close_price >= high52w"
|
||||
output:
|
||||
field: fifty_two_week_high_breakout
|
||||
unit: boolean
|
||||
missing_policy: high52w 결측 시 null.
|
||||
canonical_ref: spec/formulas/domains/entry.yaml:FIFTY_TWO_WEEK_HIGH_TRIGGER_V1
|
||||
implementation: tools/build_fifty_two_week_high_trigger_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
CONSECUTIVE_STREAK_V1:
|
||||
purpose: >
|
||||
N일 연속 상승(up_streak)/하락(down_streak)을 대칭적으로 공식화한다.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-5)
|
||||
inputs:
|
||||
- field: daily_close_changes
|
||||
unit: list_of_percent
|
||||
output:
|
||||
field: up_streak
|
||||
unit: count
|
||||
missing_policy: daily_close_changes 비어있으면 null.
|
||||
canonical_ref: spec/formulas/domains/entry.yaml:CONSECUTIVE_STREAK_V1
|
||||
implementation: tools/build_consecutive_streak_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
BREAKOUT_FAILURE_STOP_V1:
|
||||
purpose: >
|
||||
전고점 돌파 후 7거래일 이내 재이탈하면 SELL_RISK_EXIT_REVIEW를 발동한다.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-6)
|
||||
inputs:
|
||||
- field: prior_high
|
||||
unit: KRW_per_share
|
||||
- field: close_price
|
||||
unit: KRW_per_share
|
||||
- field: days_since_breakout
|
||||
unit: trading_days
|
||||
expression: "breakout_failure = (days_since_breakout <= 7) AND (close_price < prior_high)"
|
||||
output:
|
||||
field: breakout_failure
|
||||
unit: boolean
|
||||
missing_policy: prior_high 결측 시 null.
|
||||
canonical_ref: spec/formulas/domains/exit.yaml:BREAKOUT_FAILURE_STOP_V1
|
||||
implementation: tools/build_breakout_failure_stop_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
TREND_FILTER_GATE_V1:
|
||||
purpose: >
|
||||
종가가 ma120 위에 있고 ma120이 상승 중인지 단일 게이트로 판정한다.
|
||||
(governance/todo/technical_signals_p4_adoption_plan.yaml P4-7)
|
||||
inputs:
|
||||
- field: close_price
|
||||
unit: KRW_per_share
|
||||
- field: ma120
|
||||
unit: KRW_per_share
|
||||
- field: ma120_prev
|
||||
unit: KRW_per_share
|
||||
expression: "trend_filter_pass = (close_price > ma120) AND (ma120 > ma120_prev)"
|
||||
output:
|
||||
field: trend_filter_pass
|
||||
unit: boolean
|
||||
missing_policy: ma120/ma120_prev 결측 시 null.
|
||||
canonical_ref: spec/strategy/entry_core.yaml:entry_timing_guardrails.regime_based_entry
|
||||
implementation: tools/build_trend_filter_gate_v1.py
|
||||
version: 2026-06-18_technical_signals_p4
|
||||
SELL_EXECUTION_TIMING_V1:
|
||||
purpose: '장중 가격 움직임에 따라 매도 주문 유형과 타이밍을 결정론적으로 판정. 장초반 패닉 매도, 반등 직전 저점 투매 방지.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user