최초 프로젝트 업로드 (Script Auto Commit)

This commit is contained in:
2025-12-03 22:40:47 +09:00
commit dd9acf62a3
39 changed files with 5251 additions and 0 deletions

132
docs/user_guide.md Normal file
View File

@@ -0,0 +1,132 @@
# AutoCoinTrader 사용 가이드
## 개요
AutoCoinTrader는 Upbit 시세 데이터를 기반으로 MACD, SMA, ADX 지표를 활용해 매수/매도 신호를 분석하고(`dry_run` 모드), 설정에 따라 자동 주문까지 수행할 수 있는 트레이딩 보조/자동화 도구입니다. 모든 주요 상태 파일(`holdings.json`, `trades.json`, `pending_orders.json`)은 `data/` 디렉터리 하위에서 관리됩니다.
## 1. 사전 준비
### 1.1 필수 요구사항
1. Python 3.11 이상
2. 가상환경 권장 (venv, pyenv, Conda 등)
3. Upbit API 키 (자동매매 사용 시)
4. Telegram Bot Token & Chat ID (알림 사용 시)
### 1.2 설치
```powershell
python -m venv .venv; .\.venv\Scripts\activate
pip install -r requirements.txt
```
### 1.3 환경변수 설정 (`.env`)
`.env` 파일에 아래 항목을 필요 시 추가:
```bash
TELEGRAM_BOT_TOKEN=123456789:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TELEGRAM_CHAT_ID=123456789
UPBIT_ACCESS_KEY=YOUR_UPBIT_ACCESS
UPBIT_SECRET_KEY=YOUR_UPBIT_SECRET
# 선택 기능
AGGREGATE_ALERTS=false
TELEGRAM_TEST=0
AUTO_TRADE_ENABLED=0 # require_env_confirm 활성화 시 1로 설정해야 자동매매 진행
ORDER_MONITOR_TIMEOUT=120
ORDER_POLL_INTERVAL=3
ORDER_MAX_RETRIES=1
ORDER_MAX_CONSECUTIVE_ERRORS=5
```
`UPBIT_*` 키는 실거래(dry_run=False) + 자동매매(trading_mode=auto_trade/mixed)에서 필수.
`.env`는 반드시 `.gitignore`에 포함시키십시오.
## 2. 설정 파일 (`config/config.json`)
미존재 시 기본값이 내부 로직에서 자동 로드됩니다. 핵심 항목:
| 키 | 설명 | 기본값 |
|----|------|--------|
| candle_count | 각 심볼 지표 계산에 사용하는 캔들 개수 | 200 |
| buy_check_interval_minutes | 매수 조건 검사 주기 | 240 |
| stop_loss_check_interval_minutes | 손절 검사 주기 | 60 |
| profit_taking_check_interval_minutes | 익절 검사 주기 | 240 |
| loop | True면 주기적 루프 실행 | True |
| dry_run | True면 시뮬레이션 기록만 | True |
| max_threads | 병렬 스레드 수 | 3 |
| trading_mode | signal_only / auto_trade / mixed | signal_only |
| auto_trade.buy_enabled | 자동 매수 허용 여부 | False |
| auto_trade.buy_amount_krw | 1회 매수 금액 | 10000 |
| auto_trade.min_order_value_krw | 최소 주문 허용 KRW | 5000 |
| auto_trade.loss_threshold | 손절 기준(%) | -5.0 |
| auto_trade.profit_threshold_1 | 부분 익절 시작 수익률(%) | 10.0 |
| auto_trade.profit_threshold_2 | 전량 익절 고수익 기준(%) | 30.0 |
| auto_trade.drawdown_1 | 중간 구간 트레일링 하락률(%) | 5.0 |
| auto_trade.drawdown_2 | 고수익 구간 트레일링 하락률(%) | 15.0 |
## 3. 주요 데이터 파일 (data/)
| 파일 | 용도 |
|------|------|
| holdings.json | 현재 보유 코인 상태 (매수 평균가, 수량, max_price 등) |
| trades.json | 매수/매도 기록 (원자적 저장) |
| pending_orders.json | 사용자 확인 대기 중인 주문 토큰 목록 |
모든 경로는 코드 내부에서 `src.common`의 상수를 통해 관리되므로 재배치 시 해당 상수만 수정하면 됩니다.
## 4. 실행 방법
### 4.1 기본 실행 (드라이런)
```powershell
python main.py
```
루프 모드, 설정 주기에 따라 매수/손절/익절 검사 수행. `data/` 하위에 기록 생성.
### 4.2 벤치마크 실행
```powershell
python main.py --benchmark
```
순차/병렬 처리 시간 비교 후 로그 출력.
### 4.3 실거래 모드 전환
1. `config.json`에서 `dry_run``false`, `trading_mode``auto_trade` 또는 `mixed`로 설정.
2. `.env``UPBIT_ACCESS_KEY`, `UPBIT_SECRET_KEY` 추가.
3. (선택) `AUTO_TRADE_ENABLED=1` 설정 (require_env_confirm일 경우 필수).
4. 소액으로 먼저 검증 후 확장.
### 4.4 Telegram 알림 테스트
`.env``TELEGRAM_TEST=1` 설정 후 최초 실행 시 시작 메시지 전송.
## 5. 매수/매도 로직 개요
1. 매수 조건: MACD 교차, SMA 단기>장기, ADX 임계 초과 조합 (3가지 패턴)
2. 매도 조건: 손절(초기 하락), 부분 익절 후 수익 보호, 트레일링 익절 (구간별 다른 하락률 적용)
3. 부분 익절 1회 후 `partial_sell_done` 플래그로 중복 익절 방지.
## 6. 수동 확인 기반 주문 흐름
자동매매 모드에서 주문은 `pending_orders.json`에 기록 → 사용자가 `confirm_<토큰>` 파일 생성 → 타임아웃 내 확인되면 주문 실행.
## 7. 로그
`logs/AutoCoinTrader.log` 회전 로그(최대 10MB, 백업 7개). `LOG_DIR`, `LOG_LEVEL` 환경변수로 조정 가능.
## 8. Troubleshooting
| 증상 | 원인 | 해결 |
|------|------|------|
| 실거래 안 됨 | API 키 미설정 | `.env` 키 추가 및 dry_run False |
| 텔레그램 알림 없음 | 토큰/채팅ID 누락 | `.env` 값 확인 |
| 부분 체결 후 holdings 미반영 | 네트워크 지연 | 로그에서 monitor 결과 확인 후 수동 조정 |
| trades.json 손상 | 비정상 종료 | 자동 백업(`.corrupted.<ts>`) 후 재생성됨 |
## 9. 성능 & 안정성 팁
1. 스레드 수(`max_threads`)를 심볼 수 대비 과도하게 늘리지 말 것 (IO 포화 발생 가능).
2. 캔들 개수(`candle_count`)는 필요 이상 크게 하면 지표 계산 비용 증가.
3. 네트워크 오류 다발 시 `ORDER_MAX_CONSECUTIVE_ERRORS` 조정.
## 10. 백테스트 확장 (향후 계획)
`data/` 구조 유지 + 별도 `backtest/` 모듈에서 동일 지표 계산 후 결과 비교, `trades.json` 포맷 재사용. (구현 예정)
## 11. FAQ
**Q: dry_run과 auto_trade 차이?**
A: dry_run은 모든 거래를 기록만 하고 실제 주문을 보내지 않음. auto_trade는 조건 충족 시 주문 API 호출.
**Q: 부분 익절 후 재매도는 어떻게?**
A: `partial_sell_done` 플래그 True 후 트레일링 조건 또는 수익 보호 조건 충족 시 전량 매도.
**Q: trades.json 손상 시?**
A: 자동으로 `.corrupted.<timestamp>` 백업 후 새로 시작. 백업 파일 검토 가능.
**Q: 설정 변경 반영 시점?**
A: 프로세스 재시작 필요. 장기 실행 중에는 실시간 반영 안 함.
**Q: 최소 주문 금액 미만 상황?**
A: 매도/매수 모두 안전하게 건너뛰고 로그와 텔레그램 알림(선택)으로 통지.