종목을 매수할 때 원하는 금액을 입력하여 매수할 수도 있지만 현재 보유하고 있는 원화 잔고 전부를 사용하여 매수를 하고자 할 때도 있습니다.
이번 시간에는 현재 KRW 잔고 정보를 조회하여 수수료를 제외하고 실제 매수 가능한 최대 금액을 구하는 방법에 대해서 살펴 보겠습니다.
함께 사용할 수 있는 시장가 매수 로직은 아래 포스트를 참고 부탁 드립니다.
2021.06.09 - [프로젝트/비트코인 자동매매] - 파이썬 업비트 비트코인 자동매매 - 시장가 매수 로직
목차 - 클릭하면 이동합니다.
원화(KRW) 잔고 정보
현재 업비트 기준 원화 마켓 일반 거래 매수/매도 수수료는 0.05% 입니다. 예약 매수/매도는 수수료가 더 비싸고 BTC 마켓 등 다른 마켓의 수수료 역시 원화(KRW) 마켓과는 차이가 있으니 적용전에 수수료 체계를 확인해 보시는 것이 좋습니다.
원화 잔고 정보 조회 로직
# -----------------------------------------------------------------------------
# - Name : get_krwbal
# - Desc : KRW 잔고 조회
# - Input
# - Output
# 1) KRW 잔고 Dictionary
# 1. krw_balance : KRW 잔고
# 2. fee : 수수료
# 3. available_krw : 매수가능 KRW잔고(수수료를 고려한 금액)
# -----------------------------------------------------------------------------
def get_krwbal():
try:
# 잔고 리턴용
rtn_balance = {}
# 수수료 0.05%(업비트 기준)
fee_rate = 0.05
payload = {
'access_key': access_key,
'nonce': str(uuid.uuid4()),
}
jwt_token = jwt.encode(payload, secret_key)
authorize_token = 'Bearer {}'.format(jwt_token)
headers = {"Authorization": authorize_token}
res = send_request("GET", server_url + "/v1/accounts", "", headers)
data = res.json()
for dataFor in data:
if (dataFor['currency']) == "KRW":
krw_balance = math.floor(Decimal(str(dataFor['balance'])))
# 잔고가 있는 경우만
if Decimal(str(krw_balance)) > Decimal(str(0)):
# 수수료
fee = math.ceil(Decimal(str(krw_balance)) * (Decimal(str(fee_rate)) / Decimal(str(100))))
# 매수가능금액
available_krw = math.floor(Decimal(str(krw_balance)) - Decimal(str(fee)))
else:
# 수수료
fee = 0
# 매수가능금액
available_krw = 0
# 결과 조립
rtn_balance['krw_balance'] = krw_balance
rtn_balance['fee'] = fee
rtn_balance['available_krw'] = available_krw
return rtn_balance
# ----------------------------------------
# Exception Raise
# ----------------------------------------
except Exception:
raise
조회 결과
별도의 입력 변수는 없으며 함수를 호출하게 되면 아래 정보를 리턴하게 됩니다.
① krw_balance : 보유하고 있는 원화(KRW) 금액
② fee : 수수료 금액
③ available_krw : 수수료를 제외한 매수 가능 원화(KRW) 금액
참고 사항
단수 차이로 인해 1원 정도의 차이는 있을 수 있으며 앞서 말씀 드린바와 같이 매수/매도 방법이나 마켓에 따라서 수수료 체계가 다를 수 있으니 해당 부분에 대한 확인이 필요합니다.
모듈 호출
import os
import sys
import logging
import traceback
# 공통 모듈 Import
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from lib import upbit as upbit # noqa
# -----------------------------------------------------------------------------
# - Name : main
# - Desc : 메인
# -----------------------------------------------------------------------------
if __name__ == '__main__':
# noinspection PyBroadException
try:
print("***** USAGE ******")
print("[1] 로그레벨(D:DEBUG, E:ERROR, 그외:INFO)")
# 로그레벨(D:DEBUG, E:ERROR, 그외:INFO)
upbit.set_loglevel('I')
# ---------------------------------------------------------------------
# Logic Start!
# ---------------------------------------------------------------------
# 잔고 조회(KRW, 소액 제외)
krw_balance = upbit.get_krwbal()
logging.info(krw_balance)
except KeyboardInterrupt:
logging.error("KeyboardInterrupt Exception 발생!")
logging.error(traceback.format_exc())
sys.exit(1)
except Exception:
logging.error("Exception 발생!")
logging.error(traceback.format_exc())
sys.exit(1)
실행 결과
① krw_balance : 777,783원
② fee : 389
③ available_krw : 777,394원
위와 같이 수수료 389원을 제외한 매수 가능 최대 원화(KRW) 금액인 777,394원이 조회 되었습니다.
'프로젝트 > 비트코인 자동매매' 카테고리의 다른 글
지정가 매수 로직 - 파이썬 업비트 비트코인 자동매매 (2) | 2021.07.15 |
---|---|
미체결 주문 취소 - 파이썬 업비트 비트코인 자동매매 (0) | 2021.07.08 |
미체결 주문 조회 - 파이썬 업비트 비트코인 자동매매 (1) | 2021.07.08 |
잔고 정보 조회 - 파이썬 업비트 비트코인 자동매매 (2) | 2021.06.24 |
호가 계산하기 - 파이썬 업비트 비트코인 자동매매 (3) | 2021.06.17 |
지정가 매도 로직 - 파이썬 업비트 비트코인 자동매매 (5) | 2021.06.17 |