키움 OPEN API 일봉데이터 가져오기

 

 

이전 글 보러 가기

 

01_시작

02_기본설정

03_pykiwoom vs. 직접코딩

04_키움 open api 로그인 하기

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

06_키움 KOA 설치하기

07_키움 KOA 이해하기

08_키움 KOA 이해하기_2

09_키움 OPEN API 계좌평가 잔고 가져오기

 

 

 

이전까지 키움 OPEN API에 대한 기본적인 조회와 기능을 알아봤다면, 이제 데이터를 가져오는 방법이다. 그 시작으로 일봉데이터를 가져오는 방법을 학습한다.

 

 

영웅문 삼성전자 일봉 조회

 

 

영웅문에서 일봉차트를 조회하면 위와 같은 결과를 볼 수 있다. 보기에는 복잡해 보이는 저 차트를 그리는 데이터는 생각보다 간단한다.

 

종목의 시가, 종가, 저가, 고가, 거래량. 5가지 데이터만 있으면 캔들 차트를 그릴 수 있다.

 

 

일봉차트

 

 

시가, 종가, 고가, 저가 데이터로 일봉차트를 그릴 수 있고, 이동평균선(보라색, 파란색, 노란색 선)은 과거 20일, 60일, 120일 등의 평균 가격으로 그릴 수 있다. 

 

즉, 일봉데이터를 가져온다는 말은, 하루의 시가, 종가, 고가, 저가, 거래량 데이터를 가지고 온다는 말이다.

 

 

 

영웅문 일봉 조회, 600일

 

일봉차트를 조회하면 600일치만 가지고 온다. 위 차트에서 마지막 날짜가 2018년이다. 데이터 분석을 위해서는 더 많은 날짜의 데이터가 필요하다.

 

 

영웅문 일봉 조회, 9541일

 

과거 차트 조회 버튼을 계속 눌러주면 600일씩 늘어난다. 삼성전자의 경우, 9541일까지인 1985년까지 조회된다.

코드에서도 과거 자료가 있는 경우, 과거 차트 조회 버튼을 계속 눌러줘야 한다.

 

 

삼성전자 일봉 과거 데이터

 

과거 조회 버튼을 누를수록 화면에 전체 일봉 수(9541)가 늘어나는 것을 확인할 수 있다.

 

그러므로 "09_계좌평가 잔고 가져오기"에서 살펴본 "sPrevNext"를 이번에도 사용해야 한다. 

 

 

 

 

다음으로 조회할 종목의 리스트는 만들어야 한다. 시장 구분별로 장내, 코스닥, ELW, ETF, KONEX 등으로 구분할 수 있으며, 시장 구분에 대한 파라미터와 함께 데이터를 요청할 수 있다.

 

키움 OPEN API - KOA 종목 목록 가져오기 

 

키움 KOA에서 종목정보 관련 함수인 "GetCodeListByMarket()"를 제공한다. 시장 구분 값을 마라메터로 함께 제공하면 된다. 학습에서는 코스닥 구분 값이 10번을 사용한다.

 

 

 

키움 KOA 주식일봉차트조회

 

키움 KOA의 TR목록에서 opt10081번으로 주식 일봉 차트조회 요청을 할 수 있다. 위에서 살펴본 바와 같이, 한 번에 600개 데이터가 조회된다는 안내가 있다.

 

넘겨야 할 파라미터는 "종목코드, 기준일자, 수정주가구분" 3가지이다.

  - 종목코드는 위에서 살펴본 "GetCodeListByMarket()" 함수로 확보한다.

  - 날짜는 오늘을 기준으로 하려면 공란으로 둔다. 

  - 수정주가구분은 0과 1로 구분되는데, 1번이 수정주가구분이다. 삼성전자 주가가 2018년에 약 250만원이었는데, 이를 약 50:1로 액면분할하며 주가가 53,000원이 되었다. 수정주가구분을 0으로 주면 2018년 주가는 250만원, 현재 주가는 9만원으로 조회된다. 액면분할 등을 바로잡아 놓은 주가가 수정주가이다.

 

 

3가지 파라미터를 넘기면 받을 수 있는 데이터는 다음의 15개이다.

 

0. 종목코드

1. 현재가

2. 거래량

3. 거래대금

4. 일자

5. 시가

6. 고가

7. 저가

8. 수정주가구분

9. 수정비율

10. 대업종구분

11. 소업종구분

12. 종목정보

13. 수정주가이벤트

14. 전일종가

 

0~7번까지의 8개 데이터는 제공되는데, 8~14번까지의 7개 데이터는 조회/제공되지 않는다.

 

 

 

일봉데이터 조회 코드를 짜기 위한 기본 내용은 여기까지 이고, 코드는 다음 글에서 소개한다.

 

 

 

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

 

 

2021.01.14. 코리.

 

 

 

키움 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. 코리.

 

 

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

 

 

 

키움 KOA 설치하기

 

 

이전글 보기

01_시작

02_기본설정

03_pykiwoom vs. 직접코딩

04_키움 open api 로그인 하기

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

 

 

지난 5번째 글을 작성하다가 깨우친게 있었다. KOA를 자주 사용해야 하는데 설치 방법에 대해 언급하지 않았다.

사실.... 설치랄 것도 없는데;;; 그래도 기본 설정을 위해 알아야 한다.

 

 

키움 KOA

 

 

KOA는 키움 API 사용설명서이다.

 

API에 요청할 수 있는 것이 무엇인지 알려주며,

시험삼아 요청할 수 있게 해주고

요청하기 위해 어떤 함수와 파라미터를 사용해야 하는지 

등등 많은 것을 알려준다.

 

KOA Studio에서 KOA가 무슨 약자인지는 모르겠지만, 추정하면.... Kiwoom Open Api Studio가 아닐까 한다.

 

 

위 사진에서 처럼 KOA를 다운로드 받는다. 압축파일이 하나 다운로드 되는데, 그 안에 파일이 2개 있다.

KOA 실행파일을 더블 클릭하면 KOA가 실행된다. 별도의 설치 과정없이 그냥 실행된다.

압축파일 속 파일 2개를 키움 API 설치 폴더로 옮겨 둔다.

 

 

나는 키움 OPEN API를 C 드라이브의 "Kiwoom" 폴더의 "OpenApi"에 설치했다. 그래서 다음의 폴더에 옮겨두었다.

 

키움 KOA 파일 위치

 

 

매번 저 폴더로 이동하기 귀찮으니깐, KOAStudioSA 파일을 우클릭하여 "시작화면에 고정"해서 사용 중이다.

 

 

2021.01.05. 코리.

 

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

 

+ Recent posts