본문 바로가기
프로젝트/코인 자동매매

파이썬 코인 자동매매 봇 만들기#11 - 빗썸 API 매수하기

by 큰공 2021. 10. 15.
728x90
반응형

들어가며

2021.08.19 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#1 - pybitumb 모듈 설치하기

2021.08.21 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#2 - 24시간 변동률 정렬하기

2021.08.24 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#3 - 급등주를 찾아라

2021.08.25 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#4 - 매수 / 매도 시뮬레이션

2021.08.30 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#5 - 시뮬레이션 첫 수익률은?

2021.09.05 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#6 - STOP LOSS 기능을 추가

2021.09.06 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#7 - NONE TYPE ERROR 수정

2021.09.08 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#8 - 빗썸 API 신청 및 잔고조회 하기

2021.09.10 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#9 - 매도 주문을 해보자

2021.10.12 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#10 - 웹소켓을 사용하여 급등주를 찾아보자

 

파이썬 코인 자동매매 봇 만들기#10 - 웹소켓을 사용하여 급등주를 찾아보자

들어가며 2021.08.19 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#1 - pybitumb 모듈 설치하기 2021.08.21 - [IT/파이썬] - 파이썬 코인 자동매매 봇 만들기#2 - 24시간 변동률 정렬하기 2021.08.24 - [IT/..

coinpipe.tistory.com

 

목표

 지난번 포스팅에서는 WebSocket API 를 사용하여 "실시간" 으로 급등주를 찾는 로직을 구현해보았습니다. 그럼 이제 "실시간" 으로 급등주를 찾고 자동으로 "매수" 해보도록 하겠습니다.

 

 

매수하기를 위해서

 우선 매수하기를 위해서는 아래와 같은 정보가 필요합니다.

 1) 원화 잔고 : 내가 원화로 얼마를 가지고 있는지?

 2) 종목 : 어떤 종목을 매수 할 것인지?

 3) 매수가격 (호가) : 종목을 얼마에 매수 할 것인지?

 4) 매수량 : 종목을 얼마나 매수 할 것인지?

 의 정보가 필요합니다. 각각을 구하는 로직을 파이썬 함수화 해서 하나씩 알려드리도록 하겠습니다.

 

 

원화 잔고

 원화 잔고는 간단하게, get_balance 함수를 통해서 원화 잔고를 확인할 수 있습니다.

 인자로는 종목이 들어가는데, 어떤 종목을 선택하더라도 원화 잔고가 동일하므로, BTC로 고정해줍니다.

 리턴되는 튜플에서 2번째 인자가 바로 원화 잔고 입니다.

 # 원화 잔고 얻기
def balance_won () :
    return bithumb.get_balance('BTC')[2]

현재 빗썸 홈페이지에서 저의 원화 잔고는 2,788원입니다.

API를 통해서 출력되는 원화 잔고는 2788.66412이네요. 홈페이지와 살짝 달리 소숫점 6자리까지 리턴해주네요.

 

종목

 앞선 게시물에서 급상승 종목을 받아왔는데, 그 급상승 종목이 "BTC_KRW" 의 _KRW이 붙는 종목으로 리턴됨을 확인할 수 있었습니다.

 매수시에는 뒤의 _KRW 가 필요없어서, 간단하게 split으로 잘라서 앞에 "BTC" 만 쓸 수 있도록 바꾸어야 합니다.

ticker = ticker.split('_')[0]

 

매수 가격

 급등주일 경우에 바로 시장가로 매수하게 될 경우 좀 높은 가격에서 매수하겠죠? 좀 더 낮은 가격에서 매수하고자 매도 호가를 구하고, 그 매도 호가 중에 어떤 것을 매수 할지에 대해서 정하도록 하겠습니다.

 

 누군가 매도할려고 내놓은 호가를 나열하고, 그중에 어떤 가격에 걸어 놓을지를 선택하는 것입니다.

 

 get_orderbook 함수를 이용하여, 해당 종목의 매도 호가  ['bids'] 중 두번째 호가 ([1]) 의 가격을 리턴하는 함수 입니다.

['bids'] 기본적으로 매도 호가 중 5개를 리턴합니다.

['asks'] 기본적으로 매수 호가 중 5개를 리턴합니다.

def buyPrice ( ticker ) :
    buy_price = pybithumb.get_orderbook(ticker)['bids'][1]['price']
    return buy_price

테스트를 위해서 아래와 같은 코드로 매수 호가 가격을 출력해 보겠습니다.

힙스라는 코인의 매수/매도 호가를 얻어 왔습니다.

print ( pybithumb.get_orderbook("HIBS")['asks'][4]['price'] )
print ( pybithumb.get_orderbook("HIBS")['asks'][3]['price'] )
print ( pybithumb.get_orderbook("HIBS")['asks'][2]['price'] )
print ( pybithumb.get_orderbook("HIBS")['asks'][1]['price'] )
print ( pybithumb.get_orderbook("HIBS")['asks'][0]['price'] )

print ( pybithumb.get_orderbook("HIBS")['bids'][0]['price'] )
print ( pybithumb.get_orderbook("HIBS")['bids'][1]['price'] )
print ( pybithumb.get_orderbook("HIBS")['bids'][2]['price'] )
print ( pybithumb.get_orderbook("HIBS")['bids'][3]['price'] )
print ( pybithumb.get_orderbook("HIBS")['bids'][4]['price'] )

왼쪽 파이썬 출력결과와, 오른쪽 빗썸 홈페이지에서 나오는 호가창과 동일한 모습을 볼 수 있습니다.

 

매수량

 다음은 매수량을 구하는 로직입니다.

 빗썸 API는 내가 100만원치 코인을 구매하고 싶을때, 원화 100만원 이라고 입력하는게 아니라, 해당 코인의 수량을 입력해야 매수가 이뤄집니다.

 

매수량  = 원화 잔고 (구매하고 싶은 원화) * ( 1 - 수수료 ) / 코인 가격 

 

빗썸의 수수료는 0.25% 인데, 딱 맞게 하면 반올림이 라던지 살짝 계산이 안맞아서 넉넉하게 0.3%로 잡고 매수량을 측정하였습니다.

 

# 매수 수량 정하기
def buyQuantity ( buy_price ) :
    buy_quantity = balance_won() *  0.9970 / buy_price     # 수수료 0.25% 계산
    buy_quantity = float ( "{:.4f}".format(buy_quantity) ) # 소수점 4자리 수 버림
    print ( balance_won(), buy_price, buy_quantity)
    return buy_quantity

 출력결과입니다. 내가 원화 잔고 2788원이있고, 매수가격이 4로 했을 경우, 매수 수량 ( 695개 )을 구해주게 됩니다.

 

코드와 실행

 # 원화 잔고 얻기
def balance_won() :
    return bithumb.get_balance('BTC')[2]

 # 매수 호가 정하기
def buyPrice ( ticker ) :
    buy_price = pybithumb.get_orderbook(ticker)['bids'][1]['price']
    return buy_price

# 매수 수량 정하기
def buyQuantity ( buy_price ) :
    buy_quantity = balance_won() *  0.9970 / buy_price     # 수수료 0.25% 계산
    buy_quantity = float ( "{:.4f}".format(buy_quantity) ) # 소수점 4자리 수 버림
    print ( balance_won(), buy_price, buy_quantity)
    return buy_quantity

 # 매수 로직
def buy ( ticker, price ) :
    ticker = ticker.split('_')[0]
    buy_price = buyPrice ( ticker )
    buy_quantity = buyQuantity ( buy_price )
    
    order = bithumb.buy_limit_order(ticker, buy_price, buy_quantity)
    print (current_time() , "원화잔고 :", balance_won(), ", 매수 종목 :", ticker, ", 매수 주문가 :" , buy_price , ", 매수 수량 :", buy_quantity)
    print (order)

 

 

2788원으로 HIBS코인 654.3418개를 호가 4.249 에 매수 주문을 넣은 내용입니다. 실질적으로 빗썸 홈페이지에서도 정상 매수 주문이 들어갔음을 확인 할 수 있습니다.

 

맺으며

 실시간 급등주를 찾아서, 해당 종목의 매도 호가 중 두번째 녀석으로 매수 시도를 한다.

 

728x90
반응형

댓글