2. 해외선물/2-1. 해외선물 자동매매 연구

(키움증권 해외선물 자동매매 파이썬) (1) 실시간 데이터 받아오는 원리

봄이오네 2023. 11. 3. 08:07
반응형

 

목 차
1. 들어가며
2. 사전설명
   1) 개발가이드에서 실시간 데이터 받아오는 방법
      ① 국내주식 OpenAPI 활용
      ② 해외선물 OpenAPI-W 활용
   2) WKOA Studio에서 실시간 데이터 받는 방법 확인
3. WKOA Studio를 통해 실시간 데이터 받는 방법
   1) TR 목록을 통해 데이터를 input 할 수 있도록 하자.
   2) WKOA Studio의 실시간 목록 화면
   3) WKOA Studio에서 실시간 데이터 받는 화면
4. 실시간 데이터 받는 원리
5. 마치며

 

1. 들어가며

국내주식으로 자동매매(OpenAPI)를 할 때 실시간 데이터를 수신받는 코드를 실행해 보았다. 다만, 완성되지 않는 봉은 필자에게 의미가 없다고 생각했다. 그래서 실시간 데이터가 아닌, 받아온 데이터를 알고리즘으로 "확인"하고 진입하는 패턴(非실시간 데이터 얻기)에 관심을 가졌다. 구독자 요청에 의하여 작성하는 글이다.
 
이 글에서는 해외선물에서 실시간 데이터 얻어오는 방법에 대해 설명할 것이다.
 


2. 사전설명

1) 개발가이드에서 실시간 데이터 받아오는 방법

① 국내주식 OpenAPI 활용
실시간 데이터를 받아오는 방법이 국내주식과 약간 다르다는 점을 느꼈다. < 그림1-1 >과 같이 국내주식은 setrealreg 함수를 통해 키움증권에 "종목"을 등록한 후 실시간 데이터를 받는다. 국내주식의 실시간 데이터 받기는 인터넷에 좋은 설명이 많다. 검색을 통해 알아보는 것도 좋아 보인다. 여기서는 해외선물을 설명한다.

그림1-1. 국내주식 OpenAPI를 통해 실시간 데이터 얻는 방법

 
② 해외선물 OpenAPI-W 활용
키움증권의 해외선물 개발가이드에는 "실시간 데이터 받기"는 < 그림1-2 >와 < 그림1-3 >만 기록되어 있다. 후우~~~ 긴 한숨이 나온다. 개발가이드에 너무 많은 기대를 하면 안되는데, 너무 추상적으로 적어 놓으니 제대로 이해하기 힘들다. ㅠ
 
그래도, 개발가이드 내용은 한번 볼 필요가 있다. < 그림1-2 >에서 OnReceiveRealData에는 3가지 변수(종목코드, realtype, realdata)가 들어가는 걸 확인할 수 있다. 3개 변수 모두 문자형(str)이다. 이게 설명의 끝이다..!!! ㅠㅠ

그림1-2. 실시간 데이터를 받으려면 OnReceiveRealData를 활용해야 한다.

 
< 그림1-3 >에는 실시간 데이터 활용시 화면번호 끊는방법이 보이고, 중요한 GetCommRealData의 함수가 보인다. realtype와 fid를 넣어달라고 한다. realtype은 문자형(str)이고 fid는 정수형(int)이다.
 
자! 이게 설명의 끝이다. 이제부터 < 그림1-2 >와 < 그림1-3 >으로 실시간 데이터를 만들어야 한다. 앞이 캄캄하구나..ㅎㅎ
천천히 알아보도록 하자.

그림1-3. GetCommRealData 함수를 통해 데이터를 받아오는 방법

 

2) WKOA Studio에서 실시간 데이터 받는 방법 확인

인터넷 검색을 해보아도 그렇고, 키움증권의 "해외선물 OpenAPI+ 게시판"에 가도 이렇다할 설명이 부족하다. 결국 WKOA Studio에서 확인하는 방법 밖에 없다.
 
< 그림1-4 >의 ③을 잘 보자. WKOA Studio를 실행하면 < 그림1-4 >처럼 화면이 나오는데, "TR 목록"에서는 종목코드, 계좌번호 등의 입력을 통해 데이터를 받아왔다. 이를 우리는 "非실시간 데이터 요청"이라고 정의하자.
 
실시간 데이터를 받기 위해, 데이터(종목코드 등)를 ③에 넣으려고 하는데, 데이터를 요청할 수 있는 빈칸이 안 보인다. 어떻게 하라는 것인가?
 

그림1-4. WKOA Studio에서 확인한 실시간 목록

 


3. WKOA Studio를 통해 실시간 데이터 받는 방법

결론부터 말하면, < 그림1-4 >와 같이 데이터를 받아오는 것이 아니다. 필자가 "실시간 데이터" 받을 수 있었던 이유는 < 그림1-2 >와 < 그림1-3 >의 OnReceiveRealData와 GetCommRealData에서 힌트를 얻었다.
 
무슨 말인가? OnReceiveRealData와 GetCommRealData은 어디서 많이 본 유형이 아닌가? 필자가 많이 설명했던 "데이터 입력-요청-연결-수신"의 4단계 중 연결과 수신을 나타낸다. 실시간 데이터 요청 또한, "非실시간 데이터 요청"처럼 코드를 작성(입력-요청-연결-수신)"으로 코드를 구성하면 안될까? 그럼 어떤 TR목록으로 입력/요청해야 하는 하는가?
해외선물 자동매매 코드 작성에서 막힐 때는 WKOA Studio에서 실험해 보아야 한다.
 

1) TR 목록을 통해 데이터를 input 할 수 있도록 하자.

< 그림2-1 >을 확입해보자. "TR목록"을 클릭하고, opc10002의 INPUT을 클릭(②)하자. < 그림2-1 >과 같이 속성(③)에 종목코드와 시간단위를 입력할 수 있도록 빈칸이 생긴다.
 

그림2-1. WKOA Studio에서 "TR목록"에서 요청한다.

 

2) WKOA Studio의 실시간 목록 화면

여기서부터 구체적으로 설명한다. < 그림2-2 >의 화면을 잘 기억하자.
① WKOA Studio에서 "실시간 목록"을 클릭한다.
② 실시간 목록에서 "해외선물옵션" 목록을 확인할 수 있다.
③ < 그림2-1 >에서 opc10002의 input을 누를 수 있도록 앞에서 설정하였다. (종목코드와 시간단위를 넣어준다)
④ < 그림1-3 >에서 보였던 숫자이며, ④에서 본 숫자가 fid이다. 키움서버에서 수신받은 값이다.
⑤ 실시간 데이터가 출력되는 화면이다.
⑥ 조회를 누르면 실시간 데이터가 ⑤에 출력된다.
 

그림2-2 실시간목록의 화면 구성을 확인한다.

 

3) WKOA Studio에서 실시간 데이터 받는 화면

WKOA Studio의 체결시간, 현재가 등을 수신받는 화면이다.

그림2-3. 실시간 데이터를 수신받는 화면

 


4. 실시간 데이터 받는 원리

< 그림3 >은 키움증권 OpenAPI-W를 통해 데이터를 받아오는 순서이다. 필자는 非실시간 데이터 받는 원리(① → ② → ④)에 대해 익숙했다.
 
이번에 실시간 데이터 받는 원리는 < 그림2-2 > 및 < 그림2-3 >을 통해 파악할 수 있었다. 데이터 입력(①) 및 요청(③)을 하고나서, 연결(⑤)을 하면 키움증권에서 이벤트(데이터가 요청왔으니 데이터를 제공하라)가 발생한다. 그 후 데이터를 실시간으로 수신(⑥)받는 원리이다.
 

그림3. OpenAPI-W를 통해 데이터를 받는 원리

 
< 그림3 >과 같이 "데이터 입력-요청-실시간 연결-실시간 수신"의 4단계로 이루어지는 것을 기억하자.
 


5. 마치며

이번 글에서는 실시간 데이터 받는 원리를 WKOA Studio를 통해 확인해보았다. 해외선물 관련 코딩이 막힐 때는 WKOA Studio를 돌려보아야 하는구나...
 
글이 상당히 길어졌다. 다음 글에서는 실시간 데이터 받기의 한계에 대해 알아보자.
 
 

반응형