키움 Open API+
[키움 Open API+] 컨트롤 이벤트 1 - OnReceiveTrData, OnReceiveRealData
BlueSwamp
2022. 1. 9. 10:35
반응형
키움 Open API+ 컨트롤 이벤트와 OnReceiveTrData, OnReceiveRealData에 대해서 알아보겠습니다.
Open API+ 컨트롤 이벤트
C#에서는 컨트롤 이벤트 앞에 axKHOpenAPI가 붙어 있으며 이벤트 목록은 다음과 같습니다.
예) axKHOpenAPI_OnReceiveTrData, axKHOpenAPI_OnReceiveRealData
이름 | 설명 |
OnReceiveTrData | Tran 수신시 이벤트 |
OnReceiveRealData | 실시간 시세 이벤트 |
OnReceiveMsg | 수신 메시지 이벤트 |
OnReceiveChejanData | 주문 접수/확인 수신시 이벤트 |
OnEventConnect | 통신 연결 상태 변경시 이벤트 |
OnReceiveCondition | 조건검색 실시간 편입, 이탈 종목 이벤트 |
OnReceiveTrCondition | 조건검색 조회 응답 이벤트 |
OnReceiveConditionVer | 로컬에 사용자조건식 저장 성공여부 응답 이벤트 |
반응형
OnReceiveTrData
OnReceiveTrData는 서버 통신 후 요청한 TR((Transaction) 데이터를 받은 시점을 확인하고, 수신한 TR 데이터 정보를 확인할 수 있습니다. 함수의 원형은 다음과 같습니다.
void axKHOpenAPI_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
private void axKHOpenAPI_OnReceiveTrData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e)
{
if (e.sRQName == "주식주문")
{
string s원주문번호 = axKHOpenAPI.GetCommData(e.sTrCode, "", 0, "").Trim();
long n원주문번호 = 0;
bool canConvert = long.TryParse(s원주문번호, out n원주문번호);
if (canConvert == true)
txt원주문번호.Text = s원주문번호;
else
Logger(Log.에러, "잘못된 원주문번호 입니다");
}
// OPT1001 : 주식기본정보
else if (e.sRQName == "주식기본정보")
{
int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);
for (int i = 0; i < nCnt; i++)
{
Logger(Log.조회, "{0} | 현재가:{1:N0} | 등락율:{2} | 거래량:{3:N0} ",
axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "종목명").Trim(),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim()),
axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "등락율").Trim(),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim()));
}
}
// OPT10081 : 주식일봉차트조회
else if (e.sRQName == "주식일봉차트조회")
{
int nCnt = axKHOpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName);
for (int i = 0; i < nCnt; i++)
{
Logger(Log.조회, "{0} | 현재가:{1:N0} | 거래량:{2:N0} | 시가:{3:N0} | 고가:{4:N0} | 저가:{5:N0} ",
axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "일자").Trim(),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "현재가").Trim()),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "거래량").Trim()),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "시가").Trim()),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "고가").Trim()),
Int32.Parse(axKHOpenAPI.CommGetData(e.sTrCode, "", e.sRQName, i, "저가").Trim()));
}
}
}
|
cs |
TR 요청은 주식 주문, 주식기본정보, 주식일봉차트조회 등 다양한 TR이 있으며, 요청 가능한 TR 목록은 KOA StudioSA에서 확인 가능합니다.(KOA StudioSA는 키움증권 사이트에서 최신 버전을 받을 수 있습니다.)
TR 요청은 추후에 더 자세히 살펴보도록 하겠습니다.
반응형
OnReceiveRealData
OnReceiveRealData는 실시간 데이터를 받은 시점을 확인하고, 실시간 데이터 정보를 확인할 수 있습니다. 함수의 원형은 다음과 같습니다.
void axKHOpenAPI_OnReceiveRealData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private void axKHOpenAPI_OnReceiveRealData(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveRealDataEvent e)
{
Logger(Log.실시간, "종목코드 : {0} | RealType : {1} | RealData : {2}",
e.sRealKey, e.sRealType, e.sRealData);
if( e.sRealType == "주식시세" )
{
Logger(Log.실시간, "종목코드 : {0} | 현재가 : {1:C} | 등락율 : {2} | 누적거래량 : {3:N0} ",
e.sRealKey,
Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 10).Trim()),
axKHOpenAPI.GetCommRealData(e.sRealType, 12).Trim(),
Int32.Parse(axKHOpenAPI.GetCommRealData(e.sRealType, 13).Trim()));
}
}
|
cs |
실시간 데이터는 주시시세, 주식체결, 주식호가잔량, 잔고 등 다양한 실시간 정보를 확인할 수 있으며, 확인 가능한 실시간 목록은 KOA StudioSA에서 확인 가능합니다.(KOA StudioSA는 키움증권 사이트에서 최신 버전을 받을 수 있습니다.)
실시간 처리도 추후에 더 자세히 살펴보도록 하겠습니다.
반응형