본문 바로가기

키움증권 OpenAPI with Python

키움증권 Open API 로그인하기

안녕하세요 탱구입니다!

 

이번 포스팅에서는 저번 포스팅에서 다운로드 받았던 키움 Open API+를 사용하는 방법 중에

파이썬을 이용해서 로그인하는 방법을 알아보겠습니다.

 

로그인 함수를 작성하기에 앞서서 GUI(Graphical User Interface)라는 용어에 대해서 알아야 합니다.

주로 파이썬이나 C, C++을 다뤄보셨던 분들은 결과가 cmd창에 텍스트로 출력되는 것을 볼 수 있었습니다.

하지만 이와 달리 GUI란 버튼이나 윈도우 창과 같은 그래픽 요소를 통해서

사용자와 컴퓨터 간에 인터페이스를 구현하는 방식입니다. 

주식을 예로 들면 아래와 같이 HTS가 바로 대표적인 GUI방식의 프로그램이라 할 수 있습니다.

 

저희가 궁극적으로 완성하고 싶은 프로그램도 이 처럼 GUI기반 프로그램일 것입니다.

파이썬에서 PyQt 라이브러리를 이용하시면 GUI 프로그래밍을 하실 수 있습니다.!

 

간단한 예제를 보시고 PyQt를 이해해 봅시다.

위와 같은 GUI를 파이썬으로 구현해보겠습니다.

단 6줄의 코드로 윈도우를 만들고 그안에 'Hello PyQt'라는 문자열을 출력했습니다.

코드를 조금 더 자세히 살펴보면

PyQt5.QtWidgets라는 모듈은 

QtWidgets.pyd라는 이름으로 존재합니다.

 

위의 코드에서 QApplication 클래스에 대한 인스턴스를 생성하고 이를 app이라는 변수로 바인딩 합니다.

app을 통해 exec_ 메서드를 호출하면 프로그램은 이벤트 루프(event loop)에 진입합니다.

즉, 계속 이벤트루프(무한 반복)를 하는 도중에 들어오는 이벤트를 처리할 수 있습니다.

따라서, TUI(기존의 텍스트 기반의 프로그램)은 실행된 후 바로 종료되었지만 GUI는 이벤트루프를 하기 때문에 종료되지 않고 실행 상태로 계속 남아 있을 수 있습니다.

 

GUI 즉, PyQt에 대해서 알아보았습니다. 이제 이번 포스팅의 본론인 

키움증권 open API+에 로그인 하는 방법에 대해서 알아보겠습니다.

 

전체 코드는 다음과 같습니다.

 

 

 

파이썬에서 키움증권에서 제공하는 클래스를 사용하려면 PyQt의 QAxWidget 클래스를 사용해 인스턴스를 생성해야 합니다. 키움증권에서 제공하는 클래스는 각각 고유의 CLSID 또는 ProgID를 가지는데 해당 값을 QAxWidget 클래스의 생성자로 전달하면 인스턴스가 생성됩니다.

 

키움증권의 개발 가이드를 참조하면 CLSID는 

다음과 같이 16진수로 제공하고 있습니다.

 

 

CLSID는 16진수로 구성되어있기 때문에 파이썬에서 사용할 때에는

키움증권에서 제공하는 클래스를 사용하기 위해서 ProgID인 

'KHOPENAPI.KHOpenAPICtrl.1'를 QAxWidget 클래스의 생성자로 전달해서 인스턴스를 생성합니다.

 

이렇게 생성한 인스턴스를 통해서 키움증권에서 제공하는 함수들을 사용해서 프로그램을 진행시켜줍니다.

 

즉, 로그인을 하고 싶다하면

인스턴스를 이용해서 키움증권에서 제공하는 로그인메서드를 불러줍니다.

또한 로그인이 되었는지 안되었는지 확인하는

접속상태를 알려주는 메서드를 호출하여 확인합니다.

 

 

이렇게 CommConnect 메서드를 통해 키움증권 서버에 로그인을 시도하면 키움증권 서버는

OnEventConnect라는 이벤트가 발생합니다.

 

작성했던 프로그램을 실행시켜서 로그인버튼을 클릭하시면

이렇게 로그인이 시도됩니다.

 

로그인이 완료되면 다음과 같이 상태바에 connected 라는 문구가 뜨면서

로그인이 성공됩니다.

 

 

이렇게 키움증권 open API+ 로그인이 완료되었습니다.

 

설명이 많이 미흡합니다 ㅠ

꾸준히 포스팅하면서 글솜씨도 늘려보도록 할게요!

 

포스팅보시다가 이해가 안되시는 부분이나 틀린 부분있으면

댓글로 마구마구 물어봐주세요!

 

제가 알고있는 부분은 바로바로 답변드리고 아니면 같이 고민해보아요!

 

다음 포스팅에서는 키움증권에 주식 기본정보를 TR로 요청하고

받아보는 기능을 추가해보도록 하겠습니다.

 

오늘도 성공하시는 하루되시고

다음 포스팅에서 뵙겠습니다.

 

빠이~