Files
QuantEngineByItz/tools/build_golden_cross_signal_v1.py
kjh2064 782fe74578 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>
2026-06-18 00:29:18 +09:00

45 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""GOLDEN_CROSS_SIGNAL_V1 — spec/formulas/domains/entry.yaml.
Detects ma20 crossing above ma60 (golden cross). Auxiliary STRATEGY_SCORING signal
only -- never an independent BUY trigger. governance/todo/technical_signals_p4_adoption_plan.yaml P4-1.
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
DEFAULT_OUT = ROOT / "Temp" / "golden_cross_signal_v1.json"
def golden_cross_today(ma20: float | None, ma20_prev: float | None, ma60: float | None, ma60_prev: float | None) -> bool | None:
if None in (ma20, ma20_prev, ma60, ma60_prev):
return None
return ma20_prev <= ma60_prev and ma20 > ma60
def main() -> int:
ap = argparse.ArgumentParser()
ap.add_argument("--ma20", type=float, default=None)
ap.add_argument("--ma20-prev", type=float, default=None)
ap.add_argument("--ma60", type=float, default=None)
ap.add_argument("--ma60-prev", type=float, default=None)
ap.add_argument("--out", default=str(DEFAULT_OUT))
args = ap.parse_args()
result = {
"formula_id": "GOLDEN_CROSS_SIGNAL_V1",
"golden_cross_today": golden_cross_today(args.ma20, args.ma20_prev, args.ma60, args.ma60_prev),
"hard_constraint": "auxiliary_signal_only_not_buy_trigger",
}
out = Path(args.out)
out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(result, ensure_ascii=False, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())