Skip to content

[버그]: KisIntegrationBalance에서 해외주식 잔고수량이 0으로 표시됨 #41

Closed

Description

@minari2

빠른 문제 해결을 위해 다음을 확인했나요?

  • PyKis Issues에서 검색했지만 유사한 버그를 찾지 못했습니다.

버그 설명

해외주식 잔고수량이 0으로 표시되며 수익률 등 관련된 정보가 -100%로 계산됨 (실제 71달러 주식 3개 보유)

KisIntegrationBalance(
account_number=KisAccountNumber('...'),
deposits={
'KRW': KisDomesticDeposit(account_number=KisAccountNumber('...'), currency='KRW', amount=...., exchange_rate=1),
'USD': KisForeignPresentDeposit(account_number=KisAccountNumber('...'), currency='USD', amount=...., exchange_rate=1337.8)
},
stocks=[
KisForeignPresentBalanceStock(account_number=KisAccountNumber('...'), market='NASDAQ', symbol='TQQQ', qty=0, price=71.66, amount=0, profit=-215.15, profit_rate=-100), # 잔고수량 오류
KisForeignPresentBalanceStock(account_number=KisAccountNumber(...'), market='NYSE', symbol='NKE', qty=0.012638, price=83.43, amount=1.05438834, profit=-0.70561166, profit_rate=-40.09157159090909090909090909) # 정상
],
purchase_amount=...,
current_amount=...,
profit=-....,
profit_rate=-99.51390514960121709464754967
)

종속성 버전 문제 진단

Version: PyKis/2.0.2
Python: CPython 3.11.4
System: Windows 10.0.19045 [AMD64]

Installed Packages:
========== requests ===========
Required: 2.32.3>=
Installed: Not Found
====== websocket-client =======
Required: 1.8.0>=
Installed: Not Found
======== cryptography =========
Required: 43.0.0>=
Installed: Not Found
========== colorlog ===========
Required: 6.8.2>=
Installed: Not Found

재현 방법

from pykis import KisBalance

account = kis.account()
balance: KisBalance = account.balance()

print(repr(balance))

추가 정보

No response

PR를 통해 라이브러리에 기여하고 싶으신가요?

  • 네, PR을 제출하여 도움을 주고 싶습니다!

Activity

  1. Soju06 commented on Aug 21, 2024

    @Soju06
    Owner

    안녕하세요.
    구현 코드를 확인해본 결과 특이사항을 찾지 못했습니다.
    API의 오류인지 확인하기 위해서 아래 코드의 실행 결과를 알려주시면, 도움을 드릴 수 있을 것 같습니다.

    balance = kis.account().balance()
    
    print(balance["TQQQ"].raw()) # API의 원본 응답 데이터를 출력합니다.
  2. minari2 commented on Aug 21, 2024

    @minari2
    Author

    출력은 아래와 같습니다.
    {'prdt_name': 'PROETF ULTRAPRO QQQ', 'cblc_qty13': '0.00000000', 'thdt_buy_ccld_qty1': '3.00000000', 'thdt_sll_ccld_qty1': '0.00000000', 'ccld_qty_smtl1': '3.00000000', 'ord_psbl_qty1': '3.00000000', 'frcr_pchs_amt': '215.15000', 'frcr_evlu_amt2': '212.580000', 'evlu_pfls_amt2': '-2.57000', 'evlu_pfls_rt1': '-1.19000000', 'pdno': 'TQQQ', 'bass_exrt': '1332.00000000', 'buy_crcy_cd': 'USD', 'ovrs_now_pric1': '70.86000', 'avg_unpr3': '71.7160', 'tr_mket_name': '나스닥', 'natn_kor_name': '미국', 'pchs_rmnd_wcrc_amt': '0', 'thdt_buy_ccld_frcr_amt': '0.000000', 'thdt_sll_ccld_frcr_amt': '0.000000', 'unit_amt': '1', 'std_pdno': 'US74347X8314', 'prdt_type_cd': '512', 'scts_dvsn_name': '현금', 'loan_rmnd': '0', 'loan_dt': '', 'loan_expd_dt': '', 'ovrs_excg_cd': 'NASD', 'item_lnkg_excg_cd': 'NAS', 'prdt_dvsn': '01'}

    /uapi/overseas-stock/v1/trading/inquire-present-balance 의 cblc_qty13(잔고수량13)에는 0이 들어오고 있는데,
    /uapi/overseas-stock/v1/trading/inquire-balance 의 ovrs_cblc_qty(해외잔고수량)에는 3이 정상적으로 보입니다.
    api문서에 "잔고 확인을 원하실 경우에는 해외주식 잔고[v1_해외주식-006] API 사용을 부탁드립니다.)"와 같이 안내되어 있네요.

  3. Soju06 commented on Aug 22, 2024

    @Soju06
    Owner

    해당 버그가 발생하는 도메인이 실전 도메인인가요?
    실전 도메인이라면, 아래처럼 라이브러리 코드를 수정하고 동일한 문제가 발생하는지 확인부탁드립니다.

    pykis/api/account/balance.py 파일의 1061번째 줄 foreign_balance함수에서 if self.virtual:을 if True: 처럼 변경하여 /uapi/overseas-stock/v1/trading/inquire-balance를 실전도메인에서도 조회하도록 변경해주세요.

    ....
                country=country,
            ),
        )
    
        if True:  # True로 변경
            result.stocks = _foreign_balance(
                self,
                account=account,
                country=country,
            ).stocks
    
            for stock in result.stocks:
                if isinstance(stock, KisBalanceStockBase):
                    stock.balance = result
    
        return result
    
    ...
  4. self-assigned this
    on Aug 22, 2024
  5. minari2 commented on Aug 23, 2024

    @minari2
    Author

    아래처럼 수정하고 잔고조회해보니 정상적으로 조회됩니다. 모의투자 아니구요.

    if True: #if self.virtual:
        result.stocks = _foreign_balance(
            self,
            account=account,
            country=country,
        ).stocks
    
        for stock in result.stocks:
            if isinstance(stock, KisBalanceStockBase):
                stock.balance = result
    
    return result
    
  6. linked a pull request that will close this issue해외주식 잔고 수량 버그 수정 #43on Aug 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

버그뭔가 작동하지 않습니다.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions