---
title: "[Lap 6] [모듈 5: Veto] 7대 Hard Veto 헌법과 즉시 기각 심판관"
canonical_url: "https://wealth-podium.com/2026/11/01/track-02-lap-06-hard-veto-judge-tdd/"
published_at: "2026-11-01T09:00:00+09:00"
modified_at: "2026-11-07T15:44:36+09:00"
author: "Dellwon (Software Developer & System Architect)"
summary: "수익률 탐색기가 아닌 가짜 알파 기각 엔진으로: 7가지 치명적 결함 검출 시 즉시 영구 사형을 선고하는 7대 Hard Veto 헌법과 T+2 실행 지연 스트레스 테스트 TDD 구현기를 공개합니다."
---
# [Lap 6] [모듈 5: Veto] 7대 Hard Veto 헌법과 즉시 기각 심판관

> **"연 50%의 대박 수익률을 기록한 백테스트 결과를 마주했을 때, 퀀트 아키텍트가 가져야 할 가장 정직한 반응은 환호가 아니라 '의심과 공포'입니다. 금융 시장에서 비정상적으로 아름다운 수익률 곡선의 99%는 뛰어난 알고리즘이 아니라, 데이터 누수나 과최적화가 만들어낸 통계적 신기루이기 때문입니다."**  
> 
> 지난 `Lap 5`에서 저는 24개 지표를 통해 알고리즘의 수익성뿐 아니라 팻 테일(Fat-Tail)과 왜도·첨도까지 입체적으로 채점하는 `MetricsCalculator`를 완성했습니다.  
> 
> 하지만 지표가 아무리 나쁘게 나와도, 사람이 직접 백테스트 결과를 열어보면 마음속에서 악마의 속삭임이 시작됩니다. *"MDD가 좀 깊긴 하지만 2008년 한 번뿐이잖아?", "샤프 지수가 0.7이지만 연수익률이 35%나 되는데 실전에 한번 돌려볼까?"*  
> 
> 사람은 누구나 자신이 오랜 시간 공들여 만든 알고리즘을 감싸고 합리화하려 듭니다.  
> 그래서 저는 **사람의 감정과 타협을 완전히 배제하고, 7가지 치명적 결함 중 단 하나라도 검출되면 총점과 무관하게 알고리즘을 즉시 쓰레기통으로 보내버리는 자동 사형 집행관, `HardVetoJudge`(즉시 기각 심판관)**를 구축했습니다.  
> 
> 이번 글에서는 백테스터의 본질을 '수익률 탐색기'에서 **'가짜 알파 기각 엔진(Falsification Engine)'**으로 탈바꿈시킨 7대 Hard Veto 헌법과, T+2 실행 지연 스트레스 테스트를 통과시키는 TDD 구현기를 공유합니다.

---

## 1. 프롤로그: "내가 만든 전략"이라는 최악의 인지 편향

퀀트 시스템을 개발하면서 제가 겪은 가장 뼈아픈 실수는 시장의 급락이 아니라 **'내 코드에 대한 애착'**이었습니다.  
주말 내내 머리를 싸매고 수식과 피처를 조합해 만든 전략이 백테스트에서 마이너스를 내거나 위기 구간에서 무너지면, 뇌는 즉시 자기합리화 회로를 돌립니다:

- *"2020년 3월 코로나는 100년에 한 번 올까 말까 한 블랙 스완이었으니, 저 구간만 빼고 평가하자."*
- *"슬리피지 15bps는 너무 가혹해. 실전에서는 지정가로 잘 체결될 거야."*
- *"이동평균 기간을 20일에서 23일로 바꾸니까 샤프가 1.8로 뛰네? 이걸로 확정하자."*

이런 미세한 타협과 자기기만이 누적되는 순간, 백테스트는 과학적 검증이 아니라 **과거 데이터에 끼워 맞춘 사기극(P-Hacking)**으로 변질됩니다. 그리고 그 대가는 실전 계좌의 잔인한 반토막으로 돌아옵니다.

수익률을 쥐어짜는 백테스터는 위험합니다.  
**진짜 백테스터의 제1사명은 돈을 버는 전략을 찾는 것이 아니라, 실전에서 계좌를 파산시킬 전략 99개를 실전 투입 전에 가차 없이 죽여 없애는(Kill) 것**이어야 합니다.

---

## 2. 아키텍처 설계: 7대 Hard Veto 헌법과 3단계 게이트웨이

저는 알고리즘의 실전 투입 여부를 결정하기 위해 주관적 해석을 완전히 배제한 **3단계 평가 깔때기(Funnel Protocol, `EVAL-QB-002`)**를 설계했습니다.

![7대 Hard Veto 헌법과 3단계 알고리즘 채택·기각 게이트웨이](/wp-content/diagrams/track-02-lap-06-hard-veto-judge.png)

```mermaid
flowchart TD
    Run["전략 35년 시뮬레이션 완료 (24개 지표 산출)"] --> G1{"Stage 1: 7대 치명적 결함<br/>(Hard Veto) 적발 여부?"}
    
    G1 -->|"단 1건이라도 위반"| Kill["❌ 즉시 사형 (REJECTED)<br/>코드 영구 폐기 or 근본 재설계"]
    G1 -->|"7대 헌법 100% 무결점 통과"| G2{"Stage 2: 전략 아키타입별<br/>필수 합격 커트라인 충족?"}
    
    G2 -->|"기준 미달"| Kill
    G2 -->|"전 항목 합격"| G3{"Stage 3: 100점 만점<br/>종합 정량 스코어카드"}
    
    G3 -->|">= 85점 (Grade S/A)"| Pass["🏆 최종 채택 (ACCEPTED)<br/>Master Gate 날인 & 실전 승격"]
    G3 -->|"70 ~ 84점 (Grade B)"| Revise["⚠️ 조건부 보완 (1회 재심)"]
    G3 -->|"< 70점 (Grade C/F)"| Kill
```

### 7대 Hard Veto 즉시 기각 조항 (Automatic Kill Conditions)
아래 7개 조항 중 **단 하나라도 적발되면 누적 수익률이 +1,000%라도 즉시 영구 기각(`REJECTED`)**됩니다:

| Veto ID | 헌법 조항 명칭 | 정량적 즉시 기각 조건 (Kill Condition) | 기각 근거 및 아키텍처 철학 |
| :---: | :--- | :--- | :--- |
| **VETO-01** | **시점/데이터 무결성 위반** | 미래 가격(`trade_date > T`) 또는 미공시 재무(`filing_date > T`) **단 1건이라도 참조** | 백테스트 수익률 전체가 타임머신 환상(Look-Ahead)임 |
| **VETO-02** | **실행 지연 알파 붕괴** | 시그널 발생 후 $T+2$ 시가 체결 시 **샤프 유지율 $< 80\%$** | 중장기 구조적 알파가 아닌 일시적 단타 호가 노이즈 |
| **VETO-03** | **최근 시장(OOS) 알파 소멸** | 표본 외(2015~현재) **샤프 $< 0.60$** 또는 워크포워드 효율($\text{WFE}$) **$< 0.65$** | 90년대에만 통하고 현대 알고리즘 시장에서 소멸된 전략 |
| **VETO-04** | **파라미터 과최적화 (절벽)** | 파라미터 $\pm 15\%$ 변경 시 **이웃 안정성 $< 0.70$** 또는 $\text{DSR} < 0.90$ | 특정 뾰족한 숫자에만 끼워 맞춘 곡선 적합(Curve-Fitting) |
| **VETO-05** | **마찰 비용 취약성** | 기본 수수료/슬리피지를 **2배로 가중했을 때 순알파가 음수($<0$)로 전환** | 스프레드 확대 시 계좌가 수수료만 내다 파산 |
| **VETO-06** | **단타성 과잉 회전·소형주** | 평균 보유일 **$< 10$일**, 연회전 **$> 600\%$**, 소형주(시총 $\$1\text{B}$ 미만) 수익 **$> 50\%$** | 실전 유동성 충격 재현 불가, No Day-Trading 헌법 위반 |
| **VETO-07** | **위기 구간 계좌 파산 낙폭** | 4대 금융위기 중 어느 한 번이라도 **MDD 주식 $-30\%$, 자산배분 $-18\%$ 초과** | 실전 운용 시 심리적·금전적 파산으로 완주 불가 |

---

## 3. [TDD 핵심 발췌]: T+2 실행 지연 시 가짜 알파를 처형하는 심판관

7대 헌법 중 가장 교묘하고도 치명적인 함정이 바로 **`VETO-02` (실행 지연 알파 붕괴)**입니다.  
많은 개인 퀀트들이 $T$일 종가로 계산하여 $T+1$일 아침 시가(MOO)에 체결되는 전략을 만듭니다. 하지만 실전에서는 API 네트워크 지연, 슬리피지, 호가 공백으로 인해 주문이 밀려 $T+2$일에 체결될 수 있습니다.

진짜 펀더멘털과 거시 모멘텀에 기반한 '구조적 알파'라면 하루 늦게 산다고 해서 수익률이 무너지지 않습니다. 반면, **당일 종가 호가의 미세 노이즈나 일시적 수급에 기댄 '가짜 알파'는 체결이 하루만 밀려도 알파가 처참하게 붕괴**합니다.

![T+1 vs T+2 실행 지연 스트레스 테스트와 가짜 알파 붕괴](/wp-content/diagrams/track-02-lap-06-execution-delay-veto.png)

```mermaid
sequenceDiagram
    autonumber
    participant Engine as Backtest Engine
    participant Judge as HardVetoJudge
    participant Strategy as Alpha Strategy

    Engine->>Strategy: 1. 표준 실행 (T+1 MOO 시가 체결)
    Strategy-->>Engine: Sharpe = 1.85, CAGR = +42.5%
    Engine->>Strategy: 2. 강제 지연 스트레스 (T+2 MOO 시가 체결)
    Strategy-->>Engine: Sharpe = 0.58, CAGR = +8.4%
    
    Engine->>Judge: 3. 결과 전달 (audit_strategy)
    Note over Judge: T+2 유지율 = 0.58 / 1.85 = 31.4%<br/>기준치(80%) 미달 검출!
    Judge-->>Engine: 4. throw VetoViolationError (VETO-02 즉시 사형)
    Note over Engine: 전략 리더보드 퇴출 및 코드 영구 폐기
```

### [RED] 체결이 하루 지연되면 성과가 폭락하는 전략을 즉시 사형시키는 실패 테스트
시그널 발생 후 다음 날($T+1$) 산 결과와 다다음 날($T+2$) 산 결과를 비교하여, 샤프 유지율이 80% 미만이면 가차 없이 `VetoViolationError`를 던져야 합니다.

```python
# tests/test_hard_veto_judge.py
import pytest
from quant_backtester.evaluation.judge import HardVetoJudge, VetoViolationError

def test_veto_02_execution_delay_kills_fragile_alpha():
    # Case A: 겉보기엔 화려하지만 하루만 지연돼도 무너지는 가짜 단타 모멘텀 전략
    fragile_strategy_metrics = {
        "name": "Overfitted_Noise_Scalper_v1",
        "t1_metrics": {"cagr": 0.425, "sharpe": 1.85, "mdd": -0.142},
        "t2_metrics": {"cagr": 0.084, "sharpe": 0.58, "mdd": -0.386},  # 유지율 31.4%
        "is_metrics": {"sharpe": 1.90},
        "oos_metrics": {"sharpe": 0.65, "wfe": 0.68},
        "holding_days": 4.2,   # 단타 회전
        "annual_turnover": 7.5 # 750% 회전
    }

    judge = HardVetoJudge()

    # 타협 없이 VetoViolationError 예외를 발생시키고 즉시 사형 판정을 내려야 함
    with pytest.raises(VetoViolationError) as exc_info:
        judge.audit(fragile_strategy_metrics)

    assert "VETO-02" in str(exc_info.value)
    assert exc_info.value.veto_id == "VETO-02"
    assert "Execution Delay Retention (31.4%) < 80.0%" in str(exc_info.value)
```

### [GREEN] 7대 헌법을 단 한 치의 오차 없이 집행하는 `HardVetoJudge`
어떤 감정이나 합리화도 개입할 수 없도록, 7개 검증 메서드를 순차 실행하여 위반 즉시 사형 예외(`VetoViolationError`)를 발생시킵니다.

```python
# quant_backtester/evaluation/judge.py
from dataclasses import dataclass
from typing import Dict, Any, List

class VetoViolationError(Exception):
    def __init__(self, veto_id: str, rule_name: str, reason: str):
        self.veto_id = veto_id
        self.rule_name = rule_name
        self.reason = reason
        super().__init__(f"[{veto_id} 사형 선고: {rule_name}] {reason}")

class HardVetoJudge:
    def __init__(self, delay_retention_threshold: float = 0.80):
        self.delay_threshold = delay_retention_threshold

    def audit(self, result: Dict[str, Any]) -> bool:
        # VETO-01: 시점 무결성 (Look-Ahead 검증)
        if result.get("lookahead_leak_count", 0) > 0:
            raise VetoViolationError("VETO-01", "시점 무결성 위반", f"미래 데이터 누출 {result['lookahead_leak_count']}건 검출")

        # VETO-02: T+2 실행 지연 알파 유지율 검증
        t1_sr = result["t1_metrics"]["sharpe"]
        t2_sr = result["t2_metrics"]["sharpe"]
        retention = t2_sr / (t1_sr + 1e-9)
        if retention < self.delay_threshold:
            raise VetoViolationError(
                "VETO-02", "실행 지연 알파 붕괴",
                f"Execution Delay Retention ({retention*100:.1f}%) < {self.delay_threshold*100:.1f}%"
            )

        # VETO-06: 회전율 및 최소 보유 기간 검증
        if result.get("holding_days", 99) < 10.0:
            raise VetoViolationError("VETO-06", "단타성 과잉 매매", f"평균 보유일({result['holding_days']:.1f}일)이 10일 미만")

        # VETO-07: 위기 구간 극단적 낙폭 검증
        if result.get("crisis_mdd_stock", 0.0) < -0.30:
            raise VetoViolationError("VETO-07", "위기 계좌 파산", f"위기 구간 MDD({result['crisis_mdd_stock']*100:.1f}%)가 -30% 초과")

        return True # 7대 헌법 무결점 통과
```

---

## 4. [BENCHMARK] 진짜 알파 vs 가짜 알파의 실측 심판 리포트

실제로 동일한 연평균 수익률 대역에서 개발된 두 전략을 `HardVetoJudge` 심판대에 올렸을 때 생성된 공식 감사 영수증(`latest_scorecard.json`) 대조표입니다:

| 평가 항목 | 전략 A (단타 수급 모멘텀) | 전략 B (CbOP 퀄리티 팩터 + 거시 헤지) | 판정 기준 및 심판관 코멘트 |
| :--- | :---: | :---: | :--- |
| **겉보기 CAGR (T+1)** | **+42.5%** | +21.4% | A가 2배 높아 보이지만 환상에 불과함 |
| **지연 체결 CAGR (T+2)** | **+8.4%** | **+20.1%** | A는 체결 지연 시 수익률 80% 증발 |
| **T+1 샤프 지수** | **1.85** | 1.42 | 겉보기 위험조정수익 |
| **T+2 샤프 지수** | **0.58** | **1.34** | B는 거의 변동 없이 유지 |
| **T+2 알파 유지율** | **31.4% (위반)** | **94.4% (통과)** | **`VETO-02` 기준치(80%) 미달 ➔ A 즉시 사형** |
| **평균 보유 기간** | **4.2일 (위반)** | **42.5일 (통과)** | **`VETO-06` 기준치(10일) 미달 ➔ A 2중 위반** |
| **2008 금융위기 MDD** | **-38.6% (위반)** | **-12.8% (통과)** | **`VETO-07` 기준치(-30%) 초과 ➔ A 파산 확정** |
| **최종 판정** | **❌ REJECTED (영구 폐기)** | **✅ ACCEPTED (실전 승격)** | **B만 Master Leaderboard에 등재** |

전략 A는 개발자에게 연 40%가 넘는 달콤한 꿈을 꾸게 해 주었지만, `HardVetoJudge`의 무자비한 칼날 앞에서는 단 3초 만에 3개 조항 위반으로 사형 선고를 받았습니다.  
반면 전략 B는 겉보기 수익률은 낮았지만, **실행 지연 94.4% 유지율과 2008년 위기 MDD -12.8%라는 압도적 강건성을 증명하며 실전 운용 자격을 획득**했습니다.

---

## 5. 에필로그 & 다음 이야기: 이제 출정식(EVAL-QB-002)과 마스터 리더보드로 향합니다

이제 우리는 월 0원 데이터 레이크하우스(`Lap 1`)부터, 미래 참조를 원천 차단하는 데이터 포털(`Lap 2`), 잔인할 정도로 현실적인 체결 엔진(`Lap 3`), 2008년 금융위기에서도 오차 없는 복식부기 회계(`Lap 4`), 24개 입체 지표 채점기(`Lap 5`), 그리고 가짜 알파를 가차 없이 처형하는 7대 Hard Veto 심판관(`Lap 6`)까지 **백테스터의 5대 핵심 모듈을 모두 완공**했습니다.

백테스터는 단순한 장난감이 아닙니다.  
나의 소중한 자본과 시간을 지키기 위해, 시장이라는 잔혹한 서킷에 나가기 전 알고리즘을 극한까지 담금질하는 **우리만의 독자적인 '신뢰의 관제탑'**입니다.

모든 모듈이 준비되었으니, 이제 AI 수석 아키텍트의 엄격한 아키텍처 평가 감사(`EVAL-QB-002`)를 최종 통과시키고, 백테스터 완공 선언과 함께 대망의 **'마스터 리더보드(Master Leaderboard)'**를 출범시킬 차례입니다.

> 💡 **다음 이야기 예고:**  
> **`[Lap 7] [출정식] AI 수석 아키텍트의 감사 보고서와 마스터 리더보드`**  
> 
> "가짜 알파의 무덤 위에 세워진 신뢰의 관제탑."  
> 아키텍처 평가서 독립 감사 통과, 시즌 1 완공 선언 및 시즌 2 5대 전략(매크로 ETF, 밸류 팩터, 퀀타멘털 스윙, PEAD, 하이브리드 HRP) 출격식으로 찾아뵙겠습니다.
