AI.

업비트 거래 자동화 AI 만들기 3편

From.h 2024. 10. 29. 00:52
728x90
반응형

비트코인 자동 매매 AI (MVP만들기)

 

비트코인 거래소 업비트에서 등락 추세를 분석하여, 자동으로 매매하는 파이썬 프로그램을 만들어보자.

 

Feat. 조코딩

 

 

 

 

 

 

 

 

조코딩 님의 유튜브를 보며 따라해보았습니다.

자세한 내용은 유튜브를 참조하세요.

 

 

 

 

1편 : 준비과정

2편 : VSCode (파이썬) 설정

3편 : MVP 만들기

4편 : 자동매매 구현

 

 

 

이번 편에서는 최소 기능을 테스트해보는 MVP를 만들어봅니다

업비트 차트를 가져와서 AI에게 투자 판단을 하도록 시켜, 받은 데이터를 통해 자동 매매가 이뤄지도록 설정

하는 것을 해보겠습니다.

 

 

1. 업비트 차트 가져오기 (30일)

2. AI에게 데이터 제공하고 판단 받기

3. Python으로 코딩 및 출력하기

(자동 매매는 다음 편에...)

 

 

 

 

 

 

 

 

 

1. 업비트 차트 가져오기 (30일)

 이미 지난 편에 라이브러리 설치한 pyupbit는 아래 깃허브 자료를 참조합니다.

https://github.com/sharebook-kr/pyupbit

 

 

 

1) pyupbit 라이브러리 불러오기

 

 

 

 

 

 

 

 

2) 차트 데이터 불러오기

 

**차트 데이터를 가져오는데 ' ohlcv' 의미를 알아보고 가겠습니다.

 o (open) :  시가 (첫 번째 거래 가격)

 h (high)  :  고가 (최고 거래 가격)

 l (low)    :  저가 (최저 거개 가격)

 c (close) : 종가 (마지막 거래 가격)

 v (volume) : 거래량 (거래된 수량)

 

 

 

 

 

 

3) 테스트

 a. mvp.py라는 파일을 하나 생성합니다

 

 

b. 아래 코드를 삽입합니다.

import os
from dotenv import load_dotenv
load_dotenv()

import pyupbit
df = pyupbit.get_ohlcv("KRW-BTC")
print(df.tail())

 

위의 내용은 미리 저장해둔  API키를 사용하기 위한 코드이고,

아래 내용은 pyupbit라이브러리를 사용하여 'ohlcv' 차트를 가져오는 코드입니다.

 

 

 

c. 실행시키면 콘솔에 아래와 같이 출력됩니다.

**'ohlcv' 데이터를 이전 5일치 출력한 것을 볼 수 있습니다.

 

 

 

 

 

 

4) '30일치 일봉 데이터' 가져오기

 

 

 

위의 내용을 적용하여 아래와 같이 바꿔주면 '30일치 일봉 데이터'를 가져오게 되겠습니다.

import os
from dotenv import load_dotenv
load_dotenv()

import pyupbit
df = pyupbit.get_ohlcv("KRW-BTC", count=30, interval="day")
print(df)

 

 

 

 

 

 

 

 

 

 

 

2. AI에게 데이터 제공하고 판단 받기

 

1) 오픈AI API 사이트 상단 우측 메뉴에서 "playground" 선택!

https://platform.openai.com/playground/chat?models=gpt-4o

 

말그대로 개발자가 chatGPT를 가지고 놀 수 있는 공간입니다. 짧게 기능을 설명드리면.

 

a. System instructions : 역할 부여 

b. Enter user message : 자료 입력

c. Temperature : 답변 무작위성 : 올릴 수록 다양하고 창의적인 답변이 나올 수 있음. 반대로 낮을 수록 결정적인 집중된 결과를...

d. Maximum length : 답변 최대 길이

e. Stop sequences : 답변 멈추게 하는 단어

f. Top P : 다양성 : 다음 단어를 예측할 때 그 연관성을 고려하는 정도를 나타냄 1에 가까우면 창의적, 0에 가까울 수록 일관성을...

g. Frequency penalty : 반복 방지, 이 값을 높여 페널티를 준다는 의미는 생성된 결과물에 반복 사용된 단어들을 낮추게 함...

h. Presence penalty : 반복 방지 , 이 값을 높여 페널티를 준다는 의미는 다양한 어휘, 문구를 사용하도록 한다는 의미...

 

자세한 내용은 아래 링크를 참조하세요.

외부 참조>

 

 

 

 

 

 

 

2) 시스템에 입력할 역할과 명령을 번역하여 영어로 입력해줍니다.

https://www.deepl.com/ko/translator

 

DeepL 번역: 세계에서 가장 정확한 번역기

텍스트 및 전체 문서 파일을 즉시 번역하세요. 개인과 팀을 위한 정확한 AI 번역. 매일 수백만 명이 DeepL 번역기로 작업합니다.

www.deepl.com

 

 

a. 역할을 지정하고, 무엇을 해야 할 지 입력합니다

너는 비트코인 전문가야. 제공된 차트 데이터를 기반으로 현재 buy, sell, hold 중 어떤 선택을 해야 할 지 알려줘.

 

 

번역본 : 

You're a Bitcoin expert. Tell me whether to buy, sell, or hold at the moment based on the chart data provided.

 

 

b. 답변의 형식을 지정합니다.

  json형식의 구문으로 출력되도록, 아래와 같이 '제목'과 '이유'에 대해 서술하는 형식을 지정합니다.

Response Example:
{"decision": "buy", "reason":"some technical reason"}
{"decision": "sell", "reason":"some technical reason"}
{"decision": "hold", "reason":"some technical reason"}

 

 

 

 

 

 

 

3) 위에서 작성한 내용을 System instructions에 입력해줍니다.

 우측 Response Format 을 'json object' 로 바꿔줍니다.

 

 

 

 

 

 

 

4) Python 출력 데이터 형식을 바꿔줍니다. (표형식 > json 형식)

 

Python 파일에서 출력 처리하는 마지막 줄 명령어를 아래와 같이 변경해줍니다.

print(df.to_json())

 

 

 

 

 

 

 

 

5) 일봉 데이터를 User에 추가합니다.

위 파이썬에서 'json' 형식으로 출력된 "30일 일봉 데이터"를 복사해서 playground 에 user창에 입력해 주고, "+" Add 버튼!

 

 

 

 

 

 

 

6) json 포맷으로 출력하라고 System Instructions에 추가해준 후, "Run"을 클릭합니다.

 

 아래와 같이 Assistant 결과가 나옵니다. 

 

"buy"라고 나왔네요.

이유로는 '차트 데이터는 최근 종가가 최저 81,500,000에서 최고 96,148,000까지 상승 추세를 보여 강세 모멘텀을 나타냅니다. 또한 거래량과 거래 금액이 상대적으로 많아 시장의 관심이 높다는 것을 알 수 있습니다'라고 나옵니다.

  "decision": "buy",
  "reason": "The chart data shows a recent upward trend in the closing prices from a low of 81,500,000 to a high of 96,148,000, indicating bullish momentum. Additionally, the volume and value traded are relatively significant, suggesting strong market interest."

 

 

 

 

 

 

 

 

 

 

 

 

3. Python으로 코딩 및 출력하기

 

 

1) Assistant 의 답변은 삭제(휴지통 아이콘) 한 후, 우측 상단의 'Code' 를 클릭합니다

 

 

 

 

 

 

 

2) 아래와 같이 파이썬 코드가 뜹니다. 우측 상단의 '복제' 아이콘을 클릭하여 복사합니다

 

 

 

 

 

 

3) 파이썬으로 가져와 몇 가지 수정합니다

 아래 x표시한 부분 삭제합니다.

 

 

 

 

 

 

 

 

4) 아래 내용을 추가해 줍니다

*User content / text에 해당하는 부분에는 입력했던 'json 데이터' 대신 해당 부분 '코드'로 대신합니다.

"text": df.to_json()

 

 

*마지막 출력 부분인데, message.content 부분만 출력하도록 정의해 줍니다. (불필요한 내용은 출력되지 않도록)

print(response.choices[0].message.content)

 

콘솔창에 보시면 'decision'과 'reason'이 출력된 것을 볼 수 있습니다.

OpenAI API 사이트의 Playground에서 실행해 본 것을 Python에서 코드를 통해 그대로 구현된 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

이렇게 웹사이트가 아닌, 파이썬 프로그래밍으로 출력해 보는 것까지 확인했습니다.

 to be continue...

 

 

 

 

 

 

 

 

BR.h

 

 

 

 

728x90
반응형