STOCK/비트코인

업비트 API

BOTTLE6 2022. 1. 2. 16:37

파이스탁 내용 정리

 

■ 시세캔들 분봉 만들기 

(업비트 정보) https://docs.upbit.com/docs/upbit-quotation-restful-api

(분봉 정보 ) https://docs.upbit.com/reference/%EB%B6%84minute-%EC%BA%94%EB%93%A4-1

  ▷ (REST API) https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=1 

   - 함수 와 변수 로 구분해서 생각할 수 있음

   - 함수 부분 (https://api.upbit.com/v1/candles/minutes/1)

   - 변수 부분 (market=KRW-BTC&count=1

 

  ▷ (pyupbit 라이브러리 활용) 

      변수 : ticker, 시간단위, 개수 = 최대 200개

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

■ n분봉 만들기

import pandas as pd
def n분봉만들기(df, n=7):
    data = pd.DataFrame()
    data['open'] = df['open'].resample(f'{n}T').first()
    data['high'] = df['high'].resample(f'{n}T').max()
    data['low'] = df['low'].resample(f'{n}T').min()
    data['close'] = df['close'].resample(f'{n}T').last()
    data['volume'] = df['volume'].resample(f'{n}T').sum()
    return data
n분봉만들기(df, n=7)

 


■ 현재가정보

(업비트 정보) https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EB%82%B4%EC%97%AD

  ▷(REST API) https://api.upbit.com/v1/ticker?markets=KRW-BTC

[{"market":"KRW-BTC","trade_date":"20220102","trade_time":"041443","trade_date_kst":"20220102","trade_time_kst":"131443","trade_timestamp":1641096883000,"opening_price":57915000.0,"high_price":58069000.0,"low_price":57578000.0,"trade_price":57697000.0,"prev_closing_price":57915000.00000000,"change":"FALL","change_price":218000.00000000,"change_rate":0.0037641371,"signed_change_price":-218000.00000000,"signed_change_rate":-0.0037641371,"trade_volume":0.00025721,"acc_trade_price":28743913323.227420000,"acc_trade_price_24h":142371548931.12489000,"acc_trade_volume":497.77432741,"acc_trade_volume_24h":2470.24171054,"highest_52_week_price":82700000.00000000,"highest_52_week_date":"2021-11-09","lowest_52_week_price":31662000.00000000,"lowest_52_week_date":"2021-01-22","timestamp":1641096883620}]

 

  ▷(Pyupbit) 현재가 불러오기(REST-API의 trade price와 동일)

price = pyupbit.get_current_price("KRW-BTC")
print(price)

  ▷ (pyupbit) 여러종목 현재가 불러오기

 

tickers = ['KRW-BTC', 'KRW-XRP']
price = pyupbit.get_current_price(tickers)
print(price)

 

■ 업비트 내 모든 티커 불러오기

krw_tickers = pyupbit.get_tickers(fiat='KRW')
print(krw_tickers)

 

prices = pyupbit.get_current_price(krw_tickers)
for k, v in prices.items():
    print(k,v)

■ 업비트 내 호가 정보 

(업비트 정보) https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C

  - ASK : 매도호가 - 비싸게 팔려고 한다.

  - BID : 매수호가 - 싸게 사려고 한다.

    EX )   BID 3호가 < BID 2호가 < BID 1호가 < ASK 1호가 < ASK 2호가 < ASK 3호가

  - 최대 15호가 까지 제공을 함

  ▷ (REST API) https://api.upbit.com/v1/orderbook?markets=KRW-BTC 

[{"market":"KRW-BTC","timestamp":1641097422661,"total_ask_size":1.79803238,"total_bid_size":3.74009830,"orderbook_units":[{"ask_price":5.767E7,"bid_price":5.7655E7,"ask_size":0.03162361,"bid_size":0.01316051},{"ask_price":5.7673E7,"bid_price":5.7653E7,"ask_size":0.14067963,"bid_size":0.10654134},{"ask_price":5.7674E7,"bid_price":5.7652E7,"ask_size":0.43788055,"bid_size":0.21931114},{"ask_price":5.7677E7,"bid_price":5.7651E7,"ask_size":0.00346912,"bid_size":1.00267886},{"ask_price":5.7714E7,"bid_price":5.765E7,"ask_size":0.41413848,"bid_size":1.53317468},{"ask_price":5.7721E7,"bid_price":5.7649E7,"ask_size":0.0311411,"bid_size":0.03379174},{"ask_price":5.7727E7,"bid_price":5.7648E7,"ask_size":0.01221969,"bid_size":0.01083405},{"ask_price":5.7728E7,"bid_price":5.7647E7,"ask_size":0.29766039,"bid_size":0.0062842},{"ask_price":5.7731E7,"bid_price":5.7646E7,"ask_size":0.00055362,"bid_size":0.00993359},{"ask_price":5.7732E7,"bid_price":5.7645E7,"ask_size":0.1737,"bid_size":0.01541608},{"ask_price":5.7733E7,"bid_price":5.7643E7,"ask_size":0.24856332,"bid_size":0.058063},{"ask_price":5.7734E7,"bid_price":5.7642E7,"ask_size":0.00008661,"bid_size":0.02068669},{"ask_price":5.7737E7,"bid_price":5.7641E7,"ask_size":0.0000866,"bid_size":0.06079443},{"ask_price":5.7738E7,"bid_price":5.764E7,"ask_size":0.00614306,"bid_size":0.25772757},{"ask_price":5.7739E7,"bid_price":5.7639E7,"ask_size":0.0000866,"bid_size":0.39170042}]}]

  ▷ (pyupbit)

import pyupbit
import pprint

orderbooks = pyupbit.get_orderbook("KRW-BTC")
pprint.pprint(orderbooks)

제일 위가 1호가, 제일 아래는 15호가 

ask_price : 매도호가

ask_size : 매도호가 잔량

bid_price : 매수호가

bid_size : 매수호가 잔량

timestamp: 현재시간

total_ask_size : 전체 매도호가 잔량

total_bid_size : 전체 매수호가 잔량

 

import pyupbit
import pprint

orderbooks = pyupbit.get_orderbook("KRW-BTC", 'KRW-ADA')
orderbook = orderbooks[0] # KRW-BTC만 선택

total_ask_size = orderbook['total_ask_size'] # 전체 매도 호가
total_bid_size = orderbook['total_bid_size'] 

print("매도호가 총합:", total_ask_size)
print("매수호가 총합:", total_bid_size)


■ upbit 로그인

import pyupbit

# access, secret 불러오기
f = open("C:/****/upbit.txt")
lines = f.readlines()
access = lines[0].strip()
secret = lines[1].strip()
f.close()

upbit = pyupbit.Upbit(access, secret)
balance = upbit.get_balance("KRW")
print(balance)
upbit = pyupbit.Upbit(access, secret)
balances = upbit.get_balances()
print(balances)


■ 지정가 매수 주문

(업비트 ) https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0

#### 최소수량이 코인마다 지정되어 있음. 

 

# 지정가 주문
import pyupbit

upbit = pyupbit.Upbit(access, secret)
# 지정가 주문 : buy_limit_order(ticker, price, volume)
# 시장가 주문 : buy_market_order()
resp = upbit.buy_limit_order("KRW-XRP", 900, 100)
pprint.pprint(resp)

 

locked: 묶인 금액 , 구매금액 + 수수료fee (0.005%)

uuid : 주문의 고유 id > 주문 취소 시 필요

 


■ 지정가 매도 주문

# 지정가 매도 주문
import pyupbit

upbit = pyupbit.Upbit(access, secret)
# 지정가 주문 : sell_limit_order(ticker, price, volume)
# 시장가 주문 : sell_market_order()
resp = upbit.sell_limit_order("KRW-XRP", 900, 100)
pprint.pprint(resp)

 


■ 시장가 매수주문

 

# 시장가 매수
import pyupbit
import pprint

upbit = pyupbit.Upbit(access, secret)
resp = upbit.buy_market_order("KRW-XRP", "매수금액") # 매수금액은 fee제외
pprint.pprint(resp)

 

■ 시장가 매도주문

# 시장가 매도주문
import pyupbit
import pprint

upbit = pyupbit.Upbit(access, secret)
balance = upbit.get_balance("KRW-XRP") #잔고조회
resp = upbit.sell_market_order("KRW-XRP", balance)
pprint.pprint(resp)

■ 주문취소 (지정가 주문시)

#### 코인은 24시간이라서 장이 종료되면 자동으로 취소되는 것이 아니다.

 

"remaining_volume" : 100

"state" : "wait"

"uuid" : "~~~~~~~~~"

# 주문취소
import pyupbit

upbit = pyupbit.Upbit(access, secret)
# 지정가 주문 : buy_limit_order(ticker, price, volume)
#resp = upbit.buy_limit_order("KRW-XRP", 900, 100)
#uuid = resp[0]['uuid']
uuid = '43019e8c-7b3b-4c5a-9e61-7e0ed9b39b83'
resp = upbit.cancel_order(uuid=uuid)
print(resp)

 

 


■ REST-API를 라이브러리 없이 직접 불러오기