예제 소스
실시간 XGBoost와 DQN 결합 구조: 거래 AI를 검증하는 법 · 파일 59개
project.md
# 프로젝트 메모 (green)
## 현재 목적
- DB 과거 캔들(`Market.get_data()`)을 불러와 차트를 이미지로 만들고
- 비전 LLM이 차트를 보고 `매수/매도/유지` 의견을 내면
- 모의 포트폴리오(`PaperLlmPortfolio`)로 체결/수익률을 확인하는 뷰어를 제공
## 뷰어 구조
- 공통 UI/로직: `viewer.py`의 `VisionBacktestViewer`
- 실행 엔트리:
- `main_llm_db_test_ollama_viewer.py` (Ollama 백엔드)
- `main_llm_db_test_local_viewer.py` (로컬 torch/mlx 백엔드)
- `main_llm_db_portfolio_viewer.py` (백엔드 선택형)
## 트레이딩 규칙 (2026-04-13)
### 핵심 규칙: 빨간 MA(=MA20) 상향/하향 돌파
- 파란색 MA는 차트에서 `ma60` 라인(Plotly에서 blue) 기준
- 빨간색 MA는 차트에서 `ma20` 라인(Plotly에서 red) 기준
- 돌파 판단은 **종가(close)** 기준
- **하향 돌파**: 직전 종가 \(\ge\) 직전 MA20 이고, 이번 종가 \(<\) 이번 MA20 → *매도*
- **상향 돌파**: 직전 종가 \(\le\) 직전 MA20 이고, 이번 종가 \(>\) 이번 MA20 → *매수*
- 그 외 → *유지*
### 체결 기준 (LLM 우선)
- MA20 돌파가 명확하면 그 신호를 `매수/매도` 신호로 한다.
- MA60선이 하향 곡선인 경우는 현재 상태에서 `매도`후 `유지`만 한다.
- MA60선이 상승 곡선인 경우만 `매수/매도`를 한다.
- 화면에는 동시에 표시:
- **최종 판단**(실제 체결에 쓰인 신호)
- **LLM 판단**
- **MA 판단**
## 프롬프트
- `test_hf_img.py::_build_analysis_prompt()`는 “빨간 MA(보통 MA20) 돌파 여부”만 묻고
- 답변을 `의견: 매수|매도|유지` 형식으로 강제한다 (자동 파싱용)