한국투자증권 주식매매프로그램 만들기

파이썬 주식매매프로그램 만들기

미국 주식 프로그램 만들기(eFriend expert)

2. 한국투자증권 API 설명

토폴로지 2022. 3. 16. 21:05

한투 API는 기본적으로  OCX 컨트롤(ITGExpertCtl.ocx) ActiveX를 사용한다.

이 ActiveX 컨트롤를 사용하여 input 데이터를 전송하고 output 데이터를 수신한다.

이 컨트롤은 일반적으로 (데이터)조회서비스로 사용될 수도 있고 (데이터)실시간 서비스에 사용될 수도 있다.

 

=> 간단하게 말하면 OCX 컨트롤이라는 ActiveX써서 한투 주식 데이터 사고 팔고 실시간 조회도 한다는 말

 

하지만 시대가 어느 땐데 라떼는 하면서 MFC와 ActiveX를 쓸 것인가...

친절하신 분이 파이썬과 Qt로 짜주셨으니 그 코드를 이용해서 만들도록 하자

알맹이는 ActiveX지만 실제로 다루는 것은 파이썬이다.

 

PyQt5.QAxContainer 에 있는 QAxWidget 클래스는 한투에 있는 ITGExpertCtl.ITGExpertCtlCtrl.1를 받을 수 있다.

뭔말이냐면 앞에서 언급한 OCX 컨트롤를 파이썬에서 쓰고 싶으면

QAxWidget("ITGExpertCtl.ITGExpertCtlCtrl.1") 형식으로 호출하면 된다는 것이다

이걸로 복잡한 ActiveX 사용법을 알 필요가 없어졌다. 이제 PyQt 영역으로 넘어온 것이다.

 

 ActiveX는 호출했고 이제

1. 데이터를 입력하고

2. 전송

3. 응답 받고

4. 데이터 확인

 

순서로 가면 된다.

 

1. 데이터를 입력하고

 

앞서 봤던 코드에서 tran_os_us_buy.SetSingleData로 데이터 세팅하는 부분이다.

API 문서를 보고 API 적힌대로 알맞게 SetSingleData를 설정하고

 

2. 전송

tran_os_us_buy.RequestData("OS_US_BUY")

요걸로 매수 주문을 전송한다

 

요때 

tran_os_us_buy.GetSendRqID() 이 함수로 매수주문 번호를 알아볼 수 있고

전송이 잘되거나 실패하면 응답이 오기 때문에 놓치지 않기 위해

self.tran_os_us_buy.ReceiveData.connect(self.tran_os_us_buy_receivedata) 

요렇게 RecevieData 함수로 이벤트 연결을 해놓는다

 

3. 응답 받고

응답 받으면 앞서 이벤트를 연결해놨기 때문에 자동으로 아래 함수로 빠진다

tran_os_us_buy_receivedata

 

4.

매수 주문을 넣으면 아래와 같은 코드로 응답을 받을 수 있다

self.tran_os_us_buy.GetReqMsgCode() 

self.tran_os_us_buy.GetReqMessage()

MsgCode는 여러가지가 있을텐데 마찬가지로 API 문서 보면 몇번은 매수주문 성공 몇번은 매수 주문 실패 이렇게 있을 것

Messge는 메세지이다. 

 

이렇게 대략적인 설명이 끝나게 되는데 API가 뭔말하는지 모르겠다 하시는 분들을 위해서 좀더 설명하자면 expertview를 펼친다.

 

pdf로도 있지만 expert viewer가 더 보기편하다 

왼쪽에 보면 미국 매수 주문(OS_US_BUY) 라고 적혀있다.

그래서 tran_os_us_buy.RequestData("OS_US_BUY")에 OS_US_BUY를 쓴거고 tran_os_us_buy는 변수명이라서 암꺼나 써도 상관없다

그럼 매도를 할려면 뭘써야한다? OS_US_SEL을 쓰면되겠죠?

 

OS_US_BUY 안에 보면 세팅해줘야할 값이 오른쪽에 쭈루루룩 나와있는데

0번에는 string으로 종합계좌번호를 적어라고 적혀있다 그래서 

self.tran_os_us_buy.SetSingleData(0, "12345678")  0번째에 계좌번호를 적은거고

1번에는 계좌상품코드

그래서 self.tran_os_us_buy.SetSingleData(1, "01") 01을 적었다.

7번은 연락전화번호를 적으라는데 오른쪽 보면 필수값 아님이라고 적혀있다 

self.tran_os_us_buy.SetSingleData(7, "") 그래서 비웠다.

8번째도  self.tran_os_us_buy.SetSingleData(8, "") #운용사지정주문번호 입력하지 않음 그래서 비웠다.

난 지정가 주문을 하고 싶었기 때문에  self.tran_os_us_buy.SetSingleData(10, "00") 그래서 00을 쓴거다

본인이 LOO를 주문하고 싶으면 00대신 32를 쓰면되는거다.

 

그외 API 함수를 쓰고 싶으면 본인이 API 문서 뒤적뒤적거리면서 찾아서 맞춰서 쓰면된다 

 

 

반응형