트레이딩

[키움API] KOA StudioSA 톺아보기 - 조회와 실시간 데이터 처리 (2)

성민석 2023. 7. 20. 16:32

안녕하세요 성민석입니다.

오늘은 키움증권 API와 관련된 기본 설명과 동작을 설명드릴 예정입니다. 기본적으로 KOA StudioSA에서 제공해주는 내용을 바탕으로 글을 작성해나갈 예정입니다. 여기서 제 개인적인 의견이나 첨언이 들어갈 경우 파란색으로 표시하겠습니다.

 

지난 포스팅에는 키움API와 관련된 단타 매매를 구현하기 위해 가장 중요한 실시간 데이터 수신에 대해서 알려드렸습니다. 아마 많은 분들이 키움증권을 처음에 사용하시면 어려워하시는 이유 중 하나가 바로 실시간 데이터 처리라고 생각합니다. 이해를 다 하면 어렵지 않은데, 처음엔 정말 복잡하긴 합니다. 

2021.11.02 - [트레이딩] - [키움API] 조회와 실시간 데이터 처리 (1) - TR조회

 

[키움API] 조회와 실시간 데이터 처리 (1) - TR조회

안녕하세요 성민석입니다. 오늘은 키움증권 API와 관련된 기본 설명과 동작을 설명드릴 예정입니다. 기본적으로 KOA StudioSA에서 제공해주는 내용을 바탕으로 글을 작성해나갈 예정입니다. 여기서

minsuk-sung.tistory.com

이번 포스팅에서는 키움증권API를 이용하여 실시간 데이터를 수신하는 내용에 대해서 알려드리겠습니다. 중간에 정말 긴 공백이 있었네요.

 


실시간 데이터 관련하여

시세조회요청이 성공하면 해당종목의 실시간시세 데이터가 서버에 자동으로 등록됩니다. 이후 해당종목의 실시간 시세데이터는 OnReceiveRealData 이벤트로 수신됩니다. (사실상 여기 함수를 모두 거쳐서 데이터가 수신됩니다. 이후 sRealType를 구별하여 체결이나 호가 데이터를 따로 구분해서 처리하면 됩니다.) 또는 시세조회가 필요없고 실시간시세만 필요한 경우는 SetRealReg 함수를 사용하여 특정종목(복수종목 가능)의 실시간시세를 서버에 등록할 수 있습니다.

 

※ SetRealReg() 함수는 조건검색 항목에서 사용법을 설명하고 있습니다. KOA Studio의 실시간 탭을 여시면 Real Type (실시간타입) 목록을 확인할 수 있습니다. 이들 하나하나를 실시간 타입이라고 합니다. 각 실시간타입에 포함되는 데이터항목들의 FID(Feild ID)들이 그룹핑되어 있습니다. (예시는 가장 흔하게 사용하는 주식체결로 가져왔습니다.) 예를들어 실시간 타입 "주식시세"는 FID 10 현재가 ~ FID 568 하한가발생시간까지 FID로 구성되며 한꺼번에 전달됩니다. 또 실시간 타입 "주식체결"는 FID 20 체결시간 ~ FID 1313 Extra Item까지 FID가 한번에 전달됩니다.

 

(참고로 장시작시간의 경우는 SetRealReg하지 않아도 OnReceiveRealData로 수신됩니다.)

 

 

물론 KOA Studio에 나와있는 FID가 전부가 아니란 부분이 조금 함정입니다.

저기에는 적혀있지 않지만, 몇몇 FID도 함께 포함돼서 오기 때문에 반드시 직접 디버깅을 해보셔야합니다.

아래는 주문체결의 경우, 제가 수신했던 FID를 정리해둔 코드입니다.

 

 

실시간시세 사용법

시세관련 TR서비스를 요청하는 경우 자동으로 서버에 해당 종목의 실시간시세가 등록 됩니다. 시세관련 TR서비스 조회요청이 불필요한 경우 SetRealReg 함수를 통해 조회없이 실시간시세 등록이 가능합니다.

 

방법1. 조회 서비스 이용

SetInputValue(사용자 호출) -> CommRqData(사용자 호출) -> OnReceiveTrData(이벤트 발생) ->OnReceiveRealData(이벤트 발생)

 

방법2. SetRealReg 함수 이용 (사실 저는 이 방법만 쓰고 있습니다.)

SetRealReg(사용자 호출) -> OnReceiveRealData(이벤트 발생)

 

여기에는 적혀있지 않지만, 여러분들께서 개발하실 때 반드시 비동기적으로 코딩을 해두시길 권장합니다.

그렇지 않으면 실시간으로 수신되는 데이터의 양에 압도당하실 수 있습니다. 아래는 제가 수집하고 있는 실시간 데이터 예시입니다.

 

주문관련 실시간 데이터

실시간 타입 "주문체결(주문접수와 주문체결로 사실 또 나뉩니다. 이게 조금 헷갈릴 수 있습니다.)", "잔고", "파생잔고"는 주문관련 실시간 데이터를 전달합니다. 데이터요청이나 서버등록 필요없이 주문발생시 수신되는 실시간타입 입니다. 실시간시세와는 다르게 조회요청이나 SetRealReg() 함수로 등록해서 사용할 수 없습니다. 수신 이벤트는 OnReceiveChejanData 이벤트입니다. (조금 헷갈릴 수 있는게 RealData가 아닌데 이벤트 발생하면 바로 여기로 수신됩니다.) 영웅문4 HTS, 영웅문S MTS 를 통한 주문들도 동일ID로 접속한 경우 OpenAPI로 수신됩니다.

 

사실 이 부분도 설명이 처음에 구체적으로 되어 있지 않아서 조금 난감했는데, 결국 아래와 같은 데이터들이 수신됩니다.

물론 제 경우엔  Sqlite3를 이용해서 모두 데이터베이스화 시켜뒀는데, 처음에 하시게 되면 이렇게 깔끔하게 오지 않고 모두 String 형태로 오게 되니 파싱하시는 작업부터 하셔야할 것 같습니다. 이게 조금 하드한 작업 중 하나입니다.

 

<주문체결>

 

<잔고>

 

이러한 실시간 데이터의 FID도 아까 목록에서 확인 가능합니다.

물론 또 주의하셔야할 부분은 여기에 있는 데이터가 또 다 오는 것은 아니란 점입니다.

 

 

아래 실시간 타입은 시스템 내부용으로, 사용자가 사용할수 없는 실시간 타입입니다. (내부적으로 사용하는 듯 합니다.)

1. 임의연장정보

2. 시간외종목정보

3. 주식거래원          (개인적으로 제공해주지 않아서 아쉬운 실시간 데이터들)

4. 순간체결량          (개인적으로 제공해주지 않아서 아쉬운 실시간 데이터들)

5. 선물옵션합계

6. 투자자별매매       (개인적으로 제공해주지 않아서 아쉬운 실시간 데이터들)


 

키움증권 API와 관련된 자세한 내용을 확인하고 싶으신 분들은 PDF를 확인해보시면 좋을 것 같습니다.

 

마지막으로 같이 트레이딩하는 분들과 소통하고 싶습니다. 언제든지 트레이딩이나 인공지능과 관련된 내용을 함께 공유하고 토론하고 싶으시다면 아래의 오픈 카카오톡 링크로 연락주세요.
https://open.kakao.com/me/minsuksung

 

성민석 (Minsuk Sung)님의 오픈프로필

인공지능을 공부하는 연구자이자 시스템 트레이딩을 하는 트레이더입니다. 

open.kakao.com

 

728x90
반응형