리스크 관리
MoneyMax의 리스크 관리 시스템은 개별 포지션과 전체 포트폴리오 수준에서 위험을 제어합니다.
기본 리스크 파라미터
| 파라미터 | 기본값 | 설명 |
|---|---|---|
max_position_pct | 5% | 포트폴리오 대비 단일 포지션 최대 비중 |
max_portfolio_risk_pct | 20% | 전체 포트폴리오 노출 한도 |
default_stop_loss_pct | 3% | 기본 손절 비율 |
default_take_profit_pct | 6% | 기본 익절 비율 (2:1 R/R) |
max_daily_trades | 10 | 일일 최대 거래 수 |
min_confidence | 0.60 | 최소 시그널 신뢰도 |
포지션 사이징
포지션 크기는 다음 공식으로 결정됩니다:
position_capital = portfolio_value × max_position_pct × signal_confidence
quantity = position_capital / current_price예시:
- 포트폴리오: 10,000 USDT
- max_position_pct: 5%
- 시그널 신뢰도: 0.85
- BTC 가격: 97,000 USDT
capital = 10,000 × 0.05 × 0.85 = 425 USDT
quantity = 425 / 97,000 = 0.00438 BTC신뢰도 스케일링
시그널 신뢰도가 높을수록 더 큰 포지션을 잡습니다. 0.60 시그널은 최대 배분의 60%만 사용하고, 0.95 시그널은 95%를 사용합니다.
손절/익절 (SL/TP)
ATR 기반 손절
ATR(Average True Range) 값이 있으면 이를 활용합니다:
stop_distance = ATR × 2.0
stop_loss = entry_price - stop_distance (BUY의 경우)
stop_loss = entry_price + stop_distance (SELL의 경우)ATR이 없으면 기본 3% 비율을 사용합니다.
리스크-보상 비율 기반 익절
risk = |entry_price - stop_loss|
reward = risk × rr_ratio (기본 2.0)
take_profit = entry_price + reward (BUY의 경우)기본 설정에서 R/R = 2:1 — 손실 1에 수익 2를 목표로 합니다.
포트폴리오 리스크 체크
새로운 포지션을 열기 전 다음을 확인합니다:
- 포트폴리오 노출 한도: 전체 오픈 포지션 가치가 포트폴리오의 20%를 넘지 않는지
- 일일 거래 한도: 오늘 실행한 거래가 10건 미만인지
- 최소 신뢰도: 시그널 신뢰도가 0.60 이상인지
- 중복 포지션: 같은 자산에 이미 오픈 포지션이 없는지
하나라도 실패하면 해당 시그널은 무시됩니다.
SL/TP 자동 모니터링
트레이딩 엔진은 30초마다 모든 오픈 포지션을 검사합니다:
포지션 순회:
현재가 조회 → CryptoFeed.get_latest_price()
BUY 포지션:
현재가 ≤ stop_loss → 자동 매도 (손절)
현재가 ≥ take_profit → 자동 매도 (익절)
SELL 포지션:
현재가 ≥ stop_loss → 자동 매수 (손절)
현재가 ≤ take_profit → 자동 매수 (익절)슬리피지
Paper Trading에서는 정확한 가격으로 체결되지만, Live Trading에서는 시장가 주문으로 인한 슬리피지가 발생할 수 있습니다.
설정 커스터마이징
config/trading.yaml에서 리스크 파라미터를 조정할 수 있습니다:
yaml
risk:
max_position_pct: 0.03 # 더 보수적: 3%
max_portfolio_risk_pct: 0.15
max_daily_trades: 5
min_confidence: 0.70 # 더 높은 신뢰도 요구