반응형

안녕하세요. 이번 카테고리에서는 아래과 같은 작업을 하는 코드를 작성해 보겠습니다.

  1. 업비트와 바이낸스의 보유자산 조회
  2. 조회 당시의 환율에 따라 krw 및 usd 가치 계산
  3. 일정 시간마다 보유 자산을 자동적으로 저장

이번 포스팅에서는 먼저 ccxt 패키지를 이용해 업비트에서의 잔고를 조회해보겠습니다.

1. 업비트 잔고 조회

먼저 ccxt 패키지를 이용해 업비트의 보유자산을 조회해 보도록 하겠습니다.

import dotenv
import os
import ccxt

dotenv_file = dotenv.find_dotenv()
dotenv.load_dotenv(dotenv_file)

apikeyUp = os.environ['up_apikey']
apisecretUp = os.environ['up_secret']

upbit = ccxt.upbit(config={'apiKey': apikeyUp, 'secret': apisecretUp})

# 보유자산 조회
balance = upbit.fetch_balance()['total']

print(balance)

dotenv를 이용해 환경변수 저장하는 방법은 아래 포스팅을 참고해주세요.
2022.10.05 - [Python] - 파이썬 dotenv를 이용한 환경변수 저장 및 호출

 

파이썬 dotenv를 이용한 환경변수 저장 및 호출

블로그 만든 뒤에 처음 작성하는 글이네요. 블로그에 공유하기 위해 중요한 정보(암호) 등을 환경변수로 지정해 다른 파일에 저장하고, 공유시에 다른 사람들에게 노출되는 것을 막고자 합니다.

bitcoding.tistory.com


아래 결과는 실제 자산은 아니고, 조회한 보유자산을 수정한 모습입니다.

{'KRW': 90000, 'ETH': 4.64, 'XRP': 320, 'EOS': 3.07e-06, 'TRX': 4.4e-07, 'VTHO': 500, 'APENFT': 20}


보시면 KRW, ETH, XRP처럼 거래 가능하고, 일정 금액 이상의 가치를 가진 것들이 있습니다. 반면에 EOS, TRX처럼 극 소량만 있어서 별 가치가 없는 항목들도 있습니다. 또한 VTHO, APENFT와 같이 거래소에 상장되어 있지 않은 코인들도 존재합니다. 이런 가치가 낮은 항목들을 제거하는 코드를 추가로 작성하겠습니다.

2. 비상장 항목 제외 및 가격 조회

앞서 말한 것처럼 업비트 거래소에 상장되어있지 않은 코인을 제거하고, 남은 코인들의 현재 가격을 가져와보겠습니다.

import dotenv
import os
import ccxt

dotenv_file = dotenv.find_dotenv()
dotenv.load_dotenv(dotenv_file)

apikeyUp = os.environ['up_apikey']
apisecretUp = os.environ['up_secret']

upbit = ccxt.upbit(config={'apiKey': apikeyUp, 'secret': apisecretUp})

# 보유자산 조회
balance = upbit.fetch_balance()['total']

# 원화 마켓만 저장
markets = upbit.fetch_tickers()
coins = []
amount = []
price = []
for key in balance.keys():
    try:
        price.append(markets[key+'/KRW']['last'])
        coins.append(key)
        amount.append(balance[key])
    except:
        pass

print(coins)
print(amount)
print(price)

업비트에는 원화/BTC/usdt 페어가 존재하는데 주로 원화 마켓을 이용하기 때문에 KRW페어만 남기고 제거하는 코드를 작성했습니다. 원화 마켓의 코인만 남기기 위해 try문을 사용해, 조회가 되면 append, 에러가 발생하면 pass 하도록 했습니다. 앞선 코드에서 얻은 보유한 항목들에 '/KRW'를 붙이고 현재 가격을 조회해서, 조회가 되는 항목들만 리스트에 저장했습니다.

['ETH', 'XRP', 'EOS', 'TRX']
[4.64, 320, 3.07e-06, 4.4e-07]
[2202000.0, 645.0, 1630.0, 88.4]

결과는 위와 같습니다. 여전히 소액의 자산이 남아있으며, 보유 중인 원화가 사라진 모습입니다. 다음 항목은 이에 대한 내용을 작성해보겠습니다.

3. 원화 추가 및 소액자산 제외

앞서 말했듯이 사라진 KRW를 추가해주고 소액의 자산을 제거해보겠습니다.

import dotenv
import os
import ccxt

dotenv_file = dotenv.find_dotenv()
dotenv.load_dotenv(dotenv_file)

apikeyUp = os.environ['up_apikey']
apisecretUp = os.environ['up_secret']

upbit = ccxt.upbit(config={'apiKey': apikeyUp, 'secret': apisecretUp})

# 보유자산 조회
balance = upbit.fetch_balance()['total']

# 원화 마켓만 저장
markets = upbit.fetch_tickers()
coins = []
amount = []
price = []
for key in balance.keys():
    try:
        price.append(markets[key+'/KRW']['last'])
        coins.append(key)
        amount.append(balance[key])
    except:
        pass

# 소액 자산 제거
acc_krw = balance['KRW']
nameUp = ['KRW']
amountUp = [acc_krw]
priceUp = [1]
krwUp = [acc_krw]

for i in range(len(coins)):
    krw = amount[i] * price[i]
    if krw > 10000:
        nameUp.append(coins[i])
        amountUp.append(amount[i])
        priceUp.append(price[i])
        krwUp.append(krw)

print(nameUp)
print(amountUp)
print(priceUp)
print(krwUp)


먼저 새로운 리스트를 만들어 KRW 정보를 넣어주었습니다. 이후 보유 수량과 현재 가격을 곱하여 평가금을 계산해, 10000원이 넘는 항목만 리스트에 저장해주었습니다.

['KRW', 'ETH', 'XRP']
[984318, 4.64, 320]
[1, 2201000.0, 646.0]
[90000.0, 10212640.0, 206720.0]

 

4. pandas를 이용한 정리 및 출력

이번 항목에서는 앞서 조회한 업비트의 보유자산을 pandas 패키지를 이용해 정리하고 출력해 보겠습니다.

import dotenv
import os
import ccxt
import pandas as pd

dotenv_file = dotenv.find_dotenv()
dotenv.load_dotenv(dotenv_file)

apikeyUp = os.environ['up_apikey']
apisecretUp = os.environ['up_secret']

upbit = ccxt.upbit(config={'apiKey': apikeyUp, 'secret': apisecretUp})

# 보유자산 조회
balance = upbit.fetch_balance()['total']

# 원화 마켓만 저장
markets = upbit.fetch_tickers()
coins = []
amount = []
price = []
for key in balance.keys():
    try:
        price.append(markets[key+'/KRW']['last'])
        coins.append(key)
        amount.append(balance[key])
    except:
        pass

# 소액 자산 제거
acc_krw = balance['KRW']
nameUp = ['KRW']
amountUp = [acc_krw]
priceUp = [1]
krwUp = [acc_krw]

for i in range(len(coins)):
    krw = amount[i] * price[i]
    if krw > 10000:
        nameUp.append(coins[i])
        amountUp.append(amount[i])
        priceUp.append(price[i])
        krwUp.append(krw)
        
# 업비트 종합
dfUp = []
dfUp.append(nameUp)
dfUp.append(amountUp)
dfUp.append(priceUp)
dfUp.append(krwUp)

dfUp = pd.DataFrame(dfUp)
dfUp = dfUp.transpose()
dfUp.columns = ['Name', 'Amount', 'Price', 'KRW']
upbit_krw = dfUp.sum(axis=0)['KRW']

print(dfUp)
print("Total KRW: {:,.0f} KRW".format(upbit_krw))


새로운 리스트를 만들어 앞선 리스트들을 집어넣어 데이터프레임으로 변경해주었습니다. 이후 행과 열을 바꾸고 각 행에 이름을 붙여주었으며, 모든 자산의 krw를 더해 출력했습니다. (텍스트 가시성에 문제가 있어 사진으로 첨부합니다.)

 

업비트 보유자산 출력


이번 포스팅에서는 업비트의 보유자산을 조회해봤습니다. 다음 포스팅에서는 바이낸스의 보유자산을 조회해보도록 하겠습니다. 읽어주셔서 감사합니다.

반응형

+ Recent posts