[C#/WPF 키움 API] 키움 API_계좌 정보 및 주문 내역 (4)
(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); ;
}