3. 비트코인 선물/3-1. 바이비트 선물 연구일지

(비트코인 자동매매API) (6) 투자가능금액 조회하기

봄이오네 2022. 11. 8. 08:09
반응형
목 차
1. 들어가며
2. 사전설명
3. 코드설명
4. 전체 코드 및 결과
5. 마치며

1. 들어가며

지난 글에서는 잔고조회 방법을 알아보았다.

현재가와 매수가의 비교를 통해 매수/매도 등의 수익/손절을 진행하기 위해서이다.

 

(비트코인 자동매매API) (3) 비트코인 최신 데이터(현재가) 받기

목 차 1. 들어가며 2. 사전설명 3. 코드설명 4. 전체코드 및 결과 5. 마치며 1. 들어가며 지난 글에서는 바이비트API를 통해 비트코인(선물)의 과거 1분봉 데이터 받는 방법을 알아보았다. 실제 코드

springcoming.tistory.com

 

이번 글에서는 보유하고 있는 투자가능금액 조회하는 방법을 알아보자

투자를 위해 사용자에게 필요한 개념은

"계좌 잔고"가 아닌 "투자가능금액"이다.

 

<그림1>의 계좌잔고 Equity 0.00279712 BTC이고

                  투자가능금액 Available Balance 0.00004844 BTC이다.

그림1. 계좌잔고와 투자가능금액


2. 사전설명

바이비트API 설명서를 확인해보자.

<그림2>에서 확인하였듯이 입력 내용은 "코인명"이고

"출력명"이 투자가능금액(available_balance)이다.

그림2. 투자가능금액을 받는 화면 설명

 

설명 경로 : Wallet Data Endpoints > Get Wallet Ballance

입력 : 사용자가 알고 싶은 코인명을 기재한다.

    ※ 여기서 주의할 것은 심볼명이 아니라는 것이다.

        Coin명을 "BTC"로 기재한다.

         Symbol명은 "BTCUSD"인데, 여기서는 "BTC"로 표기한다.

출력 : 투자가능금액(available_balane)을 수신받는다.

입력 코드 방법 : api_key 및 api_secrect를 입력한다.

출력 받는 내용 : 딕셔너리 - 딕셔너리 - 딕셔너리 형태를 확인한다.


3. 코드 설명

pybit 모듈을 활용하여 API KEY 및 API SECRET를 활용하여

바이비트API 접근하여 투자가능금액을 받아온다.

1줄 : 11줄~14줄에서 계좌정보를 접근하기 위해 pybit모듈을 임프트한다. 

2줄 : 23줄에서 현재시간을 GMT시간으로 출력하기 위해 datetime모듈을 임포트한다.

4줄~7줄 : 사용자 pc에 저장된 api_key 및 api_secret을 읽어온다.

 

9줄 : 임의의 함수를 선언하고, 35줄의 Coin명의 "BTC" 입력하기 위한

         변수 coin_name 자리에 넣어준다.

11줄~14줄 : api_key 및 api_secret 입력을 통해 바이비트api 접근하여 데이터를 받아온다.

17줄 : 받아온 데이터를 resp에 인스턴스화 시킨다.

 

19줄~23줄 : <그림1>의 ⑤에서 확인하였듯이 딕셔너리 > 딕셔너리 > 딕셔너리 형태이다.

19줄 : 투자가능금액은 받아온다. resp ['result'] ['BTC'] ['available_balane'] 로 받아온다.

    * 딕셔너리 형태는 문자형(result, BTC, available_balance)으로 받아온다.

20줄 : 실현 손익 (realised_pnl)

20줄 : 미실현 손익(unrealised_pnl)

 

22줄 : 이 부분에서 약간 헤맸다.

          시간 데이터는 resp의 time_now로 받아온다.

          float형으로 받아오고나서, 정수화(int형)시켜서 마이크로 초를 버린다.

23줄 : 2줄의 datetime모듈을 활용하여 GMT로 변환한다.

 

25줄~28줄 : 투자가능금액, 실현/미실현 손익, 현재시간을 출력한다.

30줄 : 9줄의 avail_balance의 함수는 "BTC"를 넣어서 실행한다.

 


4. 전체 코드 및 결과

from pybit.inverse_perpetual import HTTP
import datetime as dt

with open(r'C:\...\bybit.key.txt') as f:
    lines = f.readlines()
    api_key = lines[0].strip()
    api_secret = lines[1].strip()

def avail_balance(coin_name):

    session = HTTP(
        endpoint="https://api.bybit.com",
        api_key=api_key,
        api_secret=api_secret
        )

    resp = session.get_wallet_balance(coin = coin_name)

    available_balance = resp["result"]["BTC"]["available_balance"]  # float 형으로 출력됨
    realised_pnl = resp["result"]["BTC"]["realised_pnl"]            # float 형으로 출력됨
    unrealised_pnl = resp["result"]["BTC"]["unrealised_pnl"]        # float 형으로 출력됨
    time_now = int(float(resp["time_now"]))
    time_now = dt.datetime.fromtimestamp(time_now)

    print(available_balance)
    print(realised_pnl)
    print(unrealised_pnl)
    print(time_now)

avail_balance("BTC")


# (expected result)
# 0.00283091
# 0.00010092
# 0
# 2022-11-05 15:25:15

5. 마치며

투자가능금액은 이후에 설명할 진입을 할 때,

수량 계산을 할 때 쓰인다.

 

또한, 위에서 설명한 실현/미실현 손익은

프로그램을 돌릴 때 거래가 있은 후의 출력을 통해

거래후의 수익/손실 등을 알 수 있다.

 

지금까지 투자가능금액 조회하는 방법을 알아보았다.

다음 글에서는 투자가능금액을 활용한 long/short 진입량 계산하는 방법을 알아보자.

반응형