바이낸스 비트코인 선물 자동 AI 매매 프로그램 배포

Last Updated on: 2025-02-16

이번 포스팅에서는 인공지능(GPT-o3-mini) 버전을 사용해서 거래를 결정하고 바이낸스에서 비트코인을 자동매매할 수 있는 프로그램을 소개합니다. 소스코드는 깃허브에서 바로 다운받을 수 있으며, 자신 만의 전략을 추가해서 더욱 더 프로그램을 개선할 수 있습니다.

프로그램 개요

파일설명

  • README.md : 소스코드에 대한 기본적인 설명서 입니다.
  • requirements.txt : 소스코드 실행에 필수적인 라이브러리 목록입니다.
  • strategy.txt : 선물 매매 전략 파일입니다. 현재는 국내 유명 선물 투자자 워뇨띠의 투자전략이 적혀있습니다. 자신만의 전략을 넣어 활용할 수 있습니다.
  • trading.py : 메인 실행파일입니다.
  • .env : 깃허브에는 없는 파일로 API키와 같은 비밀정보를 보관하는 파일입니다. 사용자가 직접생성해주어야 합니다.

주요기능

  • 시장 데이터 수집 및 기술적 지표 계산:
    Binance API를 사용하여 4시간, 1시간, 1일 간격의 가격 데이터를 수집하고, ta 라이브러리를 이용해 Bollinger Bands, RSI, MACD 등 다양한 지표를 계산합니다.
  • 계좌 및 포지션 상태 확인:
    현재 선물 계좌의 잔고 및 롱/숏 포지션 정보를 조회합니다.
  • AI 기반 거래 결정 생성:
    OpenAI 챗 API를 활용하여 최근 거래 내역과 현재 시장 데이터를 바탕으로 거래 결정을 생성합니다. 이 과정에서 거래 결정은 “LONG”, “SHORT”, “HOLD” 중 하나로 결정되며, 포지션 비율과 사유를 함께 제공합니다.
  • 실제 주문 실행 및 거래 기록 저장:
    기존 포지션을 청산한 후, AI가 생성한 거래 결정에 따라 새로운 주문을 실행하고, 결과를 SQLite 데이터베이스에 기록합니다.
  • 스케줄링:
    schedule 라이브러리를 통해 지정된 시간에 자동으로 거래 작업을 실행합니다.
  • 디스코드 로그 전송 (옵션):
    설정된 Discord 웹훅을 통해 로그 메시지를 전송하여 실시간 알림을 받을 수 있습니다.

필수 요구사항 및 환경 설정

요구사항

  • Python: 3.7 이상
  • 필수 라이브러리:
    • pandas
    • requests
    • schedule
    • ta
    • python-dotenv
    • pydantic
    • openai
    • python-binance

설치 예시:

pip install pandas requests schedule ta python-dotenv pydantic openai python-binance
pip install -r requirements.txt

아래 명령어로 한번에 설치가 가능합니다.

환경 변수 설정

프로젝트 루트 디렉터리에 .env 파일을 생성한 후, 아래와 같이 API 키 및 기타 필요한 설정값을 입력하세요.

BINANCE_API_KEY=your_binance_api_key
BINANCE_SECRET_KEY=your_binance_secret_key
OPENAI_API_KEY=your_openai_api_key
DISCORD_WEBHOOK_URL=your_discord_webhook_url  # 선택 사항 (없으면 비워두세요)

API 발급 방법은 아래 포스팅을 참고해주세요

코드 구조 및 주요 구성 요소

설정 및 라이브러리 임포트

코드 상단에서는 필요한 표준 라이브러리와 외부 라이브러리들을 임포트합니다.
특히, dotenv를 통해 환경 변수를 로드하고, Binance, OpenAI API 관련 라이브러리와 기술적 지표 계산에 사용되는 ta 라이브러리 등을 사용합니다.

로깅 및 Discord 웹훅

setup_logging() 함수에서는 로그 파일(trading_bot.log)과 콘솔 출력을 위한 핸들러를 설정합니다.
또한, DISCORD_WEBHOOK_URL이 설정되어 있다면, DiscordHandler 클래스가 활성화되어 로그 메시지를 해당 웹훅으로 전송합니다.
DiscordHandler 클래스의 emit 메소드에서는 requests.post를 사용해 웹훅으로 JSON 페이로드를 전송하는 방식으로 구현되어 있습니다.

데이터 모델 (Pydantic)

DualTradingDecision, Position, Positions, TradeLog 등의 Pydantic 모델을 통해 거래 결정 및 포지션, 거래 로그 등의 데이터를 명확한 스키마로 정의합니다.
이를 통해 데이터 검증 및 구조화를 효과적으로 처리할 수 있습니다.

헬퍼 함수 및 기술적 지표 계산

  • 헬퍼 함수:
    adjust_quantity_to_step() 함수는 주문 수량을 설정된 최소 단위에 맞게 조정합니다.
    read_strategy_file() 함수는 외부의 strategy.txt 파일에서 거래 전략을 읽어옵니다.
  • 기술적 지표:
    add_indicators() 함수는 pandas DataFrame에 Bollinger Bands, RSI, MACD, 이동평균선, ATR 등 다양한 기술적 지표를 계산하여 추가합니다.

서비스 클래스 (Binance, AI, Database 등)

  • BinanceService:
    Binance API를 활용하여 선물 계좌 잔고, 포지션 정보, 여러 시간대의 시장 데이터를 조회하고, 주문 실행을 담당합니다.
  • MarketDataService:
    대체 API를 통해 시장 심리를 나타내는 Fear & Greed Index를 조회합니다.
  • AIService:
    OpenAI 챗 API를 사용해 최근 거래 기록과 현재 시장 데이터를 바탕으로 거래 반성과 결정을 생성합니다.
    생성된 결정은 JSON 스키마를 통해 Pydantic 모델로 검증됩니다.
  • DatabaseService:
    SQLite 데이터베이스를 초기화하고, 거래 기록을 저장 및 조회하는 역할을 합니다.

트레이딩 로직 및 스케줄링

TradingStrategy 클래스에서는 전체 거래 프로세스를 하나로 묶어 다음과 같은 작업을 수행합니다.

  1. 계좌 상태 및 시장 데이터 조회:
    BinanceService를 통해 잔고와 포지션, 여러 시간대의 시장 데이터를 가져옵니다.
  2. 데이터 전처리:
    수집된 시장 데이터에 기술적 지표를 추가하고, AI가 분석할 수 있는 형식으로 재구성합니다.
  3. AI 기반 거래 결정 생성:
    외부 거래 전략 파일의 내용을 바탕으로 OpenAI 챗 API를 호출하여 거래 결정을 생성합니다.
  4. 주문 실행 및 포지션 관리:
    기존 포지션을 청산하고, AI 결정에 따라 새 포지션을 진입합니다.
  5. 거래 기록 저장:
    실행 결과를 SQLite 데이터베이스에 기록하고, 로그 파일에 결과를 남깁니다.

또한, schedule 라이브러리를 이용해 SCHEDULE_TIMES에 따라 자동으로 거래 작업이 실행되도록 스케줄링 할 수 있습니다.

실행 방법

즉시 실행 모드 (테스트)

테스트 및 빠른 실행을 위해 터미널에서 다음 명령어를 입력합니다:

python trading.py --test

이 모드는 한 번의 거래 작업을 즉시 실행하며, 디버깅 및 초기 테스트에 유용합니다.

스케줄 모드

자동 실행을 원하면 인자 없이 다음과 같이 실행합니다:

python trading.py

이 경우, 코드에 설정된 스케줄(예: ’00:00′, ’04:00′, … 등)에 따라 매일 정해진 시간에 거래 작업이 자동으로 실행됩니다.

위에 코드는 터미널에서 실행하면 되며 윈도우 기준으로 작성되어 있습니다. MacOS에서는 python 대신 python3을 사용하면되겠습니다.

결론 및 확장 포인트

이 Python 기반의 비트코인 자동매매 봇은 Binance와 OpenAI API를 활용하여 AI 기반 거래 결정을 내리고, 이를 실행 및 기록하는 통합 시스템입니다.
실제 운영 환경에서 사용하기 전, 아래 사항들을 고려해 보세요.

  • API 호출 제한 및 예외 처리:
    네트워크 문제나 API 호출 제한에 대비하여 추가적인 재시도 로직과 오류 처리가 필요할 수 있습니다.
  • 거래 전략 파일 관리:
    strategy.txt 파일의 내용이 AI의 거래 결정에 큰 영향을 미치므로, 적절한 전략을 작성하고 정기적으로 업데이트해야 합니다.
  • 보안:
    API 키와 같은 민감 정보는 반드시 .env 파일로 관리하고, 소스코드 저장소에는 포함되지 않도록 주의해야 합니다.
  • 동시성 관리:
    단일 스레드 환경에서는 문제가 없지만, 확장 시 멀티스레드 환경에서의 동기화 처리가 필요할 수 있습니다.

이 포스팅을 통해 여러분도 이 자동매매 봇의 구조와 사용법을 이해하고, 자신만의 전략과 기능을 추가하여 확장할 수 있기를 바랍니다.

시스템 트레이딩에 관심있는 분들을 위해 커뮤니티를 운영중입니다. 궁금하신 사항은 카페에 질문을 남겨주세요