inflearn logo
강의

Course

Instructor

What's the point of just studying? Creating coin/stock auto-trading bots for monetization.

Check account balance

계좌잔고 조회하기

37

pix43382903

3 asked

0

계좌잔고 조회하기 했는데

보유수량 : 0.0

평가금액 : 0

평가손익 : 0

으로 나옵니다...

실제 업비트에 코인이 있는 상태인데 ! 매수평균가는 잘나오는데 보유수량, 평가금액, 평가손익은 왜 0으로 나올까요..?


open api 권한은

자산조회, 주문조회, 주문하기, 출금조회, 입금조회 만 해놓은 상태입니다


python aws pandas rest-api bitcoin

Answer 1

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

유정인님, 업비트 API 권한 설정은 현재 상태라면 계좌 잔고 조회에 문제가 없어 보입니다.

업비트의 /v1/accounts 응답에서 보유 수량은 balance와 locked를 확인해야 합니다.

{
  "currency": "BTC",
  "balance": "0.001",
  "locked": "0.000",
  "avg_buy_price": "50000000"
}

따라서 보유 수량은 다음과 같이 계산하는 것이 안전합니다.

holding_quantity = float(account["balance"]) + float(account["locked"])

balance만 사용하면 주문에 묶여 있는 수량인 locked가 제외될 수 있습니다.

또한 업비트의 계좌 조회 API는 기본적으로 다음 정보만 제공합니다.

  • balance: 주문에 사용 가능한 수량
  • locked: 주문에 묶인 수량
  • avg_buy_price: 매수 평균가

평가금액과 평가손익은 API에서 직접 제공하지 않으므로 현재 시세를 별도로 조회하여 계산해야 합니다.

import requests

accounts = requests.get(
    "https://api.upbit.com/v1/accounts",
    headers=headers
).json()

for account in accounts:
    currency = account["currency"]
    balance = float(account["balance"])
    locked = float(account["locked"])
    avg_buy_price = float(account["avg_buy_price"])

    holding_quantity = balance + locked

    print(f"통화: {currency}")
    print(f"보유수량: {holding_quantity}")
    print(f"매수평균가: {avg_buy_price}")

예를 들어 BTC의 평가금액과 평가손익은 현재가를 조회한 뒤 다음처럼 계산할 수 있습니다.

market = "KRW-BTC"

ticker = requests.get(
    "https://api.upbit.com/v1/ticker",
    params={"markets": market}
).json()[0]

current_price = float(ticker["trade_price"])

evaluation_amount = holding_quantity * current_price
purchase_amount = holding_quantity * avg_buy_price
profit_loss = evaluation_amount - purchase_amount

print(f"평가금액: {evaluation_amount:,.0f}원")
print(f"평가손익: {profit_loss:,.0f}원")

특히 다음 부분을 확인해 보시기 바랍니다.

  1. balance와 locked를 모두 더하고 있는지 확인합니다.
  2. API 응답의 currency가 실제 보유 코인과 일치하는지 확인합니다.
  3. BTC와 KRW-BTC를 혼동하지 않았는지 확인합니다.
  4. 문자열로 반환되는 수량을 float 또는 Decimal로 변환했는지 확인합니다.
  5. 보유 코인을 찾을 때 balance > 0만 검사하고 있지 않은지 확인합니다.
  6. 평가금액과 평가손익을 계좌 조회 응답에서 직접 가져오려고 하고 있지 않은지 확인합니다.

먼저 아래 코드로 업비트에서 실제로 반환되는 원본 응답을 출력해 보시면 원인을 빠르게 확인할 수 있습니다.

from pprint import pprint

pprint(accounts)

원본 응답에서 해당 코인의 balance, locked, avg_buy_price 값을 확인했을 때 balance와 locked가 모두 0이라면 조회 중인 API 키 또는 계정이 실제 자산이 있는 계정과 다른 경우도 확인해 보셔야 합니다.

수강기간 연장 문의드립니다!

0

6

1

최빈값

0

10

1

수강 가이드라인

0

12

1

교재 문의

0

24

2

수강 연장 가능 여부 문의

0

32

2

강의 구매했는데 교재 필수일까요

0

24

2

수강기간 연장 가부 문의드립니다.

0

24

2

수강기간 연장이 가능한지 양해를 구하며 문의를 드립니다.

0

27

2

정처기 2026-3 실기 문의

0

57

2

정처기 실기 3회 컴싸 사용 여부

0

34

1

매수하기

0

32

2

작업형2 모의문제2에서 drop이랑 인코딩

0

34

2

모의고사 1 회 2번문제 중

0

51

2

26-2 이론문제 재탕

1

40

1

26-2년도 코드문제

0

29

0

26-2 코드문제

0

31

1

15분 48초 질문

0

42

2

26-1년도 이론문제 재탕

0

57

1

환경변수 기반 업비트 API 키 가져오기에서 none이 나옵니다ㅠㅠ

0

95

2

강의 자료 코드

0

103

2

dotenv 로드 실패

0

348

3

bot03.py 실행시 db 생성이 안 됩니다.

0

140

2

btc_data_1year.csv 파일 저장이 안됩니다.

0

200

3

자동매매 봇

0

136

1