# risk_policy.md

- 문서명: Risk Policy
- 프로젝트 코드명: **ACE-F v1**
- 상태: Draft for Phase 0 Sign-off
- 버전: 0.1
- 작성일: 2026-03-12
- 목적: 자동매매 시스템의 **자본 보존, 운영 안전성, 데이터 이상 대응, 손실 제한** 정책을 고정합니다.

> 원칙: 수익은 나중에 따라오더라도, 자동화 초기에는 **큰 손실, 운영 사고, 규칙 이탈**을 먼저 막습니다.

## 1. 리스크 관리 철학

1. **생존 우선**
   - 전략이 아무리 좋아도 운영 실수로 계좌가 훼손되면 실패로 간주합니다.

2. **자동화보다 통제 우선**
   - 시스템이 판단할 수 없는 상황에서는 no-trade가 기본입니다.

3. **정확도보다 일관성 우선**
   - 수익률을 높이기 위해 지나치게 공격적인 포지션 확대를 허용하지 않습니다.

4. **리스크는 다층 구조**
   - 종목 리스크, 섹터 리스크, 시장 리스크, 데이터 리스크, 모델 리스크, 실행 리스크를 분리합니다.

## 2. 적용 범위

본 정책은 아래 항목에 적용됩니다.

- 신호 생성
- 후보 종목 선정
- 포지션 사이징
- 주문 제출
- 포지션 보유
- 청산
- 장애 대응
- paper trading 및 live trading

## 3. 계좌 및 전략 범위 리스크 정책

### 3.1 v1 허용 범위
- 미국 보통주
- 롱 온리
- 기본 보유 1~5거래일
- 이벤트 기반 continuation 전략

### 3.2 v1 금지 범위
- 옵션 / 0DTE / 선물 / 레버리지 ETF
- 자동 숏
- same-day exit가 핵심인 intraday 전략
- borrow/locate가 필요한 포지션
- 데이터 출처가 불명확한 소셜 단독 진입

### 3.3 계좌 정책
- v1은 daytrade 빈도에 의존하지 않습니다.
- 전략의 기본 구조는 **다음 세션 진입 + overnight 보유 가능** 구조입니다.
- 현금계좌 전용 settled cash 엔진은 별도 전략으로 분리하며, 본 정책의 기본 운영 범위에 포함하지 않습니다.

## 4. 포지션 사이징 정책

### 4.1 Paper trading 기본값
- 거래당 허용 손실: 계좌 기준 **0.35%**
- 동시 최대 포지션 수: **3개**
- 동일 섹터 최대 포지션 수: **2개**
- 총 신규 위험 합계: **1.0%/일 이하**

### 4.2 초기 live trading 기본값
- 거래당 허용 손실: 계좌 기준 **0.10% ~ 0.20%**
- 동시 최대 포지션 수: **2개**
- 동일 섹터 동시 보유: **1개** 권장
- 총 신규 위험 합계: **0.50%/일 이하**

### 4.3 포지션 크기 산정 원칙
포지션 크기는 다음 요소로 산정합니다.
- 진입가
- 초기 손절가
- 주당 위험
- 계좌 허용 손실
- 유동성 한도
- 일일 총위험 잔여량

### 4.4 유동성 기반 제한
- 하루 평균 거래대금이 낮거나 스프레드가 넓으면 포지션 크기를 축소합니다.
- 한 종목에서 일평균 거래량 대비 과도한 참여율을 금지합니다.
- 시가총액/유동성 필터를 통과해도, 이벤트일의 체결 환경이 나쁘면 no-trade 처리합니다.

## 5. 진입 리스크 정책

### 5.1 진입 허용 조건
다음 조건을 모두 충족해야 진입 가능합니다.
- 공식 이벤트 존재
- 가격 확인 통과
- 시장 레짐 허용 범위
- 데이터 최신성 확인
- LLM 또는 규칙 파서의 신뢰도 기준 충족
- 리스크 예산 잔여
- 포트폴리오 집중도 한도 미초과

### 5.2 진입 금지 조건
아래 중 하나라도 해당하면 신규 진입 금지입니다.
- 데이터 수집 실패 또는 stale 상태
- 원문 문서 해석 충돌
- 거래대금/스프레드 조건 미달
- 이벤트의 materiality 불명확
- 장 시작 직후 과도한 갭 과열
- 시장이 급격한 risk-off 상태
- 동일 섹터 익스포저 과다
- 동일 종목 재진입 쿨다운 미충족

## 6. 손절/청산 정책

### 6.1 초기 손절
초기 손절은 다음 중 더 보수적인 값을 사용합니다.
- 반응일 저가 또는 확인된 구조적 지지 이탈
- ATR 기반 손절

### 6.2 시간 청산
- 이벤트 성격상 follow-through가 빨리 나와야 하는 전략입니다.
- 기본 최대 보유는 5거래일입니다.
- 2~3거래일 내 반응이 없으면 조기 종료 가능합니다.

### 6.3 부분 익절
- +1.2R ~ +1.5R 구간에서 일부 익절 허용
- 남은 물량은 trailing/시간 청산 규칙 적용
- 부분 익절은 성과 안정화 목적이며, 전체 전략의 기대값을 훼손하면 비활성화할 수 있습니다.

### 6.4 비상 청산
아래 상황에서는 전략 시그널과 무관하게 비상 청산이 가능합니다.
- 브로커/포지션 상태 불일치
- 거래정지/상장위험 공시
- 데이터 이상으로 stop 추적 불가
- 시장 구조적 쇼크
- 법적/규제성 악재

## 7. 포트폴리오 리스크 정책

### 7.1 집중도 제한
- 동일 섹터: 최대 2개 (paper), 최대 1개 권장 (초기 live)
- 동일 테마 집중: 금지
- 단일 종목 비중 과대화 금지

### 7.2 시장 레짐 제한
- risk-off 환경에서는 신규 진입 수를 줄입니다.
- 고변동성 구간에서는 포지션 크기를 자동 축소합니다.
- 레짐이 매우 불안정하면 신규 진입 중단 후 보유분만 관리합니다.

### 7.3 상관 리스크
- 서로 다른 종목이라도 동일 테마/공급망/반도체/AI 인프라처럼 높은 상관이 있으면 동일 버킷으로 계산합니다.
- 시스템은 종목 수가 아니라 **실질적 독립 베팅 수**를 관리해야 합니다.

## 8. 손실 제한 장치

### 8.1 일일 브레이크
- 실현손실 + 미실현 위험 기준 **-1.0R 또는 계좌 -1.0%** 수준 도달 시 신규 진입 중단
- 이후는 기존 포지션 관리만 허용

### 8.2 주간 브레이크
- 5거래일 롤링 손실이 **계좌 -2.5%** 도달 시 전략 일시중지 및 원인 점검

### 8.3 연속 손실 브레이크
- 연속 3손실 시 신규 진입 1거래일 중지
- 연속 5손실 시 전략 재검토 전까지 paper 모드로 강등

### 8.4 운영 사고 브레이크
다음 중 하나라도 발생하면 즉시 kill switch:
- 중복 주문
- 잘못된 심볼 체결
- 손절 미작동
- 미확인 포지션 잔존
- stale data 기반 주문 제출
- 브로커 응답 불일치 누적

## 9. 데이터/모델 리스크 정책

### 9.1 데이터 최신성
- 핵심 소스(SEC, 시세, 주문 상태)가 stale이면 신규 주문 금지
- 이벤트 발생 시각과 반응일 귀속이 불명확하면 보수적으로 제외

### 9.2 데이터 품질
- 필수 필드 누락 시 no-trade
- 동일 이벤트에 대해 원문과 파서 결과가 충돌하면 human review 또는 no-trade
- 소셜/뉴스 overlay는 누락되어도 core 전략은 동작 가능해야 합니다.

### 9.3 모델 리스크
- LLM 출력은 항상 구조화 JSON + confidence 포함
- confidence 미달 또는 schema 불일치 시 fallback 규칙 사용
- LLM만으로 주문을 생성하지 않습니다.

### 9.4 드리프트 감시
- 파서 결과 분포가 급변하면 경보
- 종목군/섹터별 성과 붕괴 시 전략 중단 검토
- attention feature가 갑자기 과도한 영향력을 갖기 시작하면 weight 재점검

## 10. 실행 리스크 정책

### 10.1 주문 원칙
- 단순 주문 우선
- 과도한 주문 수정/취소 반복 금지
- 체결 불확실성이 큰 상황에서는 공격적인 추격 금지

### 10.2 체결 모니터링
- 주문 제출, 접수, 부분 체결, 전량 체결, 취소, 거부를 모두 로그화
- 브로커 상태와 내부 포지션 상태를 정기 대사(reconciliation)
- 체결 지연 또는 거부 사유는 사후 리뷰에 포함

### 10.3 거래시간 정책
- 휴장/조기폐장/이벤트일 비정상 시장 상태를 캘린더로 관리
- 장 전·장 후는 v1 핵심 전략의 주문 시간대로 사용하지 않습니다.
- 반응일 종가 계산은 정규장 기준으로 통일합니다.

## 11. 사람 개입 정책

### 11.1 Human-in-the-loop
- paper 단계에서는 수동 확인을 일부 허용
- 초기 live 단계에서는 자동 진입이라도 **사전/사후 알림** 필수
- 운영자는 언제든 kill switch를 사용할 수 있어야 합니다.

### 11.2 수동 개입 허용 범위
- 브로커 장애
- 데이터 오류
- 기업 이벤트 해석 충돌
- 규정/리스크 위반 가능성
- 예상치 못한 포지션 상태 불일치

### 11.3 수동 개입 기록
- 개입 사유
- 개입 시각
- 개입 전후 포지션 상태
- 손익 영향
- 재발방지 액션

## 12. 배포 게이트

### 12.1 Paper → Live 전환 조건
- 최소 8주 이상의 paper 운영
- 데이터 누락/중복 주문/상태 불일치가 통제 가능한 수준
- 전략 손실보다 운영 사고 손실이 작을 것
- post-trade review가 자동 생성될 것
- 파서 실패 fallback이 검증될 것

### 12.2 Live 증액 조건
- 최소 40~80건 이상 실거래 표본 확보
- outlier 몇 건이 아닌 분포 전체에서 기대값 유지
- 슬리피지/체결 품질 악화 없음
- 운영 개입 비율 감소

## 13. 필수 로그 및 감사 항목
- signal_id
- event_id
- source provenance
- feature snapshot
- order decision reason
- risk budget snapshot
- submitted/filled/cancelled timestamps
- override 여부
- post-trade label

## 14. 사고 대응 원칙
1. 포지션 안전 확인
2. 신규 주문 중지
3. 데이터/브로커 상태 대사
4. 원인 구분 (데이터/모델/브로커/코드)
5. 재발 방지 조치 문서화
6. 심각도에 따라 live → paper 강등

## 15. 변경 관리
- 손실 한도, 포지션 한도, live 게이트 변경은 본 문서 버전업이 필요합니다.
- 공격적 리스크 확대는 최소 1개 월간 리뷰와 1개 안정적인 paper/live 검증 뒤에만 허용합니다.

## 부록 A. 운영 기본값 요약
- v1 실거래: 롱 온리
- 거래당 허용손실: 0.10%~0.20% (초기 live)
- 동시 포지션: 2개 권장
- 총 신규위험: 0.50%/일 이하
- 일일 브레이크: 계좌 -1.0%
- 주간 브레이크: 계좌 -2.5%
- 연속 3손실: 1일 pause
- 연속 5손실: paper 강등 검토

## 부록 B. 참고 링크
- SEC EDGAR APIs: https://www.sec.gov/search-filings/edgar-application-programming-interfaces
- SEC Developer Resources: https://www.sec.gov/about/developer-resources
- Alpaca API rate limit support note: https://alpaca.markets/support/usage-limit-api-calls
- Alpaca Market Data API: https://docs.alpaca.markets/docs/about-market-data-api
- FINRA short sale volume: https://www.finra.org/finra-data/browse-catalog/short-sale-volume-data/daily-short-sale-volume-files
