키움 KOA 이해하기_2

 

이전 글 보기

01_시작

02_기본설정

03_pykiwoom vs. 직접코딩

04_키움 open api 로그인 하기

05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기)

06_키움 KOA 설치하기

07_키움 KOA 이해하기

 

 

 

 

키움 KOA의 개요는 다음과 같다.

 

OpenAPI(Application Programing Interface)는 
국내주식상품과 코스피200 지수선물/옵션, 주식선물을 거래할 수 있는 거래/분석프로그램을 개발 할 수 있는 일종의 프로그램이며 COM형태로 제공합니다. 

주요기능은 시세데이터 조회와 실시간 데이터제공, 주문기능, 조건검색기능(주식만 가능)을 제공하며 모두 로그인 이후 가능합니다.

 

여기서 COM은 OCX를 의미한다. OCX는 "07. 키움 KOA 이해하기"에서 다루었다.

 

주요기능은 "시세데이터 조회, 실시간 데이터제공, 주문기능, 조건검색기능(주식만 가능)"이다. 이 정도면 내가 만들고자 하는 것을 하기엔 문제가 없어 보인다.

 

 

 

키움 API의 통신동작은 다음과 같다.

 

[통신동작] OpenAPI함수호출과 이벤트는 모두 비동식 방식으로 서버에 시세조회나 주문등을 함수호출로 요청하면 처리 결과를 전용 이벤트를 호출해서 전달합니다.

여기서 수신데이터를 가져오려면 반드시 이벤트 리턴전에 적절한 데이터 획득함수를 사용해서 얻어와야 합니다. 이벤트가 호출하기 전에 데이터 획득함수를 사용하거나 이벤트 리턴후에 호출하게 되면 혹은 임의로 이벤트를 호출하면 정상적인 데이터를 얻을수 없습니다.

지금까지 설명을 조회요청을 예를들어 정리하면 다음과 같습니다. 이외 OpenAPI기능도 관련 함수와 이벤트 차이가 있을뿐 전체 동작은 동일합니다.

기능요청(조회함수 CommRqData, CommKwRqData 호출) --->
이벤트 호출(OnReceiveTRData ) --->
데이터 획득 (GetCommData함수) 

 

요청은 반드시 전용 이벤트를 호출해서 전달한다. 수신한 데이터는 이벤트 리턴 전에 얻어와야 한다. 이벤트를 리턴하면 정상적인 데이터를 얻을 수 없게 된다.

 

CommRqData, CommKwRqData, OnReceiveTRData, GetCommData...

유튜브 프로그램 동산 채널을 보면서 공부한 코드의 의미를 하나씩 깨우쳤다.

 

 

[화면번호] 화면번호는 서버에 조회나 주문등 필요한 기능을 요청할때 이를 구별하기 위한 키값으로 이해하시면 됩니다. 0000(혹은 0)을 제외한 임의의 숫자를 사용하시면 되는데 갯수가 200개로 한정되어 있기 때문에 이 갯수를 넘지 않도록 관리하셔야 합니다. 만약 사용하는 화면번호가 200개를 넘는 경우 조회결과나 주문결과에 다른 데이터가 섞이거나 원하지 않는 결과를 나타날 수 있습니다. 

 

화면번호(스크린번호)는 "05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기)"에서 살펴본 내용이다.

 

 

 

[이벤트] 시세조회나 조건검색요청등 관련함수 호출로 요청하면 서버에서 이를 처리해서 결과를 OpenAPI의 특정함수를 호출해서 알려주는데 이 함수를 이벤트라고 합니다.

조회를 예로 들면 SetInputValue(), CommRqData()함수로 조회를 하면 조회결과를 만들어서 OpenAPI로 전달하고 조회한 사용자의 OnReceiveTRData를 호출하게 됩니다.

이벤트는 일반함수와 구별하기 위해 이름앞에 On~에 있으며 OnEventConnect, OnReceiveTRData, OnReceiveRealData등이 있습니다. 로그인, 조회, 주문, 조건검색등 기능별로 함수와 이벤트가 분류되어 있으니 용도에 맞는 함수와 이벤트를 사용해야 합니다.

 

SetInputValue(), CommRqData(), OnReceiveTRData, OnEventConnect, OnReceiveTRData, OnReceiveRealData 등 코딩하면서 봤던 함수와 이벤트 이름들이 다 여기에 기인한 것들이다.

 

사용 목적과 이유를 모르고 코딩할 때는 궁금한 게 많았는데, 작동 원리를 확인하니 마음이 편해진다.

 

 

 

 

이런 내용들이 "KOA-개발가이드-키움OPenAPI"에 다 있었는데, 안본게 후회된다. 이제라도 봐서 다행이다. 그때 봤다면,,,, 지금처럼 무슨 말인지 이해를 했을까??

 

 

 

참고한 내용

- 키움 KOA

- 키움 OpenAPI+ 개발가이드

 

 

 

2021.01.09. 코리.

 

 

키움 KOA Studio 이해하기

 

 

이전 글 보기

 

01_시작

02_기본설정

03_pykiwoom vs. 직접코딩

04_키움 open api 로그인 하기

05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기)

06_키움 KOA 설치하기

 

 

 

코드만 주구장창 치다 보니 뭔가 정리가 되지 않는 기분이 들었다. OPEN API 설명서 격인 키움 KOA에 대해 이해하는 시간이 필요했다.

 

대부분의 내용은 키움 홈페이지 OPEN API에 등재된 개발가이드와 KOA 설명 페이지에서 확인할 수 있다.

 

우선 키움 OPEN API는 프로그램 확장성을 고려하여 OCX 컨트롤러로 제작을 지원한다. OCX는 OLE Control Extensions을 의미하며, OLE는 Object Linking and Embedding(객체 연결 삽입)를 의미한다.

 

무슨 말인지 모르겠다. 네이버 지식백과는 OCX를 다음과 같이 정의한다.

OLE(object linking and embedding)에 의해 작성된 사용자 정의 컨트롤 기능으로 프로그램 확장자를 OCX에 대응한 애플리케이션에서 호출할 수 있다. OLE의 명칭이 ActiveX로 변경되면서 ActiveX 컨트롤이 정식 명칭이 되었다. 사용자 정의 컨트롤은 제3자 벤더와 사용자가 독자적으로 만든 윈도용 프로그램 부품의 총칭이다. 스크롤 바와 같은 단순한 것에서부터 스프레드시트와 철자 검사 프로그램, 웹 서버의 브라우저 등의 복잡한 기능을 갖춘 것까지 그 범위가 다양하다.
[네이버 지식백과] OCX (컴퓨터인터넷IT용어대사전, 2011. 1. 20., 전산용어사전편찬위원회)

 

 

 

키움 KOA

 

키움 KOA는 위와 같은 화면을 구성하고 있다.

 

1번 작업창은 다음의 기능을 수행한다.

   - 영웅문 HTS의 화면에 해당되는 서비스

   - 전체 TR 서비스 목록

   - TR의 IO

   - 실시간 타입과 FID

 

2번 정보창은 다음의 기능을 수행한다.

   - 선택된 TR에 대한 정보

   - TR의 input값 설명

   - 코딩 샘플(C++)

   - 실시간 필드 정보

 

3번 입력창은 다음의 기능을 수행한다.

   - 선택된 TR에 대한 input값 입력

   - input값 설명

 

4. 결과창은 다음의 기능을 수행한다.

   - TR 요청에 대한 결과

   - 실시간 수신 데이터

   - 조회 TR 히스토리

 

그리고 화면 하단에 "실시간 목록", "TR목록", "종목정보", "개발가이드", "화면목록"의 탭이 있다.

 

 

 

키움 KOA

 

함수를 선택하고자 할 때 함수 앞에 LONG, void, BSTR과 같은 구분자가 있다. 이들의 의미는 다음과 같다.

 

LONG : C 등의 언어에서 64비트 숫자를 데이터 타입을 말한다. 2**63개의 숫자를 표현할 수 있다.  [1]

void : C 등의 언어에서 호출자에게 결과값을 제공하지 않는 함수의 결과를 위한 타입이다. [2]

BSTR : Basic string or binary string을 의미하며, 문자열을 타입이다. [3]

 

즉, LONG는 숫자, BSTR은 문자 타입을 의미하며, void는 반환하는 값이 없다는 구분이다.

C언어 능숙자에겐 별거 아니겠지만, 나에겐 오랜 검색이 필요했다.

 

 

OPEN API 제어 및 편집을 위한 인터페이스 매소드는 다음과 같다. [4]

ID 타입 이름 설명
1 LONG CommConnect 로그인 윈도우를 실행한다
2 void CommTerminate  이상 지원하지 않는 함수
3 LONG CommRqData 통신 데이터를 송신한다
4 BSTR GetLoginInfo 로그인 정보를 반환한다
5 LONG SendOrder 주식주문 Tran 을 송신한다
6 LONG SendOrderCredit 주식 신용주문 Tran 을 송신한다
7 void SetInputValue  
8 LONG SetOutputFID  
9 BSTR CommGetData 이 함수대신 용도에 맞는 전용 함수를 사용할 것
  -조회 정보 요청 GetCommData()
  -실시간정보 요청 GetCommRealData()
  -체결정보 요청 GetChejanData()
10 void DisconnectRealData 리얼 시세를 끊는다
11 LONG GetRepeatCnt 수신 받은 데이터의 반복 개수를 반환한다
12 LONG CommKwRqData 관심종목을 조회 한다
13 BSTR GetAPIModulePath OpenApi 모듈이 설치되어 있는 디렉토리를 반환한다
14 BSTR GetCodeListByMarket 장구분별 종목코드 리스트를 반환한다
15 LONG GetConnectState 통신 접속 상태를 반환한다
16 BSTR GetMasterCodeName 종목코드의 종목명을 반환한다
17 LONG GetMasterListedStockCnt 종목코드의 상장주식수를 반환한다
18 BSTR GetMasterConstruction 종목코드의 감리구분을 반환한다
19 BSTR GetMasterListedStockDate 종목코드의 상장일을 반환한다
20 BSTR GetMasterLastPrice 종목코드의 전일가를 반환한다
21 BSTR GetMasterStockState 종목코드의 종목상태를 반환한다
22 LONG GetDataCount 레코드의 반복개수를 반환한다
23 BSTR GetOutputValue 수신 데이터를 반환한다
24 BSTR GetCommData 수신 데이터를 반환한다
25 BSTR GetCommRealData 실시간 데이터를 반환한다
26 BSTR GetChejanData 체결잔고 데이터를 반환한다
27 BSTR GetThemeGroupList 테마코드와 그룹의 리스트를 반환한다
28 BSTR GetThemeGroupCode 테마코드에 해당하는 종목코드를 반환한다
29 BSTR GetFutureList 지수선물 코드 리스트를 반환한다
30 BSTR GetFutureCodeByIndex 지수선물 코드를 반환한다
31 BSTR GetActPriceList 지수옵션 행사가 리스 트를 반환한다
32 BSTR GetMonthList 지수옵션 월물 리스트를 반환한다
33 BSTR GetOptionCode 지수옵션 종목코드를 반환한다
34 BSTR GetOptionCodeByMonth 같은 행사가 다른 월물의 종목코드를 반환한다
35 BSTR GetOptionCodeByActPrice 같은 월물 다른 행사가의 종목코드를 반환한다
36 BSTR GetSFutureList 주식선물 코드 리스트를 반환한다
37 BSTR GetSFutureCodeByIndex 주식선물 코드를 반환한다
38 BSTR GetSActPriceList 주식옵션 행사가를 반환한다
39 BSTR GetSMonthList 주식옵션 월물을 반환한다
40 BSTR GetSOptionCode 주식옵션 코드를 반환한다
41 BSTR GetSOptionCodeByMonth 주식옵션 월물만 변경된 코드를 반환한다
42 BSTR GetSOptionCodeByActPrice 주식옵션 행사가만 변 경된 코드를 반환한다
43 BSTR GetSFOBasisAssetList 주식선옵 기초자산코드와 이름을 반환한다
44 BSTR GetOptionATM 지수옵션 ATM 을 반환한다
45 BSTR GetSOptionATM 주식옵션 ATM 을 반환한다
46 BSTR GetBranchCodeName 회원사 코드와 이름을 반환한다
47 BSTR CommInvestRqData 지원하지 않는 함수
48 LONG SetInfoData 아이디별 자동로그 인이 접속이 필요할 때 사용한다
49 LONG SetRealReg 실시간 등록을 한다
50 void SetRealRemove 종목별 실시간 해제 (SetRealReg로 등록한 종목만 해제 가능)
51 LONG GetConditionLoad 서버에 저장된 사용자 조건식을 가져온다
52 BSTR GetConditionNameList 조건검색에 필요한 조건명 리스트를 받아온다
53 void SendCondition 조건검색 조회 TR 을 송신한다
54 void SendConditionStop 실시간 조건검색을 중지한다
55 Variant GetCommDataEx 차트 조회한 데이터 전부를 배열로 받아온다

 

 

OPEN API 컨트롤 이벤트를 목록은 다음과 같다. 이벤트 목록은 이름이 "On"으로 시작한다. [4]

 

ID 타입 이름 설명
1 void OnReceiveTrData Tran 수신시 이벤트
2 void OnReceiveRealData 실시간 시세 이벤트
3 void OnReceiveMsg 수신 메시지 이벤트
4 void OnReceiveChejanData 주문 접수 확인 수신시 이벤트
5 void OnEventConnect 통신 연결 상태 변경시 이벤트
6 void OnReceiveRealCondition 조건검색 실시간 편입 이탈종목 이벤트
7 void OnReceiveTrCondition 조건검색 조회응답 이벤트
8 void OnReceiveConditionVer 로컬에 사용자조건식 저장 성공여부 응답 이벤트

 

 

 

인터페이스 메소드와 이벤트 목록은 자주 보면서 눈에 익어야 코딩이 원활하겠다.

지금까지 별생각 없이 입력을 했는데, KOA에 대해 공부를 조금 하니 왜 그렇게 코딩을 해야 하는지, 하드 조각모음 하듯 조금씩 이해되고 있다. 

 

 

 

도움받은 고마운 글들

[1] techterms.com/definition/long

[2] ko.wikipedia.org/wiki/Void_%ED%83%80%EC%9E%85

[3] docs.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr

[4] 키움 OPEN API+ 개발 가이드(첨부 참고)

kiwoom_openapi_plus_devguide_ver_1.5.pdf
2.16MB

 

 

 

2021.01.06. 코리.

 

 

파이썬을 학습하며 남기는 블로그입니다.
질문, 지적, 조언은 항상 환영합니다.

 

 

+ Recent posts