0aebca7ff08f6af3f1c4ae1f7031a5b111139813
[잔고 관리] - _today_buy_total 인스턴스 변수로 당일 누적 매수 추적 (KIS T+2 미차감 보완) - MAX_BUY_PER_CYCLE, MAX_DAILY_BUY_RATIO 설정 추가 - available_deposit = max_daily_buy - effective_today_buy 계산 [앙상블 & 포지션 사이징] - AdaptiveEnsemble 실제 연동 (하드코딩 가중치 제거) - Kelly Criterion Half-Kelly 포지션 비중 계산 - SignalWeights.normalize() Water-Filling 알고리즘으로 경계 위반 해결 - _accuracy_weighted() 크기 가중 정확도로 통일 - ensemble_weights.json → ensemble_history.json 통합 [LLM 클라이언트] - GeminiLLMClient 추가 (Gemini → Ollama 폴백 체인) - _class_last_call_ts 클래스 변수로 워커 재시작 후에도 스로틀 유지 - Ollama 미실행 조기 감지 및 명확한 오류 메시지 [KIS API] - 모든 requests.get/post에 timeout=Config.HTTP_TIMEOUT 적용 - get_balance()에 today_buy_amt 필드 추가 [장중 전용 운영] - KRXCalendar: exchange_calendars 기반, 2024~2026 공휴일 하드코딩 폴백 - EOD 셧다운: 15:35에 전체 상태 저장 후 서버 자동 종료 - Watchdog: .eod_date 마커로 EOD 후 재시작 차단 - daily_launcher.py: 매일 08:30 실행, 휴장일 감지 후 봇 미시작 - Windows 작업 스케줄러 WebAI_DailyLauncher 등록 [텔레그램 스킬 수정] - PYTHONIOENCODING=utf-8 서브프로세스 환경 설정 (cp949 이모지 오류 해결) - /regime: IPC macro_indices 파싱 구현, --json 모드 input() 블로킹 제거 - /weights: ensemble_history.json 형식 파싱 업데이트 - /model_health: glob 패턴 *_v3.pt 수정 - /postmortem: 거래 없을 때 빈 JSON 출력으로 Telegram 오류 해결 - /macro: price=0 시 prev_close 폴백 표시 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
🤖 AI Automated Trading System (Windows Server Edition)
이 프로젝트는 **Python, PyTorch (Deep Learning), Ollama (LLM)**을 활용하여 한국 주식 시장(KIS)에서 자동으로 매매를 수행하는 고성능 AI 트레이딩 봇입니다. ProcessPoolExecutor 기반의 병렬 처리와 독립된 텔레그램 봇 프로세스를 통해 높은 안정성과 응답 속도를 보장합니다.
🚀 Key Features
- Multi-Process Architecture: 메인 서버, 트레이딩 봇, 텔레그램 봇이 각각 독립된 프로세스로 실행되어 상호 간섭을 최소화합니다.
- Advanced AI Analysis: RTX 5070 Ti (16GB VRAM) 하드웨어 가속을 활용한 Attention-LSTM 모델이 주가를 예측합니다.
- Process Management System:
- Zombie Killer: 서버 시작 시 이전에 종료되지 않은 좀비 프로세스를 자동으로 감지하고 제거합니다.
- PID Tracking: 실행 중인 모든 프로세스의 ID를
pids.txt파일에 실시간으로 기록하여 식별을 돕습니다.
- Reliable Telegram Bot:
- HTML Parsing: 마크다운 에러를 방지하기 위해 안정적인 HTML 포맷을 사용하여 메시지를 전송합니다.
- Interactive Commands:
/status,/portfolio,/exec등 다양한 명령어로 봇을 실시간 제어할 수 있습니다.
- Auto-Recovery:
ProcessPoolExecutor의 워커 프로세스가 충돌(OOM 등)할 경우 자동으로 감지하고 재시작합니다.
🏗️ System Architecture & Directory Structure
/
├── main_server.py # [Entry Point] 프로세스 매니저 및 FastAPI 서버
├── pids.txt # [Runtime] 실행 중인 프로세스 ID 목록 (자동 관리)
├── modules/
│ ├── bot.py # [Core] 메인 트레이딩 봇 (스케줄러 & 상태 머신)
│ ├── config.py # [Config] 환경 변수 및 상수 관리
│ ├── analysis/ # [Brain] AI 분석 모듈
│ │ ├── deep_learning.py # PyTorch 기반 Attention-LSTM 모델
│ │ ├── technical.py # RSI, 볼린저밴드 등 보조지표 계산
│ │ └── macro.py # 거시경제(환율, 유가, 지수) 분석
│ ├── services/ # [I/O] 외부 서비스 연동
│ │ ├── kis.py # 한국투자증권 API (Throttling 적용)
│ │ ├── telegram_bot/ # [Independent] 독립 프로세스 텔레그램 봇
│ │ ├── news.py # 네이버 뉴스 크롤링
│ │ └── ollama.py # Local LLM (Llama 3) 인터페이스
│ ├── strategy/ # [Logic] 매수/매도 의사결정 프로세스
│ │ └── process.py # 워커 프로세스용 분석 함수 (병렬 처리)
│ └── utils/ # [Util] 유틸리티
│ ├── process_tracker.py # PID 추적 및 좀비 프로세스 정리
│ ├── ipc.py # 프로세스 간 통신 (IPC)
│ └── monitor.py # 시스템 리소스 모니터링
└── ...
🧠 AI Learning Structure (Deep Learning)
본 시스템은 단순한 알고리즘 매매를 넘어, Deep Learning을 통해 시장의 패턴을 실시간으로 학습합니다.
1. Model: Attention-LSTM (High Capacity)
- Architecture: LSTM(Long Short-Term Memory) + Attention Mechanism
- Input: 최근 60일(약 3개월)간의 주가(종가) 시계열 데이터
- Core Logic:
- Feature Extraction: 4-Layer Stacked LSTM (Hidden Size: 512)이 시계열 특징 추출.
- Attention Layer: 과거 60일 중 현재 예측에 가장 중요한 시점에 가중치를 부여.
- Adaptive Training: 종목별로 매일 실시간 학습(Online Learning)을 수행하여 최신 트렌드 반영.
2. Hardware Acceleration (RTX 5070 Ti)
- CUDA Optimization: PyTorch를 통해 GPU 가속 활성화.
- Specs: Batch Size 64, Epochs 200, Precision FP32.
- 서버 시작 시
High Performance Mode가 자동으로 감지 및 활성화됩니다. - OOM Protection: GPU 메모리 보호를 위해 병렬 워커 수를 2개로 제한하고, 워커 충돌 시 자동 재시작합니다.
🛠️ Usage & Troubleshooting
1. Installation
# Clone & Install
git clone <repository-url>
pip install -r requirements.txt
# Start Server
python main_server.py
2. Process Management (pids.txt)
서버가 실행되면 pids.txt 파일에 현재 실행 중인 프로세스 목록이 기록됩니다.
58360: Main Server (Uvicorn Worker)
72028: Trading Bot Main
66488: Telegram Bot Standalone
16372: Trading Bot Worker
...
- CPU 사용량이 비정상적으로 높을 때: 작업 관리자나
Get-Process python으로 확인한 PID가pids.txt에 없다면 좀비 프로세스입니다. - 자동 정리:
main_server.py를 다시 실행하면 시작 시 자동으로 좀비 프로세스를 찾아 종료합니다.
3. Telegram Commands
/start: 봇 시작 및 명령어 안내/status: 현재 봇 상태, 시장 지수, AI 모델 상태 조회/portfolio: 현재 보유 종목 및 수익률 조회/system: CPU/GPU 사용량 및 프로세스 상태 확인/restart: 봇 프로세스 재시작 (업데이트 반영 시 유용)/stop: 봇 종료
⚠️ Disclaimer
본 소프트웨어는 투자를 보조하는 도구이며, 투자의 결과에 대한 책임은 전적으로 사용자에게 있습니다. AI의 예측은 100% 정확하지 않으며, 시장 상황에 따라 손실이 발생할 수 있습니다. 모의투자 환경에서 충분한 테스트 후 사용하시기 바랍니다.
Description
Languages
Python
100%