파이썬을 이용한 암호화폐 재정거래봇 만들기 - 1

in #arbitrage6 years ago

4.jpg

작업전 준비해야 할 사항들

먼저 거래소 API를 활성화 시키고 API 관련 키를 발급 받아야 한다.
자세한 방법은 아래 링크를 참고하길 바랍니다.

  1. 빗썸 API 설정 방법
  2. 코인원 API 설정 방법

위와 같이 거래소 API 설정을 마치면, 각 거래소 API 코드를 작성해야 한다.
자세한 방법은 아래 링크를 참고하길 바랍니다.

  1. 빗썸 API 프로그래밍: 빗썸 API 프로그래밍 - 1, 빗썸 API 프로그래밍 - 2
    -> 파일명 " bithumb_API.py"
  2. 코인원 API 프로그래밍: 코인원 API 프로그래밍 - 1, 코인원 API 프로그래밍 - 2-> 파일명 " coinone_API.py"

재정거래 함수(tradeCurrency)

소스코드 소개

import bithumb_API
import coinone_API

def tradeCurrency(bit_currency, coin_currency, qty, margin):
    bithumbBalnace = bithumb_API.bithumbBalance(bit_currency)
    coinoneBalnace = coinone_API.coin_balance()
    bithumbAvailableKRW = bithumbBalnace["data"]["available_krw"]
    bithumbAvailableCur = float(bithumbBalnace["data"]["available_" + bit_currency.lower()])
    coinoneAvailableKRW = int(coinoneBalnace["krw"]["avail"])
    coinoneAvailableCur = float(coinoneBalnace[coin_currency]["avail"])

    coinoneOrderBook = coinone_API.coin_order_book(coin_currency)
    coin_bid = int(coinoneOrderBook["bid"][0]["price"])
    coin_ask = int(coinoneOrderBook["ask"][0]["price"])
    coin_bid_qty = float(coinoneOrderBook["bid"][0]["qty"])
    coin_ask_qty = float(coinoneOrderBook["ask"][0]["qty"])

    bithumbOrderbook = bithumb_API.bithumbOrderbook(bit_currency)
    bit_bid = int(bithumbOrderbook["data"]["bids"][0]["price"])
    bit_ask = int(bithumbOrderbook["data"]["asks"][0]["price"])
    bit_bid_qty = float(bithumbOrderbook["data"]["bids"][0]["quantity"])
    bit_ask_qty = float(bithumbOrderbook["data"]["asks"][0]["quantity"])

    # bithumb 매도/coinone 매수
    if bit_bid - coin_ask >= coin_ask * margin:
        market_bid = bit_bid
        market_ask = coin_ask
        if coin_ask_qty < qty or bit_bid_qty < qty:
            return False
        if coinoneAvailableKRW > market_ask * qty and bithumbAvailableCur > qty:
            result = False
            bithumbSellBuyError= bithumb_API.bithumbSell(market_bid, qty, bit_currency)
            if bithumbSellBuyError != "0000":
                return result
            coinSellBuyError = coinone_API.coin_limit_buy(market_ask, qty, coin_currency)
            if coinSellBuyError != "0":
                bithumb_API.bithumbBuy(market_ask, qty, bit_currency)

    # bithumb 매수/coinone 매도
    if coin_bid - bit_ask >= bit_ask * margin:
        market_bid = coin_bid
        market_ask = bit_ask
        if coin_bid_qty < qty or bit_ask_qty < qty:
            print(bit_currency + "[Normal Mode] Coin=>Bit Qty Low")
            return False
        if bithumbAvailableKRW > market_ask * qty and coinoneAvailableCur > qty:
            result = False
            bithumbSellBuyError = bithumb_API.bithumbBuy(market_ask, qty, bit_currency)
            if bithumbSellBuyError != "0000":
                return result
            coinSellBuyError = coinone_API.coin_limit_sell(market_bid, qty, coin_currency)
            if coinSellBuyError != "0":
                bithumb_API.bithumbSell(market_bid, qty, bit_currency)

    return True

import 파일에 대한 설명

import bithumb_API
import coinone_API

위에서 설명한 빗썸과 코인원 API 파일을 import 하는 것이다. 거래소 API를 만들때 반듯이 파일명을 일치시켜야 한다.

함수 호출 방법

tradeCurrency("BTC", "btc", 7, 0.015)
  1. "BTC": 빗썸에서 거래할 코인 명
  2. "btc": 코인원에서 거래할 코인 명
  3. 7: 재정거래할 코인 수량
  4. 0.015: 두 거래소에서 매수 매도 가격 차이의 마진 설정(0.015 = 1.5%)

위와 같이 함수를 호출하면, 두 거래소의 비트코인 매수/매도 가격차이 호가의 1.5%이상 차이가 나면 거래를 하게 된다.


사실 필자의 원래 코드는 무척 길다. 위 코드의 1000배는 넘는다.
엄청나게 많은 대응을 해야 할 것이다.
하지만 시작이 반이라고 하지 않는가. 필자도 저 코드를 시작으로 한 것 같다.
오늘은 간략히 소스코드와 함수 호출법으로 마치고 소스코드에 대한 상세한 설명은 다음 글에서 하도록 하겠다.

Sort:  

안녕하세요 코드를 보면서 궁금한 것이 있는데요,
예를 들어 A거래소에서 매수, B거래소에서 매도를 해야하는 상황에서
A거래소에는 API를 통한 거래 요청이 성공적으로 성공했지만
B거래소에는 API를 통해 거래 요청이 정상적으로 되지 않았을 때(거래소 등에서의 일시적인 문제 등으로)는 어떻게 처리를 하시는지 궁금합니다..

그럴때는 두거래소 중 싼곳을 매수합니다
보유 코인수 유지가 가장 우선이니깐요