[kr-dev] 업빗에서 시계열 차트 정보 받아서 가공하기 (python)

in #kr7 years ago (edited)

이제 명실공히 제1의 국내 가상화폐 거래소인 업빗(Upbit)은 아쉽게도 API서비스를 제공하고 있지 않습니다.

그리고, 몰려드는 고객들의 응대와 신규 코인 개설 및 서버 운영 등으로 인해 당분간 API가 공개될 것 같지도 않구요.

하지만 업빗 거래소 자체적으로는 브라우저에 보이는 많은 정보들을 API 형태로 호출해서 사용하고 있으며, 별다른 노력을 들이지 않고도 브라우저창에 몇 가지 형태의 URL만 입력하며 일반 사용자들도 해당 정보를 볼 수 있는 구조입니다.

일전에 이와 관련하여 간단히 포스팅을 한 적이 있는데 단순히 브라우저로 데이터를 확인하는데 그치는 것이 아니라, python 프로그래밍을 통해 그 데이터를 변수로 받아서 table 형태로 만들어 보도록 하겠습니다.

업빗 사이트에서 차트의 데이터를 확인할 수 있는 url은 다음과 같습니다.

https://crix-api.upbit.com/v1/crix/candles/minutes/240?code=CRIX.UPBIT.KRW-BTC&count=200&ciqrandom=1509540252193

출력되는 데이터 형식은 다음과 같구요.

[{"code":"CRIX.UPBIT.KRW-BTC","candleDateTime":"2017-11-29T08:00:00+00:00","candleDateTimeKst":"2017-11-29T17:00:00+09:00","openingPrice":12984000.00000000,"highPrice":13049000.00000000,"lowPrice":12650000.00000000,"tradePrice":12906000.0,"candleAccTradeVolume":2304.40360409,"candleAccTradePrice":29672880650.53673000,"timestamp":1511950491189,"unit":240}, ... ]

이 데이터를 아래와 같은 파이썬의 라이브러리들을 활용하여 다운로드 받은 후 데이터 분석을 위해 별도의 변수에 저장해 보겠습니다.

  • 웹 라이브러리 request로 웹데이터 다운로드
  • 데이터 분석 라이브러리 pandas를 이용해서 다운로드 받은 데이터를 테이블 형 변수(Dataframe)에 저장
# 사용할 라이브러리를 불러옵니다.
import requests
import pandas as pd

# 차트 정보를 받아오는 url을 다른 코인 또는 다른 기간으로 호출하기 편하게 format스트링 구조로 만듭니다.
term = 'minutes'
interval = '240'
coin = 'XRP'
count = '200'
url = "https://crix-api.upbit.com/v1/crix/candles/{term}/{interval}?code=CRIX.UPBIT.KRW-{coin}&count={count}".format( term = term, interval = interval, coin = coin, count = count)

# 웹 라이브러리를 이용하여 차트 정보를 다운로드 합니다.
c = requests.get(url).json()

# 다운로드 한 정보를 데이터 분석용 변수에 넣기 위해 정리합니다.
chart = []
for item in c:
    code = item['code']
    code2 = code.replace("CRIX.UPBIT.KRW-", "")
    open = item['openingPrice']
    high = item['highPrice']
    low = item['lowPrice']    
    close = item['tradePrice']
    kst = item['candleDateTimeKst']
    
    if 'KRW' in code:  
        print (code2, open, high, low, close, kst)
        chart.append([code2, open, high, low, close, kst])

# pandas의 Dataframe 자료형에 다운로드하여 정리한 데이터를 입력합니다.
columns = ['coin','open','high','low','close','kst']
df = pd.DataFrame.from_records(chart, columns = columns)
df.index = pd.DatetimeIndex(df.kst)



여기가지 진행하시면 다음과 같은 형태로 테이블화 되어 있으며, 데이터 분석 라이브러리를 활용하여 차트를 그려보는 등 다양한 분석을 해볼 수 있습니다.

참고로 pandas 라이브러리는 파이썬 언어를 배우는 만큼 굉장히 공부할 부분이 많기 때문에, 처음부터 모두 공부하기보다는 자신이 필요한 함수나 패턴을 하나씩 찾아서 사용해 보시는게 좋을 것 같습니다.

pandas의 메뉴얼은 아래 링크를 참조해 주세요.
pandas: powerful Python data analysis toolkit - PyData

오늘은 파이썬의 장점인 웹 스크래핑과 데이터 분석의 가장 기초가 되는 내용을 다루었습니다.

프로그래밍으로 매매를 위한 정보 분석이나 트레이딩을 해보고 싶으신 분은 함께 공부해 가면서 의견도 나누면 좋겠습니다. ^^


※ 파이썬을 이용한 투자 포스팅은 #kr-systemtrading에서 보실 수 있습니다.

Sort:  

참 이런거 하시는분들 대단하게 보이네요.

프로그래밍 알아두면 굉장히 편리하겠네요.. 좋은 정보 감사합니다

간단한 프로그래밍은 전문가가 아니더라도 충분히 할 수 있을 만큼 진입 장벽이 많이 낮아졌어요 ^^

프로그래밍...아...이런게 있구나 이렇게 하면 되는구나 머리로 읽고 행동은 못하고 있는 1인 댓글 남기고 갑니다^^

읽어주셔서 감사합니다. ^^

깔끔하군요. 만들 때 다시 보면서 해봐야겠네요. 감사합니다.

감사합니다 ^^

차근차근 따라해보겠습니다.

궁금하거나 물어볼거 있으시면 언제든 말씀하세요. 저도 공부하는 차원에서 포스팅하는 거거든요 ^^

좋은 정보 감사합니다.
즐겨 보고 있습니다.

좋은정보 감사합니다~
follow합니다!

안녕하세요 올려주신 소스를 cmd에서 파이썬으로 구동해봤는데 되긴 됩니다만.. 2번에 한번꼴로 requests.get (url).json () 이부분에서 에러가 있다고 나옵니다. 공식 api가 아니라서 그런가는 잘 모르겠습니다..
지금 모바일이라 에러코드는 잘 기억이 안나는데 no json recoded?? 이 비슷한 에러였던 것 같습니다.해결방법좀 알 수 있을까요 ㅠㅠ

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.028
BTC 60569.12
ETH 2442.20
USDT 1.00
SBD 2.52