작업전 준비해야 할 사항들
먼저 거래소 API를 활성화 시키고 API 관련 키를 발급 받아야 한다.
자세한 방법은 아래 링크를 참고하길 바랍니다.
위와 같이 거래소 API 설정을 마치면, 각 거래소 API 코드를 작성해야 한다.
자세한 방법은 아래 링크를 참고하길 바랍니다.
- 빗썸 API 프로그래밍: 빗썸 API 프로그래밍 - 1, 빗썸 API 프로그래밍 - 2
-> 파일명 " bithumb_API.py" - 코인원 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)
- "BTC": 빗썸에서 거래할 코인 명
- "btc": 코인원에서 거래할 코인 명
- 7: 재정거래할 코인 수량
- 0.015: 두 거래소에서 매수 매도 가격 차이의 마진 설정(0.015 = 1.5%)
위와 같이 함수를 호출하면, 두 거래소의 비트코인 매수/매도 가격차이 호가의 1.5%이상 차이가 나면 거래를 하게 된다.
사실 필자의 원래 코드는 무척 길다. 위 코드의 1000배는 넘는다.
엄청나게 많은 대응을 해야 할 것이다.
하지만 시작이 반이라고 하지 않는가. 필자도 저 코드를 시작으로 한 것 같다.
오늘은 간략히 소스코드와 함수 호출법으로 마치고 소스코드에 대한 상세한 설명은 다음 글에서 하도록 하겠다.
안녕하세요 코드를 보면서 궁금한 것이 있는데요,
예를 들어 A거래소에서 매수, B거래소에서 매도를 해야하는 상황에서
A거래소에는 API를 통한 거래 요청이 성공적으로 성공했지만
B거래소에는 API를 통해 거래 요청이 정상적으로 되지 않았을 때(거래소 등에서의 일시적인 문제 등으로)는 어떻게 처리를 하시는지 궁금합니다..
그럴때는 두거래소 중 싼곳을 매수합니다
보유 코인수 유지가 가장 우선이니깐요