저번 게시글에서는 키움 API의 설치 및 연결을 확인하였다.
이번 챕터는 로그인을 진행하고 계좌 정보를 가져오는 과정을 진행한다.
책에서는 먼저 3가지 용어를 설명한다.
우리가 증권 서버에 요청하는 함수인 '시그널'
요청 결과를 어느 함수에서 받을지 지정해주는 '이벤트'
요청 결과를 받을 함수 '슬롯'
시그널과 이벤트는 이미 만들어진 함수로서 API로 제공되고, 슬롯 함수만 우리가 만들어서 사용한다.
먼저 로그인을 요청하는 함수를 만들어 본다.
event_slots()는 이벤트를 모아놓는 함수이고, signal_login_commConnect()는 로그인을 요청하는 함수를 포함하고 있는 함수다.
OnEventConnect 함수는 로그인 요청의 결괏값을 받을 함수를 지정하는 이벤트이다. 이벤트.connect(슬롯) 형태로 결괏값을 반환받을 슬롯을 연결한다.
self.login_event_loop 는 로그인을 요청하고 안전하게 완료될 때까지 기다리게 만들기 위한 이벤트 루프 변수다.
OnEventConnect 이벤트가 발생하면 결괏값으로 로그인 성공 여부를 포함한 변수를 해당 슬롯으로 보내주고, 그 인자를 err_code라는 변수로 받는다. 어떤 인자를 보내주는지는 저번 게시글에서 설치한 KOAStudio에서 확인할 수 있다.
해당 에러코드들을 모아놓을 파일을 만들어본다.
프로젝트 디렉토리 아래에 config폴더를 생성하고 그 안에 errorCode.py를 만들었다. errorCode.py에 딕셔너리 형태로 모아놓는다.
책 보고 열심히 따라 쓰고 있었으나 중략되어 어쩔 수 없이 저자의 깃헙에서 옮겨왔다. 힘들게 쓰지 말고 저자의 깃헙에서 옮겨 적는 걸 추천한다. 깃헙 주소는 게시글 가장 아래에 들어갈 예정이다.
로그인 에러 뿐만아니라 다른 에러들도 들어가 있어서 중략되었던 것 같다. 이제 보니 책에 내용이 나와있네...
kiwoom.py에서 모아 놓은 에러코드를 참조할 수 있도록 errorCode를 임포트한다.
아까 적지 못했는데 2번 줄은 QEventLoop를 사용하기 위하여 임포트하였다. 두 개의 임포트를 추가하여 코드에 있던 에러들은 사라졌을 것이다.
시그널을 요청하는 코드
dynamicCall은 PyQt5에서 제공하는 함수로, 서버에 데이터를 송수신해주는 기능이 있다고 한다. 이 함수는 키움 서버에 데이터를 요청할 때 꼭 필요한 함수여서 요청할 때마다 사용한다.
따라서 이 함수를 통해 키움 서버에 로그인을 요청하고, 인자로는 문자열 타입의 "CommConnect()" 함수를 전달한다. 이 함수는 로그인을 요청하는 시그널 함수이다.
로그인이 요청되면 다음 코드를 실행하려 하겠지만 결과를 받지 못한 상태에선 다음 코드가 실행되어선 안되고, 키움 서버에 요청 중인 네트워크 통신이 끊기지 않아야 하기 때문에 이벤트 루프를 실행한다.
지금까지 작성된 kiwoom.py의 전체 코드는 다음과 같다.
로그인을 하고 나면 개인 정보와 관련된 데이터를 요청할 수 있는데, 그중에서 가장 필요한 정보는 계좌와 관련된 정보다.
계좌 정보를 가져올 때는 GetLoginInfo(QString) 을 이용한다. 함수 안에 QString으로 인자를 지정하고, ACCNO를 가져오겠다고 지정하였다. KOAStudio를 보면 ACCNO 외에도 여러 변수가 있어 참고하면 좋을 듯하다.
이때 계좌가 여러 개면 계좌번호1;계좌번호2 의 형태로 반환되기 때문에 ;로 구분하여 리스트에 담고, 첫 번째 요소만 가져와 self.account_num 변수로 지정한다.
여기까지 작성된 코드를 실행하면 "정상처리" 와 계좌번호가 나온다는데 나는 정말 당연하게도 에러가 났다.
생각해보면 정말 당연하다. 코드의 어느 곳에도 아이디와 비밀번호를 입력하는 곳이 없었다. 먼저 키움의 프로그램에 로그인이 되어있어야 하나 싶어서 찾아보던 중에 KOAStudio에 OpenAPI접속 메뉴가 있었다. 이 메뉴를 통해 우선 키움에 로그인하였지만 여전히 프로그램은 실행되지 않았다.
그래서 저자의 유튜브를 찾아가 이 부분을 설명한 영상을 쭉 봤지만 그 어느 곳에도 로그인하는 모습이 없고, 아이디가 비밀번호가 담긴 코드도 없었다.
이 부분 강의 영상 댓글에 나와 같은 에러가 발생한 분들이 있었고, 그 답글에 64비트라 나오는 에러라고 저자의 설명이 있었다. 결국 아나콘다에서 다시 32비트 설정하고 새로 가상 환경을 만들어서 실행했더니 키움 로그인 창이 잘 나왔다.
분명 이번 프로젝트를 위해 가상환경을 만들 때도 conda SET_FORCE_32BIT=1 을 입력한 직후에 만든 환경임에도 불구하고 64비트로 설치가 된 건 무슨 이유인지 잘 모르겠다. 여러 블로그들에서 py37_32 와 같이 뒤에 32를 붙이던데 이게 문제였나 싶다. 사실 이게 문제일 거라고 생각하진 않는데 이러고 나니 되는 게 참 신기하다. 알다가도 모르겠다.
새 환경에 맞게 새 프로젝트를 만들어 아무튼 성공했다. 다시 생각해보니 기존 프로젝트 설정만 바꿔줬어도 됐을 것 같지만 앞으로는 여기서 해야겠다.
이 에러때문에 한 시간이나 썼다...ㅠㅠ 오늘은 여기까지
중간중간 책에 적힌 설명을 쓰지 않고, 자세한 내용을 적지 않았지만 책에 있는걸 다 옮기면 문제가 될 것 같아 다 옮기지는 못하겠다. 자세한 내용은 꼭! 책을 참고하도록 하자!
이 카테고리 게시글들은 아래 책을 따라하는 후기로, 자세한 내용은 아래 책과 저자의 유튜브를 참고하시고, 예제소스는 저자의 깃헙에서 확인하실 수 있습니다.
책 정보 : https://book.naver.com/bookdb/book_detail.nhn?bid=16330702
손가락 하나 까딱하지 않는 주식 거래 시스템 구축(위키북스 프로그래밍 & 프랙티스 시리즈 23)
매일 주식만 바라보던 일상에서 해방되어 가족 또는 친구들과 행복한 시간을 보내길 바랍니다!24시간 자동으로 주식을 분석하고 거래하는 시스템을 구축하는 방법을 배우고 나머지 시간은 더 ��
book.naver.com
저자 유튜브 : www.youtube.com/watch?v=1lHzaihEb48&list=PLDtzZPtOGenaSknTbsb6x6L39V0VPz_rS&index=2&t=0s
( 위 유튜브는 이 책을 설명해주는 재생목록의 첫 번째 영상입니다.)
저자 Github : https://github.com/programgarden
programgarden - Overview
책 : 24시간 운영 가능한 주식투자 시스템 구축하기[파이썬으로 만드는 자동 트레이딩 시스템] 유튜브: 프로그램 동산 학습코드 자료입니다. - programgarden
github.com
예제 소스는 저자의 깃허브에서 확인하실 수 있습니다.
위 3개의 링크는 매 게시글마다 올라갈 예정입니다.
'파이썬으로 주식 거래 시스템 구축' 카테고리의 다른 글
CHAPTER 4. 계좌 정보 가져오기 네 번째 이야기 (0) | 2020.07.13 |
---|---|
CHAPTER 4. 계좌 정보 가져오기 세 번째 이야기 (0) | 2020.07.09 |
CHAPTER 4. 계좌 정보 가져오기 두 번째 이야기 (3) | 2020.07.06 |
CHAPTER 3. 키움 API 첫 번째 이야기 (0) | 2020.06.30 |
[손가락 하나 까딱하지 않는 주식 거래 시스템 구축] 시작 및 안내사항 (0) | 2020.06.29 |