본문 바로가기

Project

01-3. 비트코인 자동 매매 트레이딩 봇: API 데이터, 어떻게 사용 할까요?

반응형

01-3. 비트코인 자동 매매 트레이딩 봇 만들기

 

pyupbit 설치 및 사용 & API로 호출한 데이터 다루기

 

이번 포스팅에서는 pyupbit 라이브러리를 이용해서 데이터를 불러온 뒤, 필요한 데이터만 추출하고,

이것을 보기 쉬운 표(Table) 형태로 만들어 줄 계획입니다.

이 단계는 "프로그램 제작"의 관점에서 보면 크게 필요한 단계는 아니에요.

 

그러나 자동 매매 트레이딩 프로그램을 완성 한 이후에, 투자를 진행할 코인의 종류를 변경하거나
과거 데이터를 분석
해서 매매 전략 또는 조건 등을 변경하는 작업이 필요할 수 있습니다.
이때를 위한 준비 작업이므로, 1차적으로 트레이딩 봇을 완성하더라도
추후 본인만의 분석과 전략을 적용시켜 성공적인 투자에 도움이 되시길 바랍니다.

 

 

# 포스팅 내용

  • pyupbit 라이브러리 설치
  • pyupbit 라이브러리 사용
  • 데이터 프레임 만들기
  • 데이터 프레임 다루기

 

아나콘다(Anaconda)비주얼 스튜디오 코드(Visual Studio Code)가 필요하므로
아직 설치되어 있지 않다면, 아래 포스팅의 Step 1. 준비물에 있는 링크에서 다운로드설치 먼저 진행해주세요

# 준비물: 01-2. 비트코인 자동 매매 트레이딩 봇: 너무 쉬운 API, 이해하고 사용해요

 

01-2. 비트코인 자동 매매 트레이딩 봇: 너무 쉬운 API, 이해하고 사용해요

비트 코인 자동 매매 트레이딩 프로그램 만들기라니, 생에 첫 개인 프로젝트를 시작하면서 너무 어려운 걸 선택했나..라는 생각도 들었습니다. 그러나, 역시 집단 지성은 최고입니다. 온라인 상

zero-coding.tistory.com

 

 


 

Step 1. pyupbit 라이브러리 설치

설치 방법은 아래의 2가지로, 어떤 방법을 사용하여도 상관없습니다.

아나콘다 프롬프트(Anaconda Prompt) pip 명령어 입력

pyupbit는 아래 사진에서 처럼, 아나콘다 프롬프트에서 pip install pyupbit를 입력하시면 자동으로 설치됩니다.

pyupbit 라이브러리 설치가 완료되었으면, pip install pyjwt를 입력하여 pyjwt 모듈도 함께 설치해줍니다.

pyjwt는 로그인 시 인증을 위해 필요한 라이브러리입니다.

 

만약, 아나콘다가 설치되어 있지 않다면, 위에 있는 준비물 링크에서 다운로드하여 설치 진행하시면 됩니다.
아나콘다 프롬프트는 설치가 완료되면 시작 버튼 클릭 후, Anaconda 검색하시면 쉽게 찾을 수 있습니다.

 

아나콘다 다운로드 사이트 화면

 

 

pyupbit 설치 과정 (아나콘다 프롬프트 사용)

 

 

비주얼 스튜디오 코드(Visual Studio Code) pip 명령어 입력

아나콘다와 함께 비주얼 스튜디오 코드(VS 코드)가 설치되어 있다면,
VS 코드에서 터미널을 cmd로 변경 후 똑같이 pip install pyupbit를 입력하셔도 됩니다!

로그인에 필요한 pyjwt 설치를 위해 pip install pyjwt 명령어도 cmd 모드에서 입력해주세요. (그림에는 생략했습니다.)

pyupbit 설치 (VS 코드 사용)

 

 

# VS 코드의 터미널 변경 방법 (1)

VS 코드 우측 하단 드롭 박스 → New Command Prompt → 드롭 박스에서 cmd 선택

VS 코드의 cmd 터미널 변경 방법 (1)

 

 

# VS 코드의 터미널 변경 방법 (2) 

VS 코드 우측 하단 드롭 박스 → Select Default Profile → VS 코드 상단의 Command Prompt 선택

VS 코드의 cmd 터미널 변경 방법 (2)

 

 

 

Step 2. pyupbit 사용

로그인, 잔고 조회

설치한 pyupbit 라이브러리를 이용해서 로그인을 하고 개인 잔고를 조회하기 위해

깃허브의 pyupbit 매뉴얼에서 필요한 코드를 복사해서 가져옵니다.

이때, import pyupbit 명령어를 맨 위에 적어주어야 pyupbit 라이브러리 사용이 가능합니다.

 

# 추가로 import pandas as pd를 함께 입력하여 다음 단계를 미리 준비하시길 권장합니다.

# 판다스(pandas) 사용에 대한 내용은 Step. 3에서 자세히 다루어집니다.

 

코드의 access와 secret 부분"01-1. 비트코인 자동 매매 트레이딩 봇: API Key 발급 받기"에서 발급 후 저장해 놓은

본인만의 Access Key와 Secret Key를 입력합니다.

그리고 upbit = Upbit(access, secret)에는 Upbit(클래스 객체) 앞에 pyupbit. 을 적어주어야 합니다.

 

이 2가지를 제외하고는 선택사항이며, 각자의 취향에 따라 응용할 수도 있습니다.

저는 upbit 변수를 login으로 변경하고, 전체 잔고를 보기 쉽게 만들기 위해 데이터 프레임(DataFrame)을 사용했습니다.

 

pyupbit로 로그인 및 잔고 조회 하기

 

예상과 같이 깔끔하게 표 형태로 결과가 출력되었습니다! (뭘... 많이도 샀네요.. 하하하🤣)

각 필드 명에 대한 설명은 업비트 API 가이드에서 가져왔습니다.

 

필드 설명 타입
currency 화폐를 의미하는 영문 대문자 코드 String
balance 주문가능 금액/수량 NumberString
locked 주문 중 묶여있는 금액/수량 NumberString
avg_buy_price 매수평균가 NumberString
avg_buy_price_modified 매수평균가 수정 여부 Boolean
unit_currency 평단가 기준 화폐 String

 

 

pyupbit의 설치와 사용법의 자세한 가이드는 모두 깃허브에 공개되어 있으므로,

로그인과 잔고 조회 이외에도 필요한 기능에 대한 샘플 코드를 찾아 그대로 사용하면 됩니다.

pyupbit 라이브러리 가이드에서 필요한 정보를 찾기 힘든 경우, 업비트 API 가이드를 참고하시면 큰 문제없이

프로그램을 만들어 갈 수 있습니다.🤗

 

# pyupbit 사용 가이드

 

sharebook-kr/pyupbit

python wrapper for upbit API . Contribute to sharebook-kr/pyupbit development by creating an account on GitHub.

github.com

# 업비트 API 사용 가이드

 

업비트 개발자 센터

업비트 Open API 사용을 위한 개발 문서를 제공 합니다.업비트 Open API 사용하여 다양한 앱과 프로그램을 제작해보세요.

docs.upbit.com

 

 

 

Step 3. 데이터 정리 및 다루기

판다스(Pandas) 데이터 프레임(DataFrame) 만들기

파이썬에서는 데이터 분석에 특화된 라이브러리로써 "판다스(Pandas)"를 제공하고 있습니다.

기본적인 for 문 또는 if 문 등으로도 원하는 형태로 데이터 정리가 충분히 가능하지만,

판다스(Pandas)는 데이터 프레임(DataFrame)이라는 2차원 배열 즉, 행열로 이루어진 표(Table) 형태

만들고 다를 수 있으므로 이를 이용하는 방법이 훨씬 더 간단합니다.

 

먼저, 지난 포스팅인 "01-2. 비트코인 자동 매매 트레이딩 봇: 너무 쉬운 API, 이해하고 사용해요"에서 사용했던

마켓 코드 데이터를 불러오겠습니다.

# 여기까지는 01-2 포스팅 내용과 같으므로 자세한 내용은 위 링크를 참고해주세요

import requests

url = "https://api.upbit.com/v1/market/all"

coinname = requests.get(url)                        # api 데이터 호출
coinname = coinname.json()                          # coinname으로 가져온 json 데이터를 list로 저장

print(coinname)

 

이제, 이렇게 줄줄 나열되어 있는 데이터를 엑셀과 같은 표(Table) 형태로 나태 내기 위해

판다스(Pandas) 데이터 프레임(DataFrame)으로 만들어봅시다.

 

데이터 프레임을 만드는 명령어는 pandas.DataFrame( )이며, 괄호 안에는 사용할 데이터를 넣어줍니다.

판다스 사용 시 편의를 위해 약어로 pd를 사용하며, 위에서 coinname으로 저장해 놓은 데이터를 입력합니다.

import pandas as pd				# 판다스를 pd라는 이름으로 가져와요

coinname_df = pd.DataFrame(coinname)  		# coinname 데이터를 데이터프레임으로 만듦니다

print(coinname_df)

코인 목록 조회 결과 (1)

 

위 결과는 VS 코드에서 출력한 모습이며, 똑같은 코드주피터 노트북에서 실행시키면 아래와 같이 나옵니다.

(주피터 노트북에서는 print 명령어 생략 가능합니다.)

import pandas as pd							

coinname_df = pd.DataFrame(coinname)  

coinname_df

코인 목록 조회 결과 (2)

 

어때요, 훨씬 보기 좋죠?!

눈과 마음이 너무나도 편안해졌습니다.😄

코딩 작업은 VS 코드 또는 주피터 노트북, 어떠한 툴을 사용하여도 상관없습니다.

각자의 상황과 편의에 맞게 사용하시면 됩니다. 

(저는 주피터 노트북으로 테스트 작업하면서 마지막 완성된 코드를 VS 코드로 가져가 정리하는 편입니다.) 

 

 

필요한 데이터 추출하기

약 300개가 되는 마켓 코드가 있지만, 저는 원화 거래만 할 것이므로

market 필드에서 KRW로 시작하는 행들만 가져와서 좀 더 정리해 봅시다.

이를 위해 다음과 같이 입력합니다.

coinkrw_df = coinname_df.loc[coinname_df['market'].str.contains('KRW')]

coinkrw_df

원화 거래 가능 목록

# 참고

데이터가 많아서 생략되는 부분까지 모두 출력해서 보고 싶다면 .set_option( )을 지정할 수 있습니다.

None 자리에 숫자(개수)를 넣으면 지정한 개수만큼의 행 또는 열을 출력합니다.

  • 모든 행(row) 출력: pd.set_option('display.max_rows', None)
  • 모든 열(column) 출력: pd.set_option('display.max_columns', None)

 

 

처음 약 300개의 데이터에서 원화 거래만 가능한 117개의 코인 목록으로 줄어들었습니다. 😊

 

market 필드의 KRW로 시작하는 마켓 코드를 티커(ticker)라고 합니다

각 코인의 티커를 사용해서 해당 코인의 정보(시세, 호가, 거래량 등)를 가져오거나 매수, 매도 주문이 이루어집니다.

따라서 앞으로 거래하고자 하는 코인의 티커(ticker)를 117개의 목록에서 찾아야 합니다.

 

어떻게 찾으면 될까요?

하나씩 읽으며 눈으로 찾기? 엑셀로 가져가서 필터링하기?

사실 어떠한 방법을 사용하여도 무관합니다. 본인에게 가장 편한 방법이 최고라고 생각합니다. 👍

 

만사 귀차니즘은 저는, 제가 익숙한 한글 이름으로 검색하면 그 결과가 짠! 하고 나왔으면 좋겠습니다.

이를 위해, korean_name 필드에 있는 코인 이름으로 필터링하기 위한 코드를 적으면 다음과 같습니다.

coinname_full = '폴카닷'				# 찾고 싶은 코인 이름(한글) 전체 

coinkrw_df.loc[coinkrw_df['korean_name'] == coinname_full]

특정 코인 찾기 (1)

 

잘 나오는군요! 뿌듯합니다. 🙃

그런데 만약, 정확한 코인의 이름을 까먹었다! 혹은 특정 단어를 포함한 모든 코인을 찾고 싶다!라고 한다면

이렇게 적으시면 됩니다.

coinname_part = '비트'                   	# 찾고 싶은 코인 이름(한글) 일부

coinkrw_df.loc[coinkrw_df['korean_name'].str.contains(coinname_part)]

특정 코인 찾기 (2)

 

한 단계 더 나아가, 특정 코인에 대한 전체 행(row) 데이터가 아닌

오직 market 필드에 있는 티커(ticker)만 가져오고 싶다인덱스(index)를 사용합니다.

(표에서 맨 앞의 숫자가 index입니다.)

coinkrw_df['market'][95]

특정 코인 찾기 (3)

 

 

데이터로 그래프 그리기

데이터를 다루는 방법에는 표 이외에, 숫자를 그래프로 표현하는 방법이 있습니다.

그래프를 그리는 방법은 따로 포스팅해 놓았으므로, 아래 링크를 참고해 주세요.

# [파이썬] Pandas, Matplotlib 그래프(line, bar) 그리기_01

 

[파이썬] Pandas, Matplotlib 그래프(line, bar) 그리기_01

Pandas, Matplotlib 그래프 그리기_01 판다스(Pandas)는 파이썬에서 제공하는 데이터 분석을 위한 라이브러리이고, 매트플롯(Matplotlib)은 데이터 시각화를 위한 파이썬 라이브러리입니다. 이러한 라이브

zero-coding.tistory.com

 


 

여기까지, 데이터를 다루기 위한 기본적인 방법을 알아보았습니다.

이렇게 찾은 티커(ticker)로 투자를 진행할 코인의 차트 데이터를 불러오고,

불러온 데이터를 정리하고 필터링함으로써 나름의 데이터 분석 준비합니다.

그리고 최종적으로는 데이터 분석의 결과를 바탕으로 전략을 짜고 매수 및 매도를 진행하게 됩니다.

 

 

# 다음 포스팅에서는

  • 본격적으로 실제 자동 매매 트레이딩을 위한 코드를 살펴보겠습니다.
  • 전체적인 코드는 유튜버 조코딩님께서 깃허브에 올려놓으신 자료를 참고할 예정입니다. 🧐
  • 전체 코드를 살펴보고, 어떤 부분을 어떻게 수정해서 사용하면 좋을지 생각해 보겠습니다. 🙄

 

감사합니다. 바이 바이~🤗

 

 

 

# 참고 자료 링크

 

 

반응형