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

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

Tech&Fin 2021. 6. 9. 23:25
반응형

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

 

이번 시간에는 시장가 매수 로직을 공통 모듈에 작성해 보도록 하겠습니다.

 

프로젝트 구조를 만드는 과정은 아래 포스트에서 확인하실 수 있습니다.

 

2021.06.06 - [프로젝트/비트코인 자동매매] - 비트코인 자동매매 - 프로젝트 구조 만들기

 

비트코인 자동매매 - 프로젝트 구조 만들기

이번 시간에는 본격적으로 로직을 만들고 살을 붙이기 전에 프로젝트 구조를 만들어 보도록 하겠습니다. 비트코인 자동매매 프로그램을 만드는 것이 얼마나 간단한지는 아래 포

technfin.tistory.com

 

 

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

     

    시장가 매수

    매수의 방법에는 크게 지정가 매수와 시장가 매수 방법이 있는데요. 지정가 매수는 지정한 금액에 원하는 수량을 구매하는 방법인데 지정한 금액에 매도하는 사람이 없는 경우 거래가 체결되지 않습니다.

     

    그렇기 때문에 지금 당장 거래를 일으켜야 하는 경우에는 시장가 매수를 사용하게 됩니다. 시장가 매수는 금액을 정하지 않고 현재 시장에 형성된 호가에 원하는 금액만큼 매수를 하는 방법입니다.

     

    지정가 매수보다 빠르게 거래를 체결시킬 수 있지만 매도 호가가 높은 경우에는 비싼 가격에 매수가 될 수 있는 단점이 있기 때문에 상황에 맞게 적절하게 사용해야 합니다.

     

    업비트 API KEY 발급받기

    이번 시간부터는 개인 계좌에 연관된 API를 사용하기 때문에 먼저 업비트 API KEY를 발급 받아야 합니다. 아래 포스트를 참고하여 업비트 API KEY를 발급 받을 수 있습니다.

     

    2021.06.09 - [프로젝트/비트코인 자동매매] - 업비트 자동매매 API KEY 발급받기

     

    업비트 자동매매 API KEY 발급받기

    이번 시간에는 업비트를 이용하여 코인 자동매매를 하기 위해 API KEY를 발급받는 방법에 대해서 살펴 보겠습니다. 앞으로 진행할 비트코인 자동매매 프로그램 관련에 대해서는 아래 포스트에서

    technfin.tistory.com

     

    시장가 매수 로직

    시장가 매수 로직은 공통으로 여러 곳에서 사용할 수 있기 때문에 공통 모듈에 작성하는 것이 좋을 것 같습니다.

     

    import time
    import logging
    import requests
    import jwt
    import uuid
    import hashlib
    
    from urllib.parse import urlencode
    from decimal import Decimal
    
    # Keys
    access_key = '업비트에서 발급받은 Access Key'
    secret_key = '업비트에서 발급받은 Secret Key'
    server_url = 'https://api.upbit.com'

    먼저 발급받은 Access Key와 Secret Key를 전역 변수로 선언하고 로직에 필요한 패키지를 import 합니다.

     

    # -----------------------------------------------------------------------------
    # - Name : buycoin_mp
    # - Desc : 시장가 매수
    # - Input
    #   1) target_item : 대상종목
    #   2) buy_amount : 매수금액
    # - Output
    #   1) rtn_data : 매수결과
    # -----------------------------------------------------------------------------
    def buycoin_mp(target_item, buy_amount):
        try:
    
            query = {
                'market': target_item,
                'side': 'bid',
                'price': buy_amount,
                'ord_type': 'price',
            }
    
            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

    위의 두 가지 정보를 변수로 시장가 매수 로직을 호출하면 매수가 체결 됩니다.

     

    ① 매수 대상 종목

    ② 매수 금액

     

    import sys
    import logging
    import traceback
    import time
    
    from module import upbit
    
    # -----------------------------------------------------------------------------
    # - Name : main
    # - Desc : 메인
    # -----------------------------------------------------------------------------
    if __name__ == '__main__':
    
      # 10만원 매수
      upbit.buycoin_mp(item_code, '100000')

    시장가 매수를 해야하는 부분에서 위와 같이 공통 모듈을 호출하면 됩니다.

     

    다음 시간에는 시장가 매도로직에 대해서 살펴 보겠습니다.

    반응형