본문 바로가기
대충 만들면서 배우자/자동 매매 (키움 API)

[C#/WPF 키움 API] 키움 API_계좌 정보 및 주문 내역 (4)

by 프갭 2023. 3. 30.

(1) 계좌 정보 및 구매 정보

입력 부분

khAPI.SetInputValue("계좌번호", accountNumber);
khAPI.SetInputValue("비밀번호", "");
khAPI.SetInputValue("비밀번호입력매체구분", "00");
khAPI.SetInputValue("조회구분", "2"); //1 합산,2 개별

khAPI.CommRqData("GetAccountEvalutionBalance", "opw00018", 0, sn.No);

결과 부분(TRData 이벤트)

계좌정보 및 주문내역도 TR Data 로 결과를 리턴 받는다

계좌 총 구매 내역 

khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총수익률(%)").ExTrim().ExDouble();
khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액").ExTrim().ExLong();

개별 구매 내역

int cnt = khAPI.GetRepeatCnt(e.sTrCode, e.sRQName); 

카운트 만큼 루프(for문)

khAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입가").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, i, "보유수량").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, i, "수익률(%)").ExTrim().ExDouble();
khAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입금액").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가금액").ExTrim().ExLong();
khAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가손익").ExTrim().ExLong();

코드 부분

생성자에 이벤트 등록

khAPI.OnReceiveTrData += khAPI_OnReceiveTrData;

private void khAPI_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
        {
            ScreenNumber sn = ScreenNumber.GetSingInstance(e.sScrNo);
            if (sn.ExNotNull() && sn.OnCompleted.ExNotNull())
                sn.OnCompleted(e);
        }

 

public int GetAccountBalance(string accountNumber, Action<KHAccountBalance> completedHandler = null)
        {
            ScreenNumber sn = ScreenNumber.GetNext();
            khAPI.SetInputValue("계좌번호", accountNumber);
            khAPI.SetInputValue("비밀번호", "");
            khAPI.SetInputValue("비밀번호입력매체구분", "00");
            khAPI.SetInputValue("조회구분", "2");


            sn.OnCompleted = (p) =>
            {

                if (p is AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent)
                {
                    AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e = p as AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent;

                    KHAccountBalance accBalance = KHAccountBalance.GetSingInstance(accountNumber);
                    accBalance.HoldingStocks.Clear();

                    accBalance.PurchaseAmount = khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총매입금액").ExTrim().ExLong();
                    accBalance.RateOfReturn = khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총수익률(%)").ExTrim().ExDouble();
                    accBalance.ValuationPrice = khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가금액").ExTrim().ExLong();
                    accBalance.ProfitAndLossPrice = khAPI.GetCommData(e.sTrCode, e.sRQName, 0, "총평가손익금액").ExTrim().ExLong();

                    int cnt = khAPI.GetRepeatCnt(e.sTrCode, e.sRQName);

                    for (int i = 0; i < cnt; i++)
                    {
                        string code = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목번호").Trim();
                        string stockName = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim();

                        KHStock stock = KHStock.GetSingInstance(code);

                        if (stock.Name.ExIsNullOrEmpty())
                        {
                            stock.Name = stockName;
                        }
                        stock.OrderInfo = new KHOrderInfo();
                        stock.OrderInfo.OrderPrice = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입가").ExTrim().ExLong();
                        stock.OrderInfo.Cnt = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "보유수량").ExTrim().ExLong();
                        stock.OrderInfo.RateOfReturn = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "수익률(%)").ExTrim().ExDouble();
                        stock.OrderInfo.PurchaseAmount = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "매입금액").ExTrim().ExLong();
                        stock.OrderInfo.ValuationPrice = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가금액").ExTrim().ExLong();
                        stock.OrderInfo.ProfitAndLossPrice = khAPI.GetCommData(e.sTrCode, e.sRQName, i, "평가손익").ExTrim().ExLong();
                        accBalance.HoldingStocks.Add(stock);
                    }
                    if (completedHandler.ExNotNull())
                        completedHandler(accBalance);
                }

            };

            return khAPI.CommRqData("GetAccountEvalutionBalance", "opw00018", 0, sn.No); ;
        }

반응형

댓글