이번 포스팅에서는 인공지능(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
클래스에서는 전체 거래 프로세스를 하나로 묶어 다음과 같은 작업을 수행합니다.
- 계좌 상태 및 시장 데이터 조회:
BinanceService를 통해 잔고와 포지션, 여러 시간대의 시장 데이터를 가져옵니다. - 데이터 전처리:
수집된 시장 데이터에 기술적 지표를 추가하고, AI가 분석할 수 있는 형식으로 재구성합니다. - AI 기반 거래 결정 생성:
외부 거래 전략 파일의 내용을 바탕으로 OpenAI 챗 API를 호출하여 거래 결정을 생성합니다. - 주문 실행 및 포지션 관리:
기존 포지션을 청산하고, AI 결정에 따라 새 포지션을 진입합니다. - 거래 기록 저장:
실행 결과를 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
파일로 관리하고, 소스코드 저장소에는 포함되지 않도록 주의해야 합니다. - 동시성 관리:
단일 스레드 환경에서는 문제가 없지만, 확장 시 멀티스레드 환경에서의 동기화 처리가 필요할 수 있습니다.
이 포스팅을 통해 여러분도 이 자동매매 봇의 구조와 사용법을 이해하고, 자신만의 전략과 기능을 추가하여 확장할 수 있기를 바랍니다.
시스템 트레이딩에 관심있는 분들을 위해 커뮤니티를 운영중입니다. 궁금하신 사항은 카페에 질문을 남겨주세요