(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); ;
}
'대충 만들면서 배우자 > 자동 매매 (키움 API)' 카테고리의 다른 글
[C#/WPF 키움 API] 키움 API_조건 검색 (6) (0) | 2023.04.03 |
---|---|
[C#/WPF 키움 API] 키움 API_주문 및 잔고 (5) (0) | 2023.03.31 |
[C#/WPF 키움 API] 키움 API_로그인/종목/실시간 시세 (3) (0) | 2023.03.29 |
[C#/WPF 키움 API] 프로젝트 생성 및 WPF에 키움OCX 바인딩 하기 (2) (0) | 2023.03.27 |
[C#/WPF 키움 API ] API 신청 및 환경 설정 (1) (0) | 2023.03.27 |
댓글