첫번째 글입니다. 이번 시간에는 파이썬을 통해 업비트(Upbit) 거래대금 상위 n개 실시간 조회 코딩을 다루겠습니다.
1. 업비트 KRW 시장 Ticker 조회
import pyupbit
krw_list =pyupbit.get_tickers(fiat='KRW') #fiat을 krw로 설정
print(krw_list) #결과
pyupbit를 import 한 후, flat을 KRW시장으로 설정하여 값을 받았습니다.
여기서 fiat은 KRW/BTC/USDT 총 3개의 시장을 선택하여 Ticker 조회 가능합니다.
ex) btc_market = pyupbit.get_tickers(fiat='BTC')
usdt_market = pyupbit.get_tickers(fiat='USDT')
#결과(1)
['KRW-BTC', 'KRW-ETH', 'KRW-NEO', 'KRW-MTL', 'KRW-LTC', 'KRW-XRP', 'KRW-ETC', 'KRW-OMG', 'KRW-SNT', 'KRW-WAVES', 'KRW-XEM', 'KRW-QTUM', 'KRW-LSK', 'KRW-STEEM', 'KRW-XLM', 'KRW-ARDR', 'KRW-ARK', 'KRW-STORJ', 'KRW-GRS', 'KRW-REP', 'KRW-ADA', 'KRW-SBD', 'KRW-POWR', 'KRW-BTG', 'KRW-ICX', 'KRW-EOS', 'KRW-TRX', 'KRW-SC', 'KRW-ONT', 'KRW-ZIL', 'KRW-POLY', 'KRW-ZRX', 'KRW-LOOM', 'KRW-BCH', 'KRW-BAT', 'KRW-IOST', 'KRW-RFR', 'KRW-CVC', 'KRW-IQ', 'KRW-IOTA', 'KRW-MFT', 'KRW-ONG', 'KRW-GAS', 'KRW-UPP', 'KRW-ELF', 'KRW-KNC', 'KRW-BSV', 'KRW-THETA', 'KRW-QKC', ...]
2. 특정 Ticker의 현재가 정보 조회
import requests
url = "https://api.upbit.com/v1/ticker?markets=KRW-BTC"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.text) #결과
위의 코드는 Upbit로 HTTP 요청을 보내는 requests 모듈을 사용하여 특정 Ticker의 정보 조회를 하는 코드입니다.
여기서 KRW-BTC 대신 원하는 "시장-Ticker"로 설정할수 있습니다.
ex) url = "https://api.upbit.com/v1/ticker?markets=KRW-ETH"
-> KRW 시장의 이더리움(ETH) 코인의 현재가 정보 조회
url = "https://api.upbit.com/v1/ticker?markets=KRW-DOGE
-> KRW 시장의 도지(DOGE)코인의 현재가 정보 조회
위와 같이 url의 주소를 원하는 ticker로 바꾼 후 header정보를 추가하여 response로 받아들입니다.
print() 하면 아래와 같은 문자열 형식의 json이 출력됩니다.
#결과(2)
[{"market":"KRW-BTC","trade_date":"20220515","trade_time":"094959","trade_date_kst":"20220515","trade_time_kst":"184959","trade_timestamp":1652608199000,"opening_price":39967000.0000,"high_price":40102000.0000,"low_price":39270000.0000,"trade_price":39549000.0000,"prev_closing_price":39967000.00000000,"change":"FALL","change_price":418000.00000000,"change_rate":0.0104586284,"signed_change_price":-418000.00000000,"signed_change_rate":-0.0104586284,"trade_volume":0.00015264,"acc_trade_price":61411438129.944490000000,"acc_trade_price_24h":179085857506.84632000,"acc_trade_volume":1551.04504916,"acc_trade_volume_24h":4554.99685159,"highest_52_week_price":82700000.00000000,"highest_52_week_date":"2021-11-09","lowest_52_week_price":33900000.00000000,"lowest_52_week_date":"2021-06-22","timestamp":1652608199767}]
이번시간에는 결과(2) 코드 중, 24시간 누적 거래 대금인 acc_trade_volume_24h 를 사용할 예정입니다.
3. 업비트 거래대금 상위 n개 list로 받기
import pyupbit
import time
import requests
import json
import pandas as pd
def top10_market(market,num): #market:'KRW' or 'BTC' or 'USDT', num:상위 num 개
name_list = []
volume_list = []
top_list = []
krw_list =pyupbit.get_tickers(fiat=market)
for krw in krw_list:
time.sleep(0.05)
url = "https://api.upbit.com/v1/ticker?markets=" + krw #원하는 시장 ticker의 url 만들기
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
js_1 = json.loads(response.text) #json.loads 함수를 사용하여, json (문자열) > 파이썬의 사전 (Dictionary)
js_2 = js_1[0] # js_1의 경우 list로 둘러싸여 있는 사전 형태, index값인 0을 사용하여 list 벗겨내기
name = js_2['market']
volume_24h = js_2['acc_trade_price_24h']
name_list.append(name) #coin name 리스트로 append
volume_list.append(volume_24h) #거래대금 리스트로 append
df = pd.DataFrame({'name' : name_list, '24h_volume' : volume_list}) #df 만들기
new_df = df.sort_values('24h_volume', ascending=False) # 만든 df를 24h_volume 내림순으로 정렬하여 새로운 df만들기
for i in range(num):
top_list.append(new_df.iloc[i,0]) #상위 num 개 리스트로 append
return top_list
print(top10_market('KRW',10)) #결과
함수에 시장종류와 상위 N개를 매개변수(arguments)로 설정하여 만들었습니다.
조건문을 사용하여 1번과 2번의 예문을 이용하여 url을 만들었고, 만들어진 문자열 형식의 json을 관리하기 편하도록 json.loads 함수를 사용하여 파이썬의 사전(Dictionary) 형식으로 만들었습니다.
이후 코인이름과 24시간 누적 거래대금만 꺼내어 dataframe으로 가공한 후, 누적 거래대금 순서로 내림차순(ascending=False)으로 정렬하고 마지막으로 num개 만큼 for문을 돌려 상위 N개이 코인 명을 list로 받아들었습니다.
위의 코드를 돌리면 아래와 같은 결과로 나오게 됩니다. (2022.05.15 기준)
#결과(3)
['KRW-MANA', 'KRW-SAND', 'KRW-XRP', 'KRW-BTC', 'KRW-GMT', 'KRW-NEAR', 'KRW-ETH', 'KRW-WAVES', 'KRW-MTL', 'KRW-STRAX']
질문은 댓글 남겨주시면 되겠습니다!
'Python-Autotrade (Upbit)' 카테고리의 다른 글
파이썬(Python)-업비트(Upbit) Schedule를 이용한 특정 시간마다 업비트 거래대금 상위 n개 추출 (0) | 2022.06.26 |
---|---|
파이썬(Python) - 업비트(Upbit) 이동평균선 구하기 (0) | 2022.05.25 |