재테크

업비트 백테스트! 가격 차트 엑셀(CSV)로 다운로드 하는 방법 (API Key 발급 x)

진진파파 2024. 4. 22. 00:54

 

 

업비트로 이런저런 분석을 해보려고하다보니,

아무래도 코인의 과거 가격 정보를 저장하고 싶은 마음이 굴뚝같았다.

업비트 사이트 내에서는 간단하게 저장하는 방법도 없고...

노가다로 페이지를 긁어서 붙이기도 힘들고...

 

그래서 파이썬(Python)으로 간단하게 이 힘든일을 해결할 수 있는 방법을 찾았다.

업비트 API Key를 발급할 필요 없이 파이썬만 깔려 있으면 아주 쉽게 해결할 수 있는 방법이 있다.

 

파이썬 (Python) 설치

너무 당연하게도 파이썬은 설치해야 한다.

개발자가 아니라면 파이썬을 설치하는 것 부터 막막한 일이 아닐수 없다.

이번 포스팅에서는 파이썬 설치는 생략하려고 하지만, 

혹시나 필요하신 분은 조코딩의 파이썬 강좌를 추천드린다.

당연히 강좌를 다 들을 필요는 없고, 1-4강 파이썬 설치만 참조하시라.

그럼 기본적으로 파이썬 코드를 실행할 수 있는 환경을 만들 수 있다. (따라해보면 그닥 어렵지 않다!)

https://youtu.be/KL1MIuBfWe0?si=XW-hr_-GAT0XCVWC&t=610

파이썬 설치 1-4 강 (10:10 시작~)

 

업비트 라이브러리 설치

파이썬도 처음인데 라이브러리는 또 뭐냐?

겁먹지 마세요. 업비트에서 제공하는 여러 기능들을 파이썬에서 바로 사용할수 있도록 하기 위해서,

이 라이브러리라는 걸 설치해줘야 한다.

또한, 데이터 저장을 위해서  표 형태의 데이터프레임에 넣어서 쉽게 이용할 수 있게 해주는 라이브러리인 pandas도 설치해 줘야한다.

 

설치는 아주 매우 간단하다.

파이썬 내에 커맨트 입력창에서 아래와 같이 입력해주세요

pip install pyupbit
pip install pandas

그럼 텍스트들이 주루륵 내려가면서 알아서 설치가 될 것.

 

코드 작성

이 곳에서는  예의상? 약간의 코드 설명도 하겠다.

 

import


import
pyupbit
import pandas as pd

 

조금전에 설치한 라이브러리들을 이 코드에서 사용하겠다는 뜻.

 

 

데이터를 가져올 코인 설정


# 코인의 티커 설정
tickers = ['KRW-BTC', 'KRW-STX']  # 비트코인과 스택스

예제는 원화기준 비트코인과 스택스의 가격 정보를 가져오고자 한다.

필요에 따라서 작은 따옴표 안에 있는 코인 정보를 변경해주면 된다.

이를 테면 원화 기준 시바이누의 가격을 추가로 가져오고 싶으면 아래와 같이 입력하면 된다.

tickers = ['KRW-BTC', 'KRW-STX', 'KRW-SHIB']  # 비트코인과 스택스와 시바이누

코인별 심볼은 익숙하시리라 믿는다. 업비트에서 쉽게 확인할 수 있다.

 

 

데이터 프레임 생성 및 코인별 반


# 데이터를 저장할 빈 데이터프레임 생성
df_final = pd.DataFrame()

for ticker in tickers:

데이터를 저장할 빈 프레임과 각 코인별 반복을 위한 반복문

 

원하는 정보 입력


   
# 원하는 기간과 봉 길이 설정
    interval = 'day'  # 일봉 데이터를 가져옵니다.
    to = '2024-04-21'  # 데이터를 가져올 마지막 날짜
    count = 1000  # 가져올 데이터의 수

불러올 데이터의 구체적인 내용을 작성해준다.

먼저 interval 변수에 'day'를 입력했는데, 이는 가격 조회 간격을 일봉 기준으로 정보를 불러오겠다는 뜻이다.

만약 다른 봉 기준으로 정보를 불러오고 싶다면 day 대신 아래 텍스트를 넣으면 됩니다.

day = 일봉
minute1 = 1분봉
minute3 = 3분봉
minute5 = 5분봉
minute10 = 10분봉
minute15 = 15분봉
minute30 = 30분봉
minute60 = 60분봉
minute240 = 240분봉
week = 주봉
month = 월봉

 

또한 날짜는 불러오고자 하는 마지막 날짜를 의미하고,

count는 몇개의 데이터를 가져올 것인가를 의미한다. 

따라서 샘플 코드는 24년 4월 21일부터 1000개의 과거 데이터를 불러온다는 뜻이다.

 

데이터 요청


   
# 데이터 요청
    df = pyupbit.get_ohlcv(ticker=ticker, interval=interval, to=to, count=count)

위에 작성한 정보를 입력해서 실제 데이터를 불러오는 과정이다. 

불러들인 값이 df라는 공간에 저장되는 것인데 그 안에는 시가/종가/저가/고가/거래량 등의 정보를 모두 포함하고 있다.

 

데이터 정리


   
# 날짜 기준으로 오름차순 정렬
    df = df.sort_index()
   
    # 종가 데이터만 추출
    df_close = df['close'].rename(f'{ticker}_close')
   
    # 최종 데이터프레임에 종가 데이터 추가
    df_final = pd.concat([df_final, df_close], axis=1)

첫째 줄은

날짜 기준으로 오름차순으로 정렬해야 나중에 그래프 만들었을때 예뻐.. 그래서 하는거고,

 

두번째 줄은

아까 df 속에는 시가/종가/저가/고가/거래량 등의 정보가 모두 있다고 했죠? 그 중에서 '종가' 만 따로 저장하겠다는거고,

 

세 번째 줄은 최종 데이터 프레임에 방금 추출한 종가 데이터를 추가하는 작업입니다.

최종 데이터 프레임에는 처음에 설정한 여러 코인들의 종가 정보가 누적해서 저장되게 됩니다.

 

csv 저장

저장도 한 줄이면 끝이다.

필요에 따라 csv 파일의 이름을 정해주기만 하면 되고,

index라는건 날짜 정보를 날리지 않고 같이 저장하겠다는 뜻이다.


# CSV 파일로 저장
df_final.to_csv('coin_closing_prices.csv', index=True)

 

고작 30줄도 채 안되는 파이썬 코드로 우리는 필요한 업비트 가격 정보를 csv로 저장하는데 성공하였다.

저장된 파일은 엑셀로 열어볼수 있는데 다음과 같이 비트코인과 스택스의 가격정보가 저장되는 것을 확인할 수 있다.

첫줄에 나오는 가격은 1000일전 21년 7월 26일 종가. 가장 마지막 줄에는 24년 4월 20일 가격이 저장되어 있다.

(왜 21일이 아니지? 아마.. 21일은 아직 종가가 확정되지 않아서 인듯)

csv파일에 저장된 결과

 

재미삼아 그래프로 비트코인과 스택스의 가격 추이를 비교해봤다.

 

 

마치며...

파이썬을 조금 더 공부한다면 백테스트도 뚝딱 코드 상으로 할수 있겠지만.

우린 아니잖아요. 우린 엑셀은 할줄 알지만, 파이썬은 모르잖아요.

그냥 데이터불러오면 엑셀에서 화려하게 분석하실수 있잖아요.

암튼 어쨋든 대충 차트를 다운로드 받고 싶신 분은

아래 첨부한 전체 코드와 그 코드로 만든 샘플 csv파일을 참조하세요.

coin_closing_prices.csv
0.04MB
date_price_coin.py
0.00MB