프로젝트/비트코인 자동매매

지정가 매수 로직 - 파이썬 업비트 비트코인 자동매매

Tech&Fin 2021. 7. 15. 11:40
반응형

지난 포스트에서 다루었던 시장가 매수는 거래는 대부분 바로 체결이 되지만 형성된 호가에 따라 다소 시가보다 비싼 가격으로 매수가 되는 경우가 생길 수 있는데요.

 

만약 특정 가격에 도달한 경우 매수하기를 원한다면 시장가 매수가 아닌 지정가 매수를 이용해야 합니다. 이번 시간에는 가격을 지정하여 매수하는 지정가 매수에 대해서 살펴 보도록 하겠습니다.

 

시장가 매수 로직은 아래 포스트를 통해 확인하실 수 있습니다.

 

2021.06.09 - [프로젝트/비트코인 자동매매] - 파이썬 업비트 비트코인 자동매매 - 시장가 매수 로직

 

파이썬 업비트 비트코인 자동매매 - 시장가 매수 로직

지난 시간에 공통적인 모듈을 이용해서 전체적인 프로젝트 구조를 만드는 방법에 대해서 살펴 보았는데요. 앞으로 공통 모듈에 여러가지 기능들을 심어갈 예정입니다. 이번 시간에는 시장가 매

technfin.tistory.com

 

 

목차 - 클릭하면 이동합니다.

     

    지정가 매수

    지정가 매수는 가격을 정하여 매수하는 방식으로 목표한 가격에 매수를 걸어두면 해당 가격 도달 시 매수가 순차적으로 처리되는 방식 입니다.


    다만 해당 가격에 도달한다 하더라도 무조건 매수가 되는 것은 아니고 이미 같은 가격에 다른 사람이 먼저 매수를 걸어 두었다면 이전에 걸려 있는 수량이 모두 체결된 후에 우리가 걸어둔 수량이 체결되기 시작합니다. 


    시장가 매수는 현재 형성된 시세에 따라 매수 가격이 달라지기 때문에 원하는 목표가격이 정해져 있다면 지정가 매수를 이용하는 것이 좋습니다.

     

    다만 지정가 매수의 경우에는 해당 가격에 도달하지 않거나 도달하더라도 먼저 걸려 있는 수량이 있는 경우 거래가 바로 체결되지 않기 때문에 거래가 바로 체결 되어야 하는 로직에서는 시장가 매수 로직이 더 적절합니다. 

     

    지정가 매수 로직

    # -----------------------------------------------------------------------------
    # - Name : buycoin_tg
    # - Desc : 지정가 매수
    # - Input
    #   1) target_item : 대상종목
    #   2) buy_amount : 매수금액
    #   3) buy_price : 매수가격
    # - Output
    #   1) rtn_data : 매수요청결과
    # -----------------------------------------------------------------------------
    def buycoin_tg(target_item, buy_amount, buy_price):
        try:
    
            # 매수수량 계산
            vol = Decimal(str(buy_amount)) / Decimal(str(buy_price))
    
            query = {
                'market': target_item,
                'side': 'bid',
                'volume': vol,
                'price': buy_price,
                'ord_type': 'limit',
            }
    
            query_string = urlencode(query).encode()
    
            m = hashlib.sha512()
            m.update(query_string)
            query_hash = m.hexdigest()
    
            payload = {
                'access_key': access_key,
                'nonce': str(uuid.uuid4()),
                'query_hash': query_hash,
                'query_hash_alg': 'SHA512',
            }
    
            jwt_token = jwt.encode(payload, secret_key)
            authorize_token = 'Bearer {}'.format(jwt_token)
            headers = {"Authorization": authorize_token}
    
            res = send_request("POST", server_url + "/v1/orders", query, headers)
            rtn_data = res.json()
    
            logging.info("")
            logging.info("----------------------------------------------")
            logging.info("지정가 매수요청 완료!")
            logging.info(rtn_data)
            logging.info("----------------------------------------------")
    
            return rtn_data
    
        # ----------------------------------------
        # Exception Raise
        # ----------------------------------------
        except Exception:
            raise

     

    입력 변수

    ① target_item : 대상 종목
    ② buy_amount : 매수 금액
    ③ buy_price : 매수 가격(지정한 가격)

     

    도지 코인을 200원에 100만원 매수하려고 한다면 아래와 같이 호출하면 됩니다.

    호출 예시 : buycoin_tg('KRW-DOGE', 1000000, 200)

     

    실행 결과

    ①번과 같이 호출하면 지정가 매수가 실행되게 됩니다.

     

    ②번은 지정가 매수 요청 전 미체결 주문을 조회한 것이며 미체결 주문 내역이 없는 것을 확인할 수 있습니다.

     

    지정가 매수 호출 후 받은 결과를 ③번에서 보여주고 있으며 그 이후 미체결 주문 내역을 조회하니 ④와 같이 지정가 매수 요청한 내역이 나오는 것을 확인할 수 있습니다.

     

    활용 방법

    가끔 업비트에 거래되는 모든 종목을 매수하는 올라운드 매수법을 사용하는 분들이 계신데요. 이 때 종목을 하나씩 매수하면서 시장가로 매수하게 되면 전 종목이 바로 매수 체결은 되겠지만 다소 비싸게 매수할 수도 있습니다.

     

    이런 경우 지정가 매도를 사용하여 현재 시장가의 1% 아래 가격에 걸어둔다면 시장가보다 조금 낮은 가격에 매수할 수 있어 이런 경우 지정가 매도를 활용하실 수 있을 것 같습니다.

     

    궁금한 사항은 댓글로 부탁 드리겠습니다.

    반응형