본문 바로가기
Toy Project/IDEA

빗썸 API, 적립식 투자, 프로그램 구현

by 쭈대디 2024. 3. 24.
IDEA, project

 

이상적(Ideal)인 통화 수단으로써 가상 화폐가 언젠가 자리 잡는다는 기초 가정을 세우고, 거래 시장 규모가 장기적으로 성장한다면 일정 금액, 일정 주기로 매수하는 적립식 투자가 그럴듯한 설득력이 있어보입니다. 이유인 즉 물타기와 과적합(Overfit). 상트페테르부르크의 역설(무한 기댓값) 어디쯤에 위치하는 방식으로 모든 변수를 단수화함과 동시에 포트폴리오에 따라 시장 흐름을 그대로 따르기 때문에...

 

API 구현

 

이데아(IDEA) project는 적립식 투자보다는 우선 어떤식으로든 투자를 만들어야 배우는 속도가 더 빨라진다는 경험에 근거해서 시작되었습니다. 수많은 API를 하나씩 구현해보면서 Machine 만드는 것보다 당장 빠져나가는 내 돈이 있을 때 경험적으로 습득 속도가 더 빨리 붙게 됩니다.

가장 먼저 구현할 API는 매일매일 꾸준한 가상 화폐를 구매하는 시장가 매수부터 시작합니다.  

 

인증 헤더인 XCoinAPI 만 잘 구현되어 있다면 매수 함수 자체는 매우 간단합니다.

 

빗썸 API, Python 개발 환경 설정

Python, IDE 설치 문서상 버전 제약이 특별이 없어보여 현재(24.03.24) 기준 최신 버전을 설치합니다. Python 3.12.2 Jetbrain Pycharm 개발 환경 구성 (선택 사항) venv로 간단하게 독립된 개발 환경을 구성합니

sinbaram01.tistory.com

  • Logging 설정
  • 매일 아침 9시 비트코인(BTC), 이더리움(ETH), 비트코인캐쉬(BCH), 이더리움캐쉬(ETC) 4개 매수
  • 각 코인의 매수 규모는 최소 단위인 5000원
  • (구현 예정) 8시 50분 자산 현황 Report SNS 전송
  • (구현 예정) 긴급 중단 Protocol - Telegram
from api.private_info import *
from api.public_info import *
import schedule
import json
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)

api_key = ""
api_secret = ""
api = XCoinAPI(api_key, api_secret)

unit_size = 5000
xCoins = ['BTC', 'ETH', 'BCH', 'ETC']
payment_currency = "KRW"
plan = "09:00"

def main():

    # 구매할 Coin Portfolio
    for xCoin in xCoins:

        # Coin 별 시장가 구매(unit size 고정) Unit 계산
        get_ticker(xCoin, payment_currency)
        orderbook_list = json.loads(get_orderbook(xCoin, payment_currency))
        current_price = orderbook_list["data"]['bids'][0]['price']
        unit = unit_size/int(current_price)
        unit = f"{unit:.8f}"
        logger.info("[{}] {} ==> {} unit(s)".format(xCoin, current_price, unit))

        # API Message 조립
        rgParams = {
            'endpoint': '/trade/market_buy',
            "payment_currency": "KRW",
            "order_currency": xCoin,
            "units": unit
        }

        # 매수
        result = api.xcoinApiCall(rgParams['endpoint'], rgParams)
        logger.info(result)

def status_message():
    # 상태 확인 메시지 log
    logger.info("Running on the schedule at {}".format(plan))

# 실행 주기 설정
schedule.every(15).minutes.do(status_message)
schedule.every().day.at(plan).do(main)

if __name__ == "__main__":
    while True:
        schedule.run_pending()
        time.sleep(60)

 

최소 2만원씩 매수하기 때문에 테스트 코드 수행시 매수 request는 block 처리하는 것이 좋습니다.

초기에 매수 확인까지 약 8만원의 테스트 비용을 지출했습니다.

매월말 운용 실적 

 

매월말 공개할 예정이며, 3월 24일 현재 기준 없음

 

구현시 참고 사항

 

  1. units 값은 실제 시장가 주문시 설정하는 원화 기준의 금액이 아닌 BTC 환산 단위를 입력해야 합니다.
    (KRW로 설정해도 제대로 입력되지 않는 것으로 보아 빗썸 API 오류로 보입니다.)

    예를 들어, 비트코인 5000원어치(?) 구매를 원한다면 구매 금액을 약 1억원에 달하는 비트코인 가격으로 나눈 0.00005 BTC를 units 값으로 설정해야 합니다.    

  2. 현재가 조회가 되지 않아 매수 호가 기준(bids)으로 역산하여 소수점 8자리까지 계산했습니다. 추후 현재가 조회가 가능할 때 업데이트 필요한 부분입니다. (현재 역산 결과는 10원 미만으로 허용 가능한 범위)

  3. 전체 코드 소스는 다음 git에 올려두었으니 참고하세요
     

    GitHub - khaneun/IDEA: This project is designed for traiding bitcoin(s) of Bitthum

    This project is designed for traiding bitcoin(s) of Bitthum - khaneun/IDEA

    github.com

  4. Access/Secret Key 노출에 주의하세요

'Toy Project > IDEA' 카테고리의 다른 글

빗썸 API, Python 개발 환경 설정  (0) 2024.03.24
빗썸(Bitthum), API 키 생성하기  (0) 2024.03.24