파이썬 기반 업비트 현물 자동매매 시스템입니다.
🚀 NEW! 클라우드에서 10분만에 실행하기
- ✅ 모듈형 구조: 데이터, 전략, 주문, 리스크, 저장소, 로깅 모듈 분리
- ✅ 실거래/드라이런 모드: 안전한 테스트를 위한 드라이런 모드 지원
- ✅ 캔들 데이터 관리: 1분봉 자동 갱신, 중복 병합, 결측 처리
- ✅ 레이트리밋 처리: Exponential backoff 재시도 메커니즘
- ✅ 전략 시스템: 쉽게 확장 가능한 전략 인터페이스
- ✅ 리스크 관리: 포지션 크기, 일일 손실 제한 등
- ✅ 상태 저장: SQLite 기반 거래 내역 및 포지션 관리
- ✅ JSON 로깅: 구조화된 JSON 라인 로그
- ✅ CLI 인터페이스: 사용하기 쉬운 명령줄 도구
24/7 자동 거래를 위해 클라우드에서 실행하세요:
- 빠른 시작 가이드 - 10분만에 완료! (DigitalOcean)
- 상세 클라우드 배포 가이드 - AWS, GCP, Oracle Cloud 등
uv는 빠른 Python 패키지 매니저입니다.
# uv 설치 (없는 경우)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 프로젝트 의존성 설치
uv sync
# 개발 의존성 포함 설치
uv sync --extra dev
# 가상환경 활성화
source .venv/bin/activate # Linux/Mac
# 또는
.venv\Scripts\activate # Windows# 가상환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 또는
venv\Scripts\activate # Windows
# 의존성 설치
pip install -e .
# 개발 의존성 포함
pip install -e ".[dev]"python main.py initcp config/config_example.yaml config/config.yaml
# config/config.yaml 파일을 편집하여 API 키와 설정을 입력하세요config/config.yaml 파일에서 다음 설정을 변경할 수 있습니다:
- upbit: Upbit API 키 (실거래시 환경변수 사용 권장)
- trading.mode:
dry_run(로그만) 또는live(실제 주문) - trading.tickers: 거래할 코인 목록
- strategy: 사용할 전략 및 파라미터
- risk: 리스크 관리 설정
# 드라이런 모드로 실행
uv run python main.py run
# 거래 내역 조회
uv run python main.py history
# 포지션 조회
uv run python main.py positions# 드라이런 모드로 실행
python main.py run
# 특정 설정 파일 사용
python main.py run --config config/my_config.yaml
# 거래 내역 조회
python main.py history
# 특정 티커 필터링
python main.py history --ticker KRW-BTC
# 조회 개수 지정
python main.py history --limit 50
# 포지션 조회
python main.py positionsUpbit_Black/
├── config/ # 설정 파일
│ ├── config.yaml
│ └── config_example.yaml
├── src/
│ ├── core/ # 핵심 엔진
│ │ ├── config_loader.py
│ │ └── trading_engine.py
│ ├── data/ # 데이터 모듈
│ │ ├── upbit_client.py
│ │ ├── market_data.py
│ │ ├── candle_fetcher.py # REST API 캔들 조회
│ │ ├── upbit_websocket.py # WebSocket 클라이언트
│ │ ├── candle_builder.py # 실시간 캔들 생성
│ │ ├── event_bus.py # 이벤트 버스
│ │ └── realtime_system.py # 실시간 거래 시스템
│ ├── analysis/ # 기술적 분석
│ │ └── fibonacci_calculator.py # 피보나치 레벨
│ ├── strategy/ # 전략 모듈
│ │ ├── base_strategy.py
│ │ ├── trigger_detector.py # Entry trigger 감지
│ │ └── strategies/
│ │ ├── example_strategy.py
│ │ └── pump_volume_strategy.py # 급등+거래량 전략
│ ├── order/ # 주문 실행
│ │ ├── order_executor.py
│ │ ├── order_manager.py
│ │ ├── upbit_private_api.py
│ │ ├── safe_order_executor.py
│ │ └── order_reconciler.py # 주문/포지션 동기화
│ ├── risk/ # 리스크 관리
│ │ ├── risk_manager.py
│ │ ├── position_manager.py # 자동 손절/익절/트레일링
│ │ └── risk_limiter.py # 계좌/종목 리스크 제한
│ ├── storage/ # 저장소
│ │ ├── database.py
│ │ └── models.py
│ ├── logging/ # 로깅
│ │ └── json_logger.py
│ ├── backtest/ # 백테스트
│ │ ├── backtest_engine.py # 백테스트 엔진
│ │ ├── performance_analyzer.py # 성과 분석
│ │ ├── data_loader.py # 데이터 로더
│ │ └── backtest_runner.py # 백테스트 러너
│ └── dashboard/ # 웹 대시보드
│ ├── dashboard_api.py # FastAPI 백엔드
│ └── templates/
│ └── dashboard.html # 프론트엔드
├── tests/ # 테스트
│ ├── test_strategy.py
│ ├── test_order.py
│ ├── test_risk.py
│ ├── test_candle_fetcher.py
│ ├── test_pump_volume_strategy.py
│ ├── test_fibonacci.py
│ ├── test_fibonacci_db.py
│ └── test_trigger_detector.py
├── examples/ # 예제 코드
│ ├── candle_fetcher_example.py
│ ├── pump_volume_example.py
│ ├── fibonacci_example.py
│ ├── complete_trading_system.py
│ └── upbit_private_api_example.py
├── logs/ # 로그 파일
├── data/ # 데이터베이스
│ └── trading.db
├── main.py # CLI 진입점 (Docker-aware)
├── Dockerfile # Docker 이미지
├── docker-compose.yml # Docker Compose 설정
├── .dockerignore # Docker ignore
├── deploy.sh # 배포 스크립트
├── DOCKER_DEPLOYMENT.md # Docker 배포 가이드
├── DASHBOARD_GUIDE.md # 대시보드 가이드
├── USER_MANUAL.md # 사용자 매뉴얼
├── IMPROVEMENT_REPORT.md # 보완점 보고서
├── pyproject.toml # 프로젝트 설정
└── requirements.txt # 의존성 (레거시)
새로운 전략을 개발하려면 BaseStrategy를 상속받아 구현합니다:
from src.strategy.base_strategy import BaseStrategy, Signal, SignalType
class MyStrategy(BaseStrategy):
def generate_signal(self, ticker, current_price, historical_data, **kwargs):
# 전략 로직 구현
if buy_condition:
return Signal(SignalType.BUY, ticker, current_price, amount=10000)
elif sell_condition:
return Signal(SignalType.SELL, ticker, current_price)
else:
return Signal(SignalType.HOLD, ticker, current_price)# 전체 테스트 실행
uv run pytest
# 커버리지 포함
uv run pytest --cov=src
# 특정 테스트 파일
uv run pytest tests/test_strategy.py
# 상세 출력
uv run pytest -v# 전체 테스트 실행
pytest
# 특정 테스트 파일 실행
pytest tests/test_strategy.py
# 상세 출력
pytest -vuv run black src/ tests/ main.pyuv run ruff check src/ tests/ main.py
# 자동 수정
uv run ruff check --fix src/ tests/ main.py- 반드시 드라이런 모드로 충분히 테스트하세요
- 소액으로 먼저 테스트하세요
- API 키는 환경변수나
.env파일로 관리하세요 - 리스크 관리 설정을 적절히 조정하세요
- 정기적으로 로그와 포지션을 확인하세요
.env 파일을 사용하여 민감한 정보를 관리할 수 있습니다:
# .env.example을 .env로 복사
cp .env.example .env
# .env 파일 편집
UPBIT_ACCESS_KEY=your_access_key_here
UPBIT_SECRET_KEY=your_secret_key_here
TRADING_MODE=dry_runMIT License
이슈와 풀 리퀘스트를 환영합니다!