호돌찌의 AI 연구소
article thumbnail

지난번에 발급받은 API Key를 바탕으로 특정 코인을 매수/매도를 해보겠습니다. 

 

2022.06.12 - [Programming/Crypto] - [Basic] Upbit API Key 발급하기

2022.06.12 - [Programming/Crypto] - [Basic] pyupbit 활용 - 코인 정보 및 현재가/매수/매도 호가 가져오기

 

 

- Reference : 

https://github.com/sharebook-kr/pyupbit 

 

 

API Key 불러오기


이 글에서 API Key를 pickle로 저장을 했었습니다. 저장한 Key를 불러보면 다음과 같이 부를 수 있습니다. 

 

import pickle
import pyupbit

with open('./keypair/upbit_secret_key.pkl', 'rb') as k:
    secret_key = pickle.load(k)
    
upbit = pyupbit.Upbit(secret_key['access key'], secret_key['secret key'])

 

Upbit Class에 key들의 정보를 담은 값들을 지정합니다. 이후에 이를 바탕으로 잔고 조회나 주문이 가능합니다. 

 

 

시장가로 매수해보기 


buy_market_order() method를 활용하면 시장가로 바로 체결이 됩니다. 10000원만큼의 비트코인을 시장가로 매수한다는 뜻입니다. 

 

print(upbit.buy_market_order("KRW-BTC", 10000))

print('BUY!!!!')

 

 

시장가로 매도해보기 


매도를 하기 위해서는 얼마만큼 배도를 할 지, 매수한 코인의 보유 수량을 알아야 합니다. 보유한 수량을 알기 위해서는 아래와 같은 method를 활용합니다. 

print(upbit.get_balance("KRW-BTC")) # arguments = ticker

 

그 후, sell_market_order() method를 활용하면 시장가로 바로 체결이 됩니다. 만약에 분할매도를 하고 싶다면 btc_balance값을 원하는 횟수만큼 나누면 됩니다. 

 

btc_balance = upbit.get_balance("KRW-BTC") # 해당 티커 보유수량을 할당
print(upbit.sell_market_order("KRW-BTC", btc_balance))

print('sell!!!!')

 

 

성공적으로 매도된 것을 알 수 있습니다.  

 

 

지정가로 매수해보기 


사용하는 원리는 시장가와 상당히 비슷하지만, 지정가로 매수/매도하기 위해서는 기준이 되는 가격이 필요합니다. 아래코드는 현재 금액을 부르고, 2% 싼 가격에 매수 주문을 넣는다는 뜻입니다. 

# 현재 금액
btc_now_price = pyupbit.get_current_price("KRW-BTC") 

# 매수하고 싶은 금액
buy_amount = 10000 

# ticker, 타점, 수량(매수하고 싶은 금액/현재가)
upbit.buy_limit_order("KRW-BTC", btc_now_price * 0.98, buy_amount/btc_now_price)

 

글을 쓰는 시점에서 비트코인 가격이 27,750,000원인데 2%싼 가격에 주문이 들어간 것을 알 수 있습니다. 

 

매도는 마찬가지로 buy_limit_order() 대신 sell_limit_order()를 이용하면 됩니다.

 

 

미체결 주문 조회 및 취소


현재 주문이 들어간 것에 대한 정보는 get_order() 를 이용합니다. 

upbit.get_order("KRW-BTC")

 

Run 하면 미체결된 주문 id와 각종 정보(가격, ticker, 수량 등)가 있음을 알 수 있습니다. 비트코인을 0.00036036개만큼 현재가보다 2% 싸게 주문을 넣었다는 뜻입니다. 

 

 

취소를 하기 위해서는 id가 필요합니다. 그래서 다음과 같이 수행합니다. 주문한 코인이 1개뿐이라서 index를 지정하였습니다. 추후에 전체 취소하려면 나중에 주문한 것만큼 loop를 돌며 취소하면 될 것 같습니다. 

order = upbit.get_order("KRW-BTC")
order[0]['uuid']
upbit.cancel_order(order[0]['uuid'])

취소가 정상처리되면 dictionary가 반환된다.

 

 

미체결된 주문이 사라진 것을 알 수 있습니다.

 

 

다음 글에서는 차트 데이터에 대해 살펴보겠습니다. 

 


아래는 블로그 주인장의 토스 익명 후원 링크입니다. 글이 도움되거나 흡족스러웠다면 후원해주시면 감사하겠습니다.

https://toss.me/hotorch

 

hotorch님에게 보내주세요

토스아이디로 안전하게 익명 송금하세요.

toss.me

 

 

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!