Skip to content

Repository files navigation

Upbit 자동매매 시스템

파이썬 기반 업비트 현물 자동매매 시스템입니다.

🚀 NEW! 클라우드에서 10분만에 실행하기

주요 기능

  • 모듈형 구조: 데이터, 전략, 주문, 리스크, 저장소, 로깅 모듈 분리
  • 실거래/드라이런 모드: 안전한 테스트를 위한 드라이런 모드 지원
  • 캔들 데이터 관리: 1분봉 자동 갱신, 중복 병합, 결측 처리
  • 레이트리밋 처리: Exponential backoff 재시도 메커니즘
  • 전략 시스템: 쉽게 확장 가능한 전략 인터페이스
  • 리스크 관리: 포지션 크기, 일일 손실 제한 등
  • 상태 저장: SQLite 기반 거래 내역 및 포지션 관리
  • JSON 로깅: 구조화된 JSON 라인 로그
  • CLI 인터페이스: 사용하기 쉬운 명령줄 도구

설치

☁️ 클라우드 배포 (추천)

24/7 자동 거래를 위해 클라우드에서 실행하세요:

💻 로컬 설치

방법 1: uv 사용 (권장)

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

방법 2: pip 사용

# 가상환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# 또는
venv\Scripts\activate  # Windows

# 의존성 설치
pip install -e .

# 개발 의존성 포함
pip install -e ".[dev]"

프로젝트 초기화

python main.py init

설정 파일 작성

cp 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로 실행

# 드라이런 모드로 실행
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 positions

프로젝트 구조

Upbit_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 사용

# 전체 테스트 실행
uv run pytest

# 커버리지 포함
uv run pytest --cov=src

# 특정 테스트 파일
uv run pytest tests/test_strategy.py

# 상세 출력
uv run pytest -v

일반 pytest

# 전체 테스트 실행
pytest

# 특정 테스트 파일 실행
pytest tests/test_strategy.py

# 상세 출력
pytest -v

개발 도구

코드 포맷팅 (Black)

uv run black src/ tests/ main.py

린팅 (Ruff)

uv run ruff check src/ tests/ main.py

# 자동 수정
uv run ruff check --fix src/ tests/ main.py

주의사항

⚠️ 실거래 모드 사용 시 주의사항:

  1. 반드시 드라이런 모드로 충분히 테스트하세요
  2. 소액으로 먼저 테스트하세요
  3. API 키는 환경변수나 .env 파일로 관리하세요
  4. 리스크 관리 설정을 적절히 조정하세요
  5. 정기적으로 로그와 포지션을 확인하세요

환경변수 설정

.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_run

라이선스

MIT License

기여

이슈와 풀 리퀘스트를 환영합니다!

About

Black의 업비트 자동매매 프로그램

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages