코딩/C#
C# 키움증권 Open API (3) - 예수금 및 종목 정보 조회
개발자 조엘
2022. 8. 24. 12:58
서론
C#으로 키움증권 Open API 활용하여 프로그램을 구현하는 방법에 대한 포스팅 3탄입니다. 이번엔 좀 더 응용된 기능을 구현해보려고 합니다. 우선 선택한 계좌의 예수금 조회를 추가하려고 합니다. 이후 주문 기능을 구현하게 된다면 필요하기 때문입니다. 또한 본격적으로 종목에 대한 정보를 조회하는 기능을 구현해보도록 하겠습니다.
C# 키움증권 Open API (2) - 로그인 구현 링크
C# 키움증권 Open API (2) - 로그인 구현
이제 본격적으로 키움증권 Open API를 통해 기능을 구현할 차례입니다.

C# 키움증권 Open API (4) - 조건식 실시간 검색
C# 키움증권 Open API (4) - 조건식 실시간 검색
서론 C# 을 통해 키움증권 Open API 활용한 프로그램 구현하기 포스팅 4탄입니다. 이번 포스팅에서는 키움증권 계정에 설정된 조건식을 읽어와서, 조건식 실시간 검색 을 구현하려고 합니다. 조건식은 Open API를..

1. 예수금 조회

💡
예수금 조회를 위해서 디자인에 Label과 TextBox를 추가합니다.
private void InitializeEvents()
{
// ComboBox Eventes
cboAcctInfo.SelectedIndexChanged += (s, e) =>
{
// 계좌 번호가 공백이 아닌 경우에만 예수금 조회
if (!string.IsNullOrEmpty(cboAcctInfo.Text.Trim()))
GetCashInfo(cboAcctInfo.Text.Trim());
};
}
// 예수금 조회
private string GetCashInfo(string acctNo)
{
axKHOpenAPI1.SetInputValue("계좌번호", acctNo);
axKHOpenAPI1.SetInputValue("비밀번호입력매체구분", "00");
axKHOpenAPI1.SetInputValue("조회구분", "2"); // 3:추정조회, 2:일반조회
int result = axKHOpenAPI1.CommRqData("예수금상세현황", "OPW00001", 0, GetScreenNo());
return GetErrorMessage(result);
}
💡
예수금 정보를 조회하는 시점은 계좌 ComboBox의 SelectedIndexChanged 이벤트로 구현합니다.
💡
GetCashInfo 함수를 만들어서 예수금 조회 기능을 구현합니다.
💡
예수금 조회를 위해서는 KHOpenAPI Control에 SetInputValue를 3가지 해야합니다. 계좌번호, 비밀번호입력매체구분, 조회구분 입니다.
💡
비밀번호입력매체구분은 “00”으로 고정하고, 조회구분은 “2”인 경우 일반조회, “3”인 경우 추정조회입니다.
💡
SetInputValue가 끝난 뒤에 CommRqData를 통해 Request를 보냅니다. 첫번째 파라미터의 경우 Request Name이며 원하는 문자열을 입력하면됩니다. 추후에 구분자로 활용됩니다.
💡
두번째 파라미터의 경우 TR Code에 해당하는데 예수금상세현황을 위한 Code는 OPW00001 입니다. 세번째 파라미터는 0으로 하고 네번째 파라미터에는 화면 번호를 전달합니다.
axKHOpenAPI1.OnReceiveTrData += (s, e) =>
{
switch(e.sRQName)
{
case "예수금상세현황":
txtCash.Text = string.Format("{0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "예수금").Trim().ToDecimal());
break;
}
};
💡
CommRqData를 하는 경우 KHOpenAPI Control의 OnReceiveTrData 이벤트가 호출됩니다. e.sRQName은 앞서서 전달한 첫번째 파라미터값입니다. 어떤 Request인지 구분하기 위해 전달한 것입니다.
💡
GetCommData 을 통해 본격적인 예수금을 조회할 수 있습니다. 네번째 파라미터는 “예수금”을 전달하면 예수금을 조회할 수 있습니다.
💡
OPW00001의 OutPut은 KOA Studio → TR 목록을 통해 확인할 수 있습니다.
💡
OPW00001 예수금상세현황요청의 경우 “예수금” 외에도 다양한 값을 확인할 수 있습니다. 네번째 파라미터에 전달하는 문자열을 바꾸면 됩니다.
private int _screenNo = 1001; // 화면 번호
// 화면 번호 생성
private string GetScreenNo()
{
if (_screenNo < 1200)
_screenNo++;
else
_screenNo = 1001;
return _screenNo.ToString();
}
💡
GetScreenNo의 경우 화면 번호를 가져오는 동작입니다. 화면 번호는 “0000”을 제외한 4자리 숫자이며 200개를 초과해서 사용하면 안된다고 하여 “1001”~”1200” 을 사용하겠습니다.
💡
화면 번호는 서버에 조회나 주문등 필요한 기능을 요청할때 이를 구별하기 위한 키값으로 이해하시면 됩니다. 0000(혹은 0)을 제외한 임의의 네자리 숫자를 사용하시면 되는데 개수가 200개로 한정되어 있기 때문에 이 개수를 넘지 않도록 관리하셔야 합니다. 만약 사용하는 화면번호가 200개를 넘는 경우 조회 결과나 주문 결과에 다른 데이터가 섞이거나 원하지 않는 결과가 나타날 수 있습니다.

💡
로그인을 한 뒤 바로 정보 조회를 하면안됩니다. 계좌 비밀번호를 등록해야 합니다.

💡
컴퓨터에 실행 중인 계좌 비밀번호 입력 프로그램을 통해 등록합니다. 해당 프로그램은 Open API 로그인을 하면 자동으로 실행되어 있습니다.

💡
정상적으로 예수금을 조회한 결과입니다. 모의 투자 설정 금액을 1억으로 설정하여 1억이 출력됬습니다. 실제 제 돈이였으면 좋겠는데.. 하하
2. 종목 정보 조회

💡
다음으로 종목 코드를 입력하고, 종목 정보를 조회하는 기능을 구현하려합니다. 동작 구현을 위해 Label, TextBox, Button을 추가합니다.
private void InitializeEvents()
{
axKHOpenAPI1.OnReceiveTrData += (s, e) =>
{
switch(e.sRQName)
{
case "예수금상세현황":
txtCash.Text = string.Format("{0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "예수금").Trim().ToDecimal());
break;
case "주식기본정보":
WriteLog(" --------------------------------------------------------");
WriteLog(string.Format(" 종목코드: {0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "종목코드").Trim()));
WriteLog(string.Format(" 종목명: {0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "종목명").Trim()));
WriteLog(string.Format(" 연중최고: {0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "연중최고").Trim().ToInt()));
WriteLog(string.Format(" 연중최저: {0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "연중최저").Trim().ToInt()));
WriteLog(string.Format(" PER: {0:#,##0.00}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "PER").Trim().ToDecimal()));
WriteLog(string.Format(" EPS: {0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "EPS").Trim().ToInt()));
WriteLog(string.Format(" ROE: {0:#,##0.00}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "ROE").Trim().ToDecimal()));
WriteLog(string.Format(" PBR: {0:#,##0.00}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "PBR").Trim().ToDecimal()));
WriteLog(string.Format(" EV: {0:#,##0.00}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "EV").Trim().ToDecimal()));
WriteLog(string.Format(" BPS: {0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "BPS").Trim().ToInt()));
WriteLog(string.Format(" 신용비율: {0:#,##0.00}%", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "신용비율").Trim().ToDecimal()));
WriteLog(string.Format(" 외인소진률: {0:#,##0.00}%", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "외인소진률").Trim().ToDecimal()));
WriteLog(string.Format(" 거래량: {0:#,##0}", axKHOpenAPI1.GetCommData(e.sTrCode, e.sRQName, 0, "거래량").Trim().ToDecimal()));
WriteLog(" --------------------------------------------------------");
break;
}
};
// 종목 조회 버튼
btnSearchStock.Click += (s, e) =>
{
if (axKHOpenAPI1.GetConnectState() == 0)
{
ShowMessageBox("Open API 연결되어 있지 않습니다.", MessageBoxIcon.Information);
return;
}
if (string.IsNullOrEmpty(txtStockCode.Text.Trim()))
{
ShowMessageBox("종목코드를 입력해주세요.", MessageBoxIcon.Information);
return;
}
WriteLog("[종목 조회]");
string errorMessage = SearchStockInfo(txtStockCode.Text.Trim());
if (!string.IsNullOrEmpty(errorMessage))
WriteLog($" {errorMessage}");
};
}
private string SearchStockInfo(string code)
{
axKHOpenAPI1.SetInputValue("종목코드", code);
int result = axKHOpenAPI1.CommRqData("주식기본정보", "OPT10001", 0, GetScreenNo());
return GetErrorMessage(result);
}
💡
종목 정보 조회는 앞서서 한 예수금 조회와 방식은 같은데 비교적 더 간단합니다. SetInputValue는 종목 코드 1개만 하면되고, CommRqData에 OPT10001을 전달합니다.
💡
종목코드, 종목명, 연중최고, 연중최저, PER, EPS, ROE, PBR, EV, BPS, 신용비율, 외인소진률, 거래량을 가져오는 코드를 구현했습니다.

💡
종목 코드의 경우 네이버 금융에서도 쉽게 찾을 수 있습니다. 삼성전자의 종목 코드는 “005930” 입니다.

💡
OPT10001 주식기본정보요청의 경우에도 위에 구현한 것 외에 다양한 값들을 OutPut으로 받을 수 있습니다.

💡
삼성전자의 종목 코드인 “005930”을 입력하고 종목 조회를 한 결과입니다. 보다 더 다양한 OutPut을 받아올 수 있으니 원하는 기능을 다양하게 구현할 수 있습니다.
마무리
C#으로 구현하는 키움증권 Open API 3번째 포스팅을 마쳤습니다. 본격적으로 증권 데이터를 가져올 수 있게되어서 기분이 좋습니다. 다음 포스팅에서는 보다 더 응용된 기능을 구현하여 포스팅할 수 있도록 하겠습니다.
C# 키움증권 Open API (2) - 로그인 구현 링크
C# 키움증권 Open API (2) - 로그인 구현
이제 본격적으로 키움증권 Open API를 통해 기능을 구현할 차례입니다.

C# 키움증권 Open API (4) - 조건식 실시간 검색
C# 키움증권 Open API (4) - 조건식 실시간 검색
서론 C# 을 통해 키움증권 Open API 활용한 프로그램 구현하기 포스팅 4탄입니다. 이번 포스팅에서는 키움증권 계정에 설정된 조건식을 읽어와서, 조건식 실시간 검색 을 구현하려고 합니다. 조건식은 Open API를..

Uploaded by N2T