# 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