# MACD 알림 봇 (Upbit 기반) 이 프로젝트는 Upbit의 OHLCV 데이터를 `pyupbit`로 가져와 MACD, SMA, ADX를 계산하고, 설정된 매수/매도 조건에 따라 Telegram으로 알림을 보내는 봇입니다. --- ## 프로젝트 구조 최근 프로젝트가 모듈화되어 다음과 같은 구조를 갖습니다: ``` macd_alarm/ ├── main.py # 프로그램의 진입점 ├── src/ # 모듈화된 코드 │ ├── __init__.py # 패키지 초기화 │ ├── common.py # 로깅 설정 │ ├── config.py # 설정 및 심볼 로드, RuntimeConfig │ ├── indicators.py # MACD 및 지표 계산 │ ├── holdings.py # 보유 자산 관리 │ ├── order.py # 주문 및 확인 │ ├── signals.py # 매수/매도 신호 처리 │ ├── notifications.py # Telegram 알림 │ ├── threading_utils.py # 멀티스레딩 유틸리티 │ └── tests/ # 테스트 코드 │ ├── test_helpers.py │ ├── test_main.py │ └── test_evaluate_sell_conditions.py └── pytest.ini # pytest 설정 ``` --- ## 주요 기능 - **config.py**: 설정 파일(`config.json`) 로드, 심볼 목록 읽기, `RuntimeConfig` 데이터클래스로 실행 컨텍스트 관리. - **indicators.py**: OHLCV 데이터를 가져오고 MACD, SMA, ADX 계산. - **holdings.py**: 보유 자산 로드, 저장 및 현재 가격 확인. - **order.py**: 주문 실행 및 결과 확인. - **signals.py**: 매수/매도 조건 확인 및 기록. - **notifications.py**: Telegram 알림 전송. - **threading_utils.py**: 멀티스레딩 실행 지원. ### RuntimeConfig 프로젝트는 `RuntimeConfig` 데이터클래스를 사용하여 설정과 환경 변수를 단일 컨텍스트로 관리합니다. 이를 통해 함수 간 파라미터 전달이 간소화되고, 새로운 설정 옵션을 쉽게 추가할 수 있습니다. ```python from src.config import build_runtime_config # config.json 로드 후 cfg = build_runtime_config(config_dict) # cfg는 다음을 포함: # - timeframe, indicator_timeframe, candle_count # - telegram_bot_token, telegram_chat_id # - upbit_access_key, upbit_secret_key # - dry_run, max_threads, trading_mode 등 ``` --- ## 실행 방법 1. **의존성 설치**: ```bash python -m pip install -r requirements.txt ``` 2. **환경 변수 설정** (Telegram 및 Upbit API 키): PowerShell: ```powershell $env:TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN" $env:TELEGRAM_CHAT_ID = "YOUR_CHAT_ID" $env:UPBIT_ACCESS_KEY = "YOUR_UPBIT_ACCESS_KEY" $env:UPBIT_SECRET_KEY = "YOUR_UPBIT_SECRET_KEY" ``` 또는 `.env` 파일 생성: ``` TELEGRAM_BOT_TOKEN=YOUR_BOT_TOKEN TELEGRAM_CHAT_ID=YOUR_CHAT_ID UPBIT_ACCESS_KEY=YOUR_UPBIT_ACCESS_KEY UPBIT_SECRET_KEY=YOUR_UPBIT_SECRET_KEY ``` 3. **설정 파일 준비**: ```bash copy config.example.json config.json ``` `config.json` 파일을 필요에 따라 수정합니다. 4. **프로그램 실행**: ```bash python main.py ``` --- ## 테스트 실행 1. **pytest 설치**: ```bash python -m pip install pytest ``` 2. **테스트 실행**: ```bash pytest ``` --- 이 문서는 프로젝트의 최신 구조와 실행 방법을 반영하도록 업데이트되었습니다.