249 lines
16 KiB
Plaintext
249 lines
16 KiB
Plaintext
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 자동 주식 매매 시스템 설정 파일 (.env)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
#
|
||
# 모든 설정이 .env 파일 변수로 제어 가능합니다.
|
||
# 기본값은 config.py에 정의되어 있고, 여기서 오버라이드할 수 있습니다.
|
||
#
|
||
# 참조: CLAUDE.md - 섹션 1.2 환경 변수 참고
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 기본 애플리케이션 설정
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
ENVIRONMENT=development
|
||
DEBUG=false
|
||
LOG_LEVEL=INFO
|
||
|
||
# 백엔드 서버
|
||
BACKEND_HOST=0.0.0.0
|
||
BACKEND_PORT=8000
|
||
SECRET_KEY=your-secret-key-here
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 데이터베이스 및 캐시
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
DATABASE_URL=postgresql://autostock:autostock_password@localhost:5432/autostock_db
|
||
REDIS_URL=redis://localhost:6379/0
|
||
RABBITMQ_URL=amqp://autostock:autostock_password@localhost:5672/
|
||
|
||
# PostgreSQL (도커 환경)
|
||
POSTGRES_USER=autostock
|
||
POSTGRES_PASSWORD=autostock_password
|
||
POSTGRES_DB=autostock
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 한국투자증권 (KIS) API 설정
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
# 모드 선택: "virtual" (모의투자) 또는 "real" (실전투자)
|
||
KIS_MODE=virtual
|
||
|
||
# 모의투자 (Paper Trading) 설정
|
||
KIS_VIRTUAL_APP_KEY=your_virtual_app_key
|
||
KIS_VIRTUAL_APP_SECRET=your_virtual_app_secret
|
||
KIS_VIRTUAL_ACCOUNT_NO=00000000-01
|
||
KIS_VIRTUAL_URL=https://openapivts.koreainvestment.com:29443
|
||
|
||
# 실전투자 설정
|
||
KIS_REAL_APP_KEY=your_real_app_key
|
||
KIS_REAL_APP_SECRET=your_real_app_secret
|
||
KIS_REAL_ACCOUNT_NO=00000000-01
|
||
KIS_REAL_URL=https://openapi.koreainvestment.com:9443
|
||
|
||
# WebSocket 접속키 (수동 지정 시 우선, 비어있으면 자동 발급)
|
||
KIS_WS_APPROVAL_KEY=
|
||
|
||
# WebSocket URL (커스토마이징 필요 시만 수정)
|
||
KIS_WS_REAL_URL=wss://openapi.koreainvestment.com:21000/websocket/realtime
|
||
KIS_WS_VIRTUAL_URL=wss://openapiwss.koreainvestment.com:29443/websocket/realtime
|
||
|
||
# KIS 실시간 스트림 타이밍 (초 단위)
|
||
KIS_SYNC_INTERVAL=10 # 구독 목록 동기화 주기
|
||
KIS_RECONNECT_WAIT=5 # 재연결 대기 시간
|
||
KIS_APPROVAL_KEY_TTL=82800 # approval_key 캐시 유효시간 (초, 23시간)
|
||
|
||
# 레거시 호환 (직접 지정 시 우선)
|
||
KOREA_INVESTMENT_APP_KEY=your_app_key_here
|
||
KOREA_INVESTMENT_APP_SECRET=your_app_secret_here
|
||
KOREA_INVESTMENT_ACCOUNT_NUMBER=your_account_number
|
||
KOREA_INVESTMENT_API_BASE_URL=https://openapi.koreainvestment.com:9443
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# AI 프로바이더 설정
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
AI_PROVIDER=claude # "claude" 또는 "gemini"
|
||
ANTHROPIC_API_KEY=your_anthropic_api_key
|
||
|
||
# MCP 서버 설정
|
||
MCP_SERVER_URL=http://localhost:8001
|
||
MCP_VALIDATION_ENABLED=true # AI 검증 활성화
|
||
MCP_CONFIDENCE_THRESHOLD=0.5 # AI 신뢰도 최소값 (0.0~1.0)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 거래 설정 (CLAUDE.md 섹션 5-8 기반)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
# 기본 거래 파라미터
|
||
AUTO_TRADE_ENABLED=true # 자동매매 활성화
|
||
ANALYSIS_STOCK_COUNT=150 # 배치 분석 종목 수
|
||
AUTO_TRADE_TOP_N_PER_RULE=2 # 규칙당 자동매매 최대 종목 수
|
||
MAX_DAILY_TRADES=5
|
||
|
||
# 포지션 규칙 (섹션 5.1)
|
||
MAX_POSITION_SIZE=0.04 # 1종목당 최대 3-4% 자본
|
||
MAX_HOLDINGS_COUNT=20 # 동시 보유 최대 20종목
|
||
LEVERAGE_ETF_MAX_RATIO=0.20 # 레버리지/인버스 ETF 20% 이내
|
||
|
||
# 손절/익절 설정 (섹션 5.2)
|
||
STOP_LOSS_PERCENT=-6.0 # 저변동 종목 손절 -6%
|
||
STOP_LOSS_HIGH_VOL=-10.0 # 고변동 종목 손절 -10%
|
||
TAKE_PROFIT_PERCENT=5.0 # 익절 기본값
|
||
|
||
# ATR 기반 손절/트레일링 (섹션 5.2)
|
||
ATR_STOP_MULTIPLIER=2.5 # 2.5 × ATR 손절
|
||
ATR_TRAILING_MULTIPLIER=1.5 # 1.5 × ATR 트레일링
|
||
|
||
# MDD (최대 낙폭) 관리 (섹션 5.3)
|
||
MDD_PAUSE_THRESHOLD=-10.0 # -10% MDD: 신규진입 중단 + 30% 축소
|
||
MDD_FORCE_THRESHOLD=-20.0 # -20% MDD: 50% 강제 축소
|
||
|
||
# 가격 필터 (섹션 5.4)
|
||
MIN_PRICE_KRW=5000 # 국내 5,000원 이하 매수 금지
|
||
MIN_PRICE_USD=4.0 # 미국 $4 이하 매수 금지
|
||
|
||
# 연속 손실 관리 (섹션 7.4)
|
||
CONSECUTIVE_LOSS_BAN_COUNT=3 # 3회 연속 손실
|
||
CONSECUTIVE_LOSS_BAN_DAYS=30 # 30거래일 진입 금지
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 전략 A: RSI + 볼린저 밴드 평균회귀 (섹션 6)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
MEAN_REVERSION_MAX_CAPITAL=0.30 # 전체 자본의 30% 이내 (섹션 7.5)
|
||
MEAN_REVERSION_RSI_THRESHOLD=30.0 # RSI 과매도 기준 (≤30)
|
||
MEAN_REVERSION_MULTIPLIER_STRONG=1.50 # RSI ≤ 20: 강한 신호 배수 (+50%)
|
||
MEAN_REVERSION_MULTIPLIER_NORMAL=1.25 # RSI ≤ 25: 중간 신호 배수 (+25%)
|
||
MEAN_REVERSION_MULTIPLIER_WEAK=1.00 # 기본 신호 배수 (4%)
|
||
|
||
# 시장 국면 필터 (7.5)
|
||
BEAR_MARKET_FILTER_ENABLED=true
|
||
BEAR_MARKET_MIN_SCORE=5
|
||
BEAR_MARKET_MAX_TRADES=3
|
||
BEAR_MARKET_POSITION_RATIO=0.5
|
||
|
||
# 급등 과열 필터 (섹션 5.4)
|
||
OVERHEAT_FILTER_ENABLED=true
|
||
OVERHEAT_3DAY_MAX=15.0 # 3일 최대 상승률 15%
|
||
OVERHEAT_5DAY_MAX=20.0 # 5일 최대 상승률 20%
|
||
OVERHEAT_10DAY_MAX=30.0 # 10일 최대 상승률 30%
|
||
OVERHEAT_DISPARITY_MAX=108.0 # 괴리율 최대 108%
|
||
|
||
# 트렌드 필터 (7.1)
|
||
TREND_FILTER_ENABLED=false
|
||
TREND_MA_SHORT=20 # 단기 MA 기간
|
||
TREND_MA_LONG=60 # 장기 MA 기간
|
||
TREND_TOLERANCE_PCT=0.005 # 허용 오차 0.5%
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 전략 B: 데이트레이딩 (섹션 8.2)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
DAY_TRADE_ENABLED=true # 데이트레이딩 활성화
|
||
DAY_TRADE_MAX_POSITIONS=3 # 동시 최대 3종목
|
||
DAY_TRADE_CAPITAL_RATIO=0.25 # 전체 자본 대비 최대 25%
|
||
DAY_TRADE_MAX_RATIO_DT=0.25 # 전체 데이트레이딩 최대 25%
|
||
DAY_TRADE_PER_STOCK_RATIO=0.10 # 종목당 최대 10%
|
||
DAY_TRADE_MAX_CAPITAL_RATIO=0.10 # 종목당 최대 10%
|
||
|
||
# 데이트레이딩 손절/익절
|
||
DAY_TRADE_ORB_STOP_LOSS_PCT=0.02 # ORB 손절 -2%
|
||
DAY_TRADE_REVERSION_STOP_LOSS_PCT=0.025 # VWAP/RSI_BB 손절 -2.5%
|
||
DAY_TRADE_TRAILING_TRIGGER=0.015 # 트레일링 발동 +1.5%
|
||
DAY_TRADE_TRAILING_ATR_MULT=1.0 # 트레일링 ATR 배수
|
||
DAY_TRADE_ORB_BREAKOUT_MARGIN=0.002 # ORB 돌파 최소 여유 +0.2%
|
||
DAY_TRADE_COST_PCT=0.005 # 수수료+슬리피지 0.5%
|
||
|
||
# 데이트레이딩 일일/시간 제한
|
||
DAY_TRADE_DAILY_LOSS_LIMIT=-0.03 # 일일 손실 한도 -3%
|
||
DAY_TRADE_ENTRY_CUTOFF_HOUR=15 # 신규 진입 마감 시간 (15시)
|
||
DAY_TRADE_ENTRY_CUTOFF_MIN=0 # 신규 진입 마감 분
|
||
DAY_TRADE_EOD_HOUR=15 # EOD 강제 청산 시작 시간
|
||
DAY_TRADE_EOD_MIN=20 # EOD 강제 청산 시작 분
|
||
DAY_TRADE_RSI_BREAKEVEN_THRESHOLD=40.0 # RSI_BB 진입 기준 (5분봉 RSI ≤ 40)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 단기 전략 (15분봉, 섹션 8.2)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
SHORT_TERM_MIN_ATR_RATIO=0.008 # ATR/close ≥ 0.8% (거래비용 커버)
|
||
SHORT_TERM_RSI_LOOKBACK=3 # RSI 반등 확인 과거 봉 수
|
||
SHORT_TERM_VOLUME_MULTIPLIER=1.5 # 거래량 필터 배수 (1.5배)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 감시 목록 관리 (watchlist.py)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
WATCHLIST_INIT_SIZE=150 # 아침 배치 초기화 종목 수
|
||
WATCHLIST_MAX_SIZE=150 # 최대 관리 종목 수
|
||
WATCHLIST_ENTRY_SCORE=60 # 장중 신규 진입 기준 점수
|
||
WATCHLIST_EXIT_SCORE=20 # 장중 제거 기준 점수
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 기술적 지표 설정 (technical_indicators.py)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
# RSI (Relative Strength Index)
|
||
RSI_PERIOD=14 # RSI 계산 기간 (14일)
|
||
RSI_OVERSOLD_LEVEL=30.0 # RSI 과매도 수준
|
||
RSI_OVERBOUGHT_LEVEL=70.0 # RSI 과매수 수준
|
||
RSI_RECOVERY_RANGE_MIN=30.0 # RSI 회복 범위 최소값 (30~45)
|
||
RSI_RECOVERY_RANGE_MAX=45.0 # RSI 회복 범위 최대값
|
||
RSI_STABLE_RANGE_MIN=45.0 # RSI 안정 범위 최소값 (45~60)
|
||
RSI_STABLE_RANGE_MAX=60.0 # RSI 안정 범위 최대값
|
||
|
||
# 볼린저 밴드
|
||
BOLLINGER_PERIOD=20 # 볼린저 밴드 기간 (20일)
|
||
BOLLINGER_STDDEV=2.0 # 표준편차 배수
|
||
|
||
# 이동평균 (Moving Average)
|
||
MA_SHORT_PERIOD=5 # 단기 MA (5일)
|
||
MA_MEDIUM_PERIOD=20 # 중기 MA (20일)
|
||
MA_LONG_PERIOD=60 # 장기 MA (60일)
|
||
|
||
# ATR (Average True Range)
|
||
ATR_PERIOD=14 # ATR 계산 기간 (14일)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# API 레이트 제한 및 안전 운영
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
API_MAX_RETRIES=3 # 최대 재시도 횟수
|
||
API_RETRY_DELAY=1.5 # 초기 재시도 대기 시간 (초)
|
||
API_RETRY_BACKOFF=2.0 # 지수 백오프 배율
|
||
API_MIN_REQUEST_INTERVAL=0.5 # 최소 요청 간격 (초)
|
||
API_MAX_CONCURRENT_REQUESTS=4 # 동시 최대 요청 수
|
||
API_TIMEOUT=30.0 # API 타임아웃 (초)
|
||
|
||
# API 모니터링
|
||
API_ERROR_THRESHOLD=0.3 # 오류율 임계값 (30%)
|
||
API_MONITORING_WINDOW=100 # 모니터링 윈도우 (최근 100개 요청)
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# ML (머신러닝) 설정
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
ML_TF_ENABLED=true # ML 모델 기반 보조지표 사용
|
||
ML_ENSEMBLE_ENABLED=true # ML 앙상블 활성화
|
||
ML_ENSEMBLE_MODEL_DIR=models/ensemble
|
||
ML_ENSEMBLE_RULE_WEIGHT=0.3 # 룰베이스 스코어 비중 (30%)
|
||
ML_ENSEMBLE_ML_WEIGHT=0.7 # ML 스코어 비중 (70%)
|
||
ML_ENSEMBLE_BUY_THRESHOLD=60 # 매수 최소 앙상블 스코어 (0~100)
|
||
ML_ENSEMBLE_CONFIDENCE_MIN=0.5 # 최소 신뢰도
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 프론트엔드 (선택사항)
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
VITE_API_URL=http://localhost:8000
|
||
VITE_WS_URL=ws://localhost:8000/ws
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# 기타 설정
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
TOKEN_SAVE_MODE=true # JSON 압축, 차트 데이터 30일 제한
|
||
NEWS_API_KEY=your_news_api_key
|
||
|