이전 글 보기
05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기)
코드만 주구장창 치다 보니 뭔가 정리가 되지 않는 기분이 들었다. 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는 위와 같은 화면을 구성하고 있다.
1번 작업창은 다음의 기능을 수행한다.
- 영웅문 HTS의 화면에 해당되는 서비스
- 전체 TR 서비스 목록
- TR의 IO
- 실시간 타입과 FID
2번 정보창은 다음의 기능을 수행한다.
- 선택된 TR에 대한 정보
- TR의 input값 설명
- 코딩 샘플(C++)
- 실시간 필드 정보
3번 입력창은 다음의 기능을 수행한다.
- 선택된 TR에 대한 input값 입력
- input값 설명
4. 결과창은 다음의 기능을 수행한다.
- TR 요청에 대한 결과
- 실시간 수신 데이터
- 조회 TR 히스토리
그리고 화면 하단에 "실시간 목록", "TR목록", "종목정보", "개발가이드", "화면목록"의 탭이 있다.
함수를 선택하고자 할 때 함수 앞에 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+ 개발 가이드(첨부 참고)
2021.01.06. 코리.
파이썬을 학습하며 남기는 블로그입니다.
질문, 지적, 조언은 항상 환영합니다.
'Bigdata_tips' 카테고리의 다른 글
[python] 머신러닝 주가 예측 및 자동 매매 - 09_키움 OPEN API 계좌평가 잔고 가져오기 (0) | 2021.01.13 |
---|---|
[python] 머신러닝 주가 예측 및 자동 매매 - 08_키움 KOA 이해하기_2 (0) | 2021.01.09 |
[python] 머신러닝 주가 예측 및 자동 매매 - 06_키움 KOA 설치하기 (0) | 2021.01.05 |
[python] 머신러닝 주가 예측 및 자동 매매 - 05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기) (0) | 2021.01.05 |
[python] 머신러닝 주가 예측 및 자동 매매 - 04_키움 open api 로그인 하기 (1) | 2021.01.04 |