2. 해외선물/2-4. 해외선물 API (사용)

(키움증권 해외선물 OpenAPI-W) 자동매매를 위한 dynamicCall 함수 알아보기

봄이오네 2023. 1. 1. 08:09
반응형
목 차
1. 들어가며
2. 사전 설명
3. dynamicCall 함수 활용 예시
4. 마치며

1. 들어가며

지난 글에서는 OpenAPI-W를 활용하기 위한 TR 요청을 알아보았다.
TR 요청은 키움서버에 "데이터 입력 → 요청 → 연결 → 데이터 수신"의 4단계로 구성된다.

이번 글에서는 dynamicCall 함수를 통해
데이터 입력/요청하는 방법을 알아볼 것이다.


2. 사전 설명

아래는 dynamicCall 함수에 대한 설명이다.

  • 함수 정의 : 서버에 데이터를 송수신하는 기능
  • 관련 모듈 : PyQt5의 QAxContainer 모듈에서 제공한다.
  • 활용 방법 : 파이썬에서 from PyQt5 import QAxContainer 을 불러온다.
  • 관련 함수 : OpenAPI-W를 통해 키움서버에 접근하기 위해 SetInputValue 및 CommRqData, GetCommData에서 활용

위에서 설명하였듯이,
dynamicCall은 키움증권에서 제공하는 함수인
SetInputValue 및 CommRqData, GetCommData 등에서 활용되고,
또한, dynamicCall은 로그인할 때도 이용되는 등 여러가지에서 활용된다.


3. dynamicCall 함수 활용 예시

from PyQt5.QAxContainer import *

self.kiwoom = QAxWidget("KFOPENAPI.KFOpenAPICtrl.1")

self.kiwoom.dynamicCall("CommConnect(1)")
self.kiwoom.dynamicCall("GetCommonFunc(QString, QString)", "ShowAccountWindow", "")
self.kiwoom.dynamicCall("SetInputValue(QString, QString)", sid, svalue)
self.kiwoom.dynamicCall("CommRqData(QString, QString, QString, QString)", rqname, trcode, prenext, scr)
self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", trcode, recordname, index, itemname)


① from PyQt5.QAxContainer import *
→ dynamicCall 함수를 활용하기 위해 QAxContainer 모듈을 임포트 한다.

② self.kiwoom = QAxWidget("KFOPENAPI.KFOpenAPICtrl.1")
: QAxWidget 모듈을 활용하여 OpenAPI-W의
레지스트리인 "KFOPENAPI.KFOpenAPICtrl.1"에 접근하는 내용을
→ self.kiwoom에 인스턴스 한다.
(즉, OpenAPI-W에 접속한다는 내용이다)

③ self.kiwoom.dynamicCall("CommConnect(1)")
: self.kiwoom : OpenAPI-W에 접속(②)한다.
dynamicCall : OpenAPI-W에 데이터를 보낸다.
"CommConnect(1)" : OpenAPI-W에 로그인하라.
→ 즉 self.kiwoom.dynamicCall("CommConnect(1)") 는
"OpenAPI-W에 접속하여 로그인 데이터를 보낸다."는 의미이다.

④ self.kiwoom.dynamicCall("GetCommonFunc(QString, QString)", "ShowAccountWindow", "")
→ "OpenAPI-W에 접속하여 '비밀번호 등록' 창을 띄운다" 의미이다.

⑤ self.kiwoom.dynamicCall("SetInputValue(QString, QString)", sid, svalue)
→ "OpenAPI-W에 접속하여 문자형 2개의 데이터를 키움서버에 입력(SetInputValue)한다.

⑥ self.kiwoom.dynamicCall("CommRqData(QString, QString, QString, QString)", rqname, trcode, prenext, scr)
→ "OpenAPI-W에 접속하여 문자형 4개의 데이터를 키움서버에 요청(CommRqData)한다.

⑦ self.kiwoom.dynamicCall("GetCommData(QString, QString, int, QString)", trcode, recordname, index, itemname)
→ "OpenAPI-W에 접속하여 문자형 3개, 정수형1개의 데이터를 키움서버에서 수신(GetCommData)받는다.


4. 마치며

PyQt5의 QAxContainer 모듈에서 제공하는 dynamicCall 함수를 이용하여
OpenAPI-W를 통해 키움서버로부터
데이터 입력-요청-수신받는 방법을 알아보았다.

관건은 ②의 self.kiwoom = QAxWidget("KFOPENAPI.KFOpenAPICtrl.1") 이다.
이유는 QAxWidget 모듈을 활용하여 키움서버의 레지스트리에 접속하기 때문이다.

즉, 키움서버에 접속(②)한 후, dynamicCall 함수를 이용하여 데이터의 송/수신을 받는다.

dynamicCall 함수는 시스템 구축시 자주 사용된다.
그 활용 형태를 제대로 숙지하도록 하자.

반응형