코딩

GPT에게 맡기는 AI 비트코인 투자 자동화 - AI 에이전트 만들기 [조코딩]

capstone012 2025. 9. 4. 14:15
반응형
SMALL

GPT에게 맡기는 AI 비트코인 투자 자동화 - AI 에이전트 만들기 

 

GPT를 활용한 AI 비트코인 투자 자동화 강의 요약


목차

  1. 강의 개요 및 GPT를 활용한 투자 판단의 원리
  2. 환경 설정
    • 업비트(Upbit) API 키 발급
    • OpenAI API 키 발급 및 크레딧 충전
    • 파이썬 및 VS Code 설치
    • 파이썬 라이브러리 설치
    • API 키 환경 변수 설정(.env)
  3. AI 자동매매 프로그램 구현
    • 최소 기능 제품(MVP) 구현
    • 코드 수정 및 자동화
  4. 마무리: 투자 유의사항 및 다음 강의 안내

1. 강의 개요 및 GPT를 활용한 투자 판단의 원리

이 강의는 2021년 고정된 전략을 사용했던 비트코인 투자 자동화와 달리, 초거대 AI인 GPT를 활용하여 시장 상황에 맞춰 추론 및 판단하는 자동매매 시스템을 구축하는 방법을 다룹니다. AI는 인간의 투자 판단 과정처럼 차트, 뉴스, 커뮤니티 의견, 투자 철학 등 방대한 데이터를 종합적으로 보고 분석하여 자동으로 거래를 진행하게 됩니다.

AI가 투자 판단을 내리는 원리는 다음과 같습니다.

  1. 파이썬을 이용하여 업비트 등에서 차트 데이터를 가져옵니다.
  2. 이 데이터를 GPT API로 전송합니다. 이때 프롬프트를 통해 AI의 역할과 응답 형식을 설정합니다.
  3. GPT는 데이터를 기반으로 '매수(Buy)', '매도(Sell)', '보유(Hold)' 등의 판단을 내립니다.
  4. AI가 내린 판단 신호를 받아 실제로 자동 매매를 실행합니다.

2. 환경 설정

AI 자동매매 프로그램을 구축하기 위해 필요한 환경을 설정합니다.

업비트(Upbit) API 키 발급

  • 업비트 앱을 다운로드하고 회원가입 및 고객 확인을 완료합니다.
  • 업비트 웹사이트에 접속하여 API 키를 발급받습니다. 이때 자산 조회, 주문 조회, 주문하기 권한에 체크하고, IP 주소 등록을 통해 접근을 제한하는 것이 안전합니다.
  • 발급받은 **엑세스 키(Access Key)**와 **시크릿 키(Secret Key)**를 메모장에 안전하게 저장합니다.

OpenAI API 키 발급 및 크레딧 충전

  • OpenAI 플랫폼 웹사이트에 접속하여 회원가입 및 로그인을 합니다.
  • API를 사용하기 위해 Billing 메뉴에서 결제 카드를 등록하고 크레딧을 충전해야 합니다.
  • API keys 메뉴에서 새로운 **시크릿 키(Secret Key)**를 발급받아 메모장에 저장합니다. 이 키는 외부에 노출되지 않도록 주의해야 합니다.

파이썬 및 VS Code 설치

  • 파이썬 공식 홈페이지에서 3.9.13 버전(강의 기준)을 다운로드하여 설치합니다. 이때 반드시 Add Python 3.9 to PATH를 체크해야 합니다.
  • Visual Studio Code(VS Code)를 다운로드하여 설치합니다.
  • VS Code에서 Python 익스텐션을 설치합니다.

파이썬 라이브러리 설치

프로젝트 폴더를 생성한 후, VS Code 터미널에서 requirements.txt 파일을 생성하고 아래 내용을 입력합니다.

python-dotenv
openai
pyupbit

터미널에서 아래 명령어를 실행하여 필요한 라이브러리를 한 번에 설치합니다.

pip install -r requirements.txt

API 키 환경 변수 설정(.env)

  • API 키를 코드에 직접 노출하지 않기 위해 requirements.txt와 같은 폴더에 .env 파일을 생성합니다.
  • .env 파일에 발급받은 키들을 아래와 같이 입력합니다.
UPBIT_ACCESS_KEY="자신의 업비트 엑세스 키"
UPBIT_SECRET_KEY="자신의 업비트 시크릿 키"
OPENAI_API_KEY="자신의 OpenAI API 키"

3. AI 자동매매 프로그램 구현

최소 기능 제품(MVP) 구현

최소한의 기능만으로 AI 자동매매 프로그램을 만들어 봅니다.

  1. 업비트 차트 데이터 가져오기: pyupbit 라이브러리의 get_ohlcv 함수를 이용하여 30일치 일봉(Day) 데이터를 가져옵니다.
  2. AI에게 데이터 제공 및 판단 받기: 가져온 차트 데이터를 df.to_json()으로 JSON 형식으로 변환하여 OpenAI API에 전달합니다. AI의 응답을 JSON 형태로 받습니다.
  3. 판단에 따라 자동 매매 진행: AI의 응답(buy, sell, hold)에 따라 pyupbit 라이브러리의 buy_market_order 또는 sell_market_order 함수를 호출하여 거래를 실행합니다.

코드 수정 및 자동화

실제 자동매매를 위해 코드를 수정하고 자동화합니다.

  • 수수료(0.05%) 및 최소 주문 금액(5,000원) 고려: buy_market_order 함수 호출 시 수수료를 제외한 금액을 계산하고, 5,000원 이상일 때만 거래를 실행하도록 조건문을 추가합니다.
  • 코드 자동 실행: while True:와 time.sleep()을 사용하여 코드가 일정 시간 간격으로 반복 실행되도록 함수를 구성합니다.

4. 마무리: 투자 유의사항 

AI는 완벽하지 않으며 판단 오류로 인해 원금 손실이 발생할 수 있습니다. 투자의 책임은 전적으로 본인에게 있으므로 이를 명심하고 진행해야 합니다. AI 기술은 계속 발전하고 있으므로, 한 번 구축해 놓은 시스템은 시간이 지날수록 판단 정확도가 높아질 가능성이 있습니다.

 

 

# 이 파일은 'GPT에게 맡기는 AI 비트코인 투자 자동화' 유튜브 강의 내용을 바탕으로 작성되었습니다.

# 아래 코드는 영상에서 소개된 AI 자동매매 프로그램의 최소 기능 버전(MVP)입니다.

 

# --- 목차 ---
# 1. AI 투자 자동화 개요
#    - 과거의 고정 전략 대비 AI의 복합적 판단 능력 소개
#    - 차트, 뉴스, 커뮤니티, 투자 철학 등 다양한 데이터를 종합하여 판단
#
# 2. AI 자동매매 프로그램 구조
#    - GPT가 전략을 세우고, 데이터를 종합하여 투자 판단을 내림
#    - 거래소 API를 통해 실제 매매 실행
#    - 매매 기록을 다시 데이터로 활용하여 AI의 판단을 개선
#
# 3. 환경 설정 및 API 키 발급
#    - 업비트(Upbit) API 키 발급 (자산/주문 조회, 주문하기)
#    - OpenAI API 키 발급 (API 사용을 위한 크레딧 충전 필요)
#    - 파이썬 및 VS Code 설치
#    - 필요한 라이브러리 설치: python-dotenv, openai, pyupbit
#
# 4. 최소 기능 제품(MVP) 구현
#    - 기능 1: pyupbit 라이브러리를 사용해 업비트 차트 데이터(30일 일봉) 가져오기
#    - 기능 2: OpenAI API에 차트 데이터를 제공하여 AI의 투자 판단(매수/매도/보유) 받기
#    - 기능 3: AI 판단에 따라 실제 자동 매매 실행 (수수료, 최소 주문 금액 고려)
#
# 5. 실행 방법 및 유의사항
#    - 아래 코드는 무한 루프를 통해 자동으로 매매를 실행합니다.
#    - API 호출 시 비용이 발생할 수 있으니 주의해야 합니다.
#    - 투자는 항상 본인의 판단과 책임하에 진행해야 합니다. AI의 판단은 완벽하지 않습니다.

 

import os
import time
import json
import pyupbit
import openai
from dotenv import load_dotenv

 

# API 키를 .env 파일에서 불러옵니다.
# .env 파일은 아래와 같이 작성해야 합니다.
# UPBIT_ACCESS_KEY="자신의 업비트 Access Key"
# UPBIT_SECRET_KEY="자신의 업비트 Secret Key"
# OPENAI_API_KEY="자신의 OpenAI API Key"

 

# 만약 .env 파일이 없다면 아래 변수에 직접 키를 입력하세요.
# UPBIT_ACCESS_KEY = ""
# UPBIT_SECRET_KEY = ""
# OPENAI_API_KEY = ""

 

load_dotenv()
upbit_access_key = os.getenv("UPBIT_ACCESS_KEY")
upbit_secret_key = os.getenv("UPBIT_SECRET_KEY")
openai_api_key = os.getenv("OPENAI_API_KEY")

 

# OpenAI API 클라이언트 설정
openai.api_key = openai_api_key

 

# 업비트 API 클라이언트 설정
upbit = pyupbit.Upbit(upbit_access_key, upbit_secret_key)

 

def get_current_price(ticker):
    """현재 가격을 가져오는 함수"""
    try:
        orderbooks = pyupbit.get_orderbook(ticker)
        if orderbooks and 'orderbook_units' in orderbooks and len(orderbooks['orderbook_units']) > 0:
            return orderbooks['orderbook_units'][0]['ask_price']
        return None
    except Exception as e:
        print(f"가격 정보를 가져오는 중 오류 발생: {e}")
        return None

 

def ai_trading_strategy():
    """
    AI 기반 투자 판단 및 자동 매매 로직
    """
    try:
        # 1. pyupbit를 이용해 비트코인(BTC) 30일치 일봉 차트 데이터 가져오기
        # 'KRW-BTC' 시장의 30일치 일봉(daily candles) 데이터를 가져옵니다.
        df_btc = pyupbit.get_ohlcv("KRW-BTC", interval="day", count=30)
       
        if df_btc is None or df_btc.empty:
            print("차트 데이터를 가져오는데 실패했습니다. 다음 주기에 다시 시도합니다.")
            return

 

        # 차트 데이터를 JSON 형식 텍스트로 변환
        chart_data_json = df_btc.to_json()
       
        # OpenAI API에 보낼 프롬프트 설정
        system_prompt = "You are an expert in bitcoin investing. Tell me whether to 'buy', 'sell', or 'hold' at the moment based on the chart data provided. Also, give a detailed reason for your decision. Respond in JSON format."
        user_prompt = f"Based on the following 30-day daily chart data, what is your investment decision (buy, sell, or hold)? The data is in JSON format.\n\n{chart_data_json}"

 

        # 2. OpenAI API를 호출하여 AI의 투자 판단 받기
        # 'gpt-4o' 모델을 사용합니다.
        print("AI에게 투자 판단을 요청하는 중...")
        response = openai.chat.completions.create(
            model="gpt-4o",
            response_format={"type": "json_object"},
            messages=[
                {"role": "system", "content": system_prompt},
                {"role": "user", "content": user_prompt}
            ]
        )
       
        # 응답 메시지에서 JSON 데이터 추출
        response_content = response.choices[0].message.content
        ai_decision_data = json.loads(response_content)
       
        decision = ai_decision_data.get('decision', 'hold').lower()
        reason = ai_decision_data.get('reason', '이유가 제공되지 않았습니다.')
       
        print(f"--- AI 판단 ---")
        print(f"결정: {decision}")
        print(f"이유: {reason}")
        print("----------------")
       
        # 3. AI 판단에 따라 실제 매매 실행
        krw_balance = upbit.get_balance("KRW")
        btc_balance = upbit.get_balance("BTC")
        current_btc_price = get_current_price("KRW-BTC")
       
        if not all([krw_balance, btc_balance, current_btc_price]):
            print("잔고 또는 현재 가격 정보를 가져오는데 실패했습니다. 다음 주기에 다시 시도합니다.")
            return

 

        # 거래 수수료(0.05%)와 최소 주문 금액(5,000원) 고려
        min_trade_amount = 5000
        fee_rate = 0.0005
       
        if decision == 'buy':
            # 매수 결정
            buy_amount = krw_balance * (1 - fee_rate)
            if buy_amount > min_trade_amount:
                print("매수를 진행합니다...")
                upbit.buy_market_order("KRW-BTC", buy_amount)
                print("매수 완료.")
            else:
                print(f"매수 실패: 매수 가능 금액({buy_amount:,.0f} KRW)이 5,000원 미만입니다.")
       
        elif decision == 'sell':
            # 매도 결정
            sell_amount_krw = btc_balance * current_btc_price
            if sell_amount_krw > min_trade_amount:
                print("매도를 진행합니다...")
                # 매도 시 코인 수수료가 차감되므로 전체 수량을 매도할 수 있습니다.
                upbit.sell_market_order("KRW-BTC", btc_balance)
                print("매도 완료.")
            else:
                print(f"매도 실패: 보유 비트코인 가치({sell_amount_krw:,.0f} KRW)가 5,000원 미만입니다.")
       
        else: # decision == 'hold'
            # 보유 결정
            print("보유(Hold)합니다. 매매를 진행하지 않습니다.")
       
    except Exception as e:
        print(f"오류가 발생했습니다: {e}")
        # 오류 발생 시 프로그램을 종료하지 않고 다음 주기에 재시도합니다.

 

# 메인 루프: 10초마다 AI 트레이딩 함수 실행
if __name__ == "__main__":
    print("AI 비트코인 투자 자동화 프로그램을 시작합니다.")
    print("API 호출은 비용이 발생할 수 있으니 유의하시기 바랍니다.")
    print("프로그램을 중단하려면 Ctrl+C를 누르세요.")
    while True:
        ai_trading_strategy()
        time.sleep(10)  # 10초 대기
반응형
LIST