이전 글에서는 GPT가 비트코인 차트 데이터를 보고
BUY, SELL, HOLD 중 하나를 판단하도록 구현했습니다.
이번에는 그 결과를 받아 자동으로 매수·매도 주문을 넣는 코드를 완성해보겠습니다.

🔹 1. 준비 확인
이전 단계에서 다음이 준비되어 있어야 합니다 👇
- .env 파일에 업비트 API 키 등록 완료
- pyupbit, openai, python-dotenv 설치 완료
- GPT가 JSON 형태로 “{"decision": "buy"}” 형태의 응답을 반환
이 상태라면 바로 자동매매 코드를 작성할 수 있습니다.
🔹 2. 기본 코드 구조
자동매매는 크게 3단계로 나뉩니다.
1️⃣ GPT에게 판단 요청 → buy/sell/hold 응답 수신
2️⃣ 결과 해석 → 어떤 주문을 실행할지 결정
3️⃣ 업비트 API 호출 → 실제 매수/매도 주문 실행
전체 구조를 코드로 살펴보겠습니다 👇
🔹 3. 코드 구현
import pyupbit
from openai import OpenAI
from dotenv import load_dotenv
import os, json
# 환경변수 불러오기
load_dotenv()
# 업비트 클라이언트 설정
access = os.getenv("UPBIT_ACCESS_KEY")
secret = os.getenv("UPBIT_SECRET_KEY")
upbit = pyupbit.Upbit(access, secret)
# GPT 클라이언트 설정
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 비트코인 30일 시세 불러오기
df = pyupbit.get_ohlcv("KRW-BTC", count=30, interval="day")
chart_data = df.to_json()
# GPT 프롬프트
system_prompt = """
You are a Bitcoin trading analyst.
Analyze the last 30 days of OHLC data and decide whether to BUY, SELL, or HOLD.
Respond only in JSON format:
{"decision": "buy"} or {"decision": "sell"} or {"decision": "hold"}
"""
# GPT 판단 요청
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": chart_data}
],
response_format={"type": "json_object"}
)
# GPT 응답 결과 파싱
result = json.loads(response.choices[0].message.content)
decision = result["decision"]
print("GPT 판단 결과:", decision)
🔹 4. 매매 함수 만들기
이제 GPT의 판단(decision) 값에 따라
매수 또는 매도를 수행하는 함수를 추가합니다.
# 매수 함수
def buy_bitcoin():
krw_balance = upbit.get_balance("KRW")
if krw_balance * 0.9995 > 5000: # 최소 거래금액 5000원 이상
print("📈 매수 주문 실행")
upbit.buy_market_order("KRW-BTC", krw_balance * 0.9995)
else:
print("❌ 매수 실패: 잔고 부족")
# 매도 함수
def sell_bitcoin():
btc_balance = upbit.get_balance("KRW-BTC")
btc_price = pyupbit.get_orderbook("KRW-BTC")["orderbook_units"][0]["ask_price"]
if btc_balance * btc_price > 5000: # 5000원 이상만 거래
print("📉 매도 주문 실행")
upbit.sell_market_order("KRW-BTC", btc_balance)
else:
print("❌ 매도 실패: 보유량 부족")
🔹 5. GPT 판단 결과에 따른 주문 실행
이제 GPT의 판단값을 기반으로 위 함수를 호출해봅니다 👇
if decision == "buy":
buy_bitcoin()
elif decision == "sell":
sell_bitcoin()
else:
print("⏸ HOLD 신호 — 거래 대기 중")
✅ 설명
- GPT가 "buy" → 원화 잔고 확인 후 비트코인 전량 매수
- GPT가 "sell" → 비트코인 보유량 확인 후 전량 매도
- GPT가 "hold" → 아무 행동도 하지 않고 대기
🔹 6. 전체 코드 정리
아래는 지금까지의 내용을 합친 완전 실행 가능한 자동매매 코드입니다 👇
import pyupbit
from openai import OpenAI
from dotenv import load_dotenv
import os, json
# 환경 변수 로드
load_dotenv()
# API 클라이언트 설정
access = os.getenv("UPBIT_ACCESS_KEY")
secret = os.getenv("UPBIT_SECRET_KEY")
openai_key = os.getenv("OPENAI_API_KEY")
upbit = pyupbit.Upbit(access, secret)
client = OpenAI(api_key=openai_key)
# 비트코인 30일 시세 데이터
df = pyupbit.get_ohlcv("KRW-BTC", count=30, interval="day")
chart_data = df.to_json()
# GPT 프롬프트
system_prompt = """
You are a Bitcoin trading analyst.
Analyze the last 30 days of OHLC data and decide whether to BUY, SELL, or HOLD.
Respond only in JSON format:
{"decision": "buy"} or {"decision": "sell"} or {"decision": "hold"}
"""
# GPT 판단 요청
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": chart_data}
],
response_format={"type": "json_object"}
)
# GPT 응답 파싱
result = json.loads(response.choices[0].message.content)
decision = result["decision"]
print("GPT 판단 결과:", decision)
# 매수 함수
def buy_bitcoin():
krw_balance = upbit.get_balance("KRW")
if krw_balance * 0.9995 > 5000:
print("📈 매수 주문 실행")
upbit.buy_market_order("KRW-BTC", krw_balance * 0.9995)
else:
print("❌ 매수 실패: 잔고 부족")
# 매도 함수
def sell_bitcoin():
btc_balance = upbit.get_balance("KRW-BTC")
btc_price = pyupbit.get_orderbook("KRW-BTC")["orderbook_units"][0]["ask_price"]
if btc_balance * btc_price > 5000:
print("📉 매도 주문 실행")
upbit.sell_market_order("KRW-BTC", btc_balance)
else:
print("❌ 매도 실패: 보유량 부족")
# GPT 결과에 따라 주문 실행
if decision == "buy":
buy_bitcoin()
elif decision == "sell":
sell_bitcoin()
else:
print("⏸ HOLD — 거래 대기 중")
🔹 7. 주의사항 및 안전장치
- 테스트 모드부터 시작하세요.
실제 자금이 있는 계정에서는 반드시 소액으로 테스트하세요. - 5000원 미만 거래 불가
업비트는 5000원 이하 거래를 허용하지 않습니다. - 수수료 고려
매수·매도 모두 0.05% 수수료가 발생합니다. - API 권한 확인
업비트 API 생성 시 자산조회, 주문조회, 주문하기 세 항목을 반드시 체크해야 합니다.
🔹 8. 다음 단계 예고
이제 GPT의 판단 결과를 바탕으로
실제 자동매매가 실행되는 프로그램이 완성되었습니다.
다음 편에서는 프로그램이 1시간마다 자동으로 반복 실행되도록
루프를 구성하는 방법을 알아보겠습니다.
👉 다음 글 예고
- 6편 — 1시간마다 자동 반복 매매 (Main Loop 구성)
- 7편 — 리스크 관리 및 중복 주문 방지 로직 추가
관련 포스팅
업비트 비트코인 GPT 자동매매 3편 : 비트코인 시세 데이터 가져오기
이제 GPT가 판단할 수 있는 데이터를 만들어야 합니다.이번 글에서는 업비트 API를 활용해 비트코인 시세(OHLCV) 데이터를 가져오는 방법을 배워봅니다.이 데이터는 이후 GPT가 “BUY / SELL / HOLD” 결
codelenz.tistory.com
업비트 비트코인 GPT 자동매매 4편 : GPT로 의사결정하기
이제 GPT를 본격적으로 트레이딩 의사결정에 활용할 차례입니다.이번 글에서는 업비트에서 불러온 비트코인 시세 데이터를 GPT API로 전송하고,AI가 매수·매도·보류 중 어떤 판단을 내리는지를 JS
codelenz.tistory.com
'Python' 카테고리의 다른 글
| 업비트 비트코인 GPT 자동매매 7편 : 리스크 관리 및 중복 매매 방지 (0) | 2025.10.08 |
|---|---|
| 업비트 비트코인 GPT 자동매매 6편 : 자동 매매 메인루프 구성 (0) | 2025.10.08 |
| 업비트 비트코인 GPT 자동매매 4편 : GPT로 의사결정하기 (0) | 2025.10.08 |
| 업비트 비트코인 GPT 자동매매 3편 : 비트코인 시세 데이터 가져오기 (0) | 2025.10.06 |
| 업비트 비트코인 GPT 자동매매 2편 : API 키 연동 및 환경 변수 관리 (0) | 2025.10.06 |